Rabu, 09 Januari 2013

ArTikeL Pertemuan 10


Nama        : Nining Wahyu Septiani
NIM         : 13111940
Kelas       : 13.3D.01
Mata Kuliah : Arsitektur Komputer



TUGAS !!!


Ambil 5 line program assembler, analisa :
  1. Elemen-elemen intruksi 
  2. Jenis-jenis intruksinya  
  3. Mode Pengalamatan
  4. Tuliskan penjelasan intruksinya

PENGENALAN ....




Pengenalan Bahasa assembler, 

Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language).



Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program.

Kelebihan Bahasa Assembly:



  1. Ketika di-compile lebih kecil ukuran
  2. Lebih efisien/hemat memori 
  3. Lebih cepat dieksekusi

Kesulitan Bahasa Assembly:
  1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi
  2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak
  3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis


Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu:
  1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program)
  2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler)





Elemen-elemen Instruksinya


Instruksi bahasa assembly


   Instruksi bahasa assembly adalah representasi simbolik instruksi mesin tunggal. Dalam bentuknya yang paling sederhana, yang terdiri dari satu mnemonic, kode alphabet singkat yang secara harfiah “membantu memori” dalam mengingat instruksi CPU. Mnemonic mungkin diikuti oleh operand contoh berikut:

  • clc ; hanya sebuah mnemonic
  • inc ax ; operand tunggal
  • mov ax, bx ; dua operand

   setiap instruksi dapat diikuti oleh komentar, yang selalu diawali dengan titik koma(;). Operand mungkin berupa register, variable, lokasi memori atau nilai immediate. Contoh :

  • 10      (nilai immediate)
  • count  (variable)
  • AX      (register)
  • [0200] (lokasi memori)


Contoh program

   Program bahasa assembly dibangun oleh instruksi dan operand. Instruksi memerintahkan CPU untuk melaksanakan aksi, sedang variable adalah lokasi memori dimana dat disimpan. Variable juga disebut operand memori. Operand langsung adalah konstanta seperti 5 dan 10. Berikut ini contoh program untuk menjumlahkan 3 bilangan dan menyimpannya dalam variable yang disebut sum. Sum diasumsikan dalam heksadesimal.

  • mov ax, 5 ; memindahkan 5 ke dalam register ax
  • add ax, 10 ; menambahkan nilai 10h terhadap register ax
  • add ax, 20 ; menambahkan nilai 20h terhadap register ax
  • mov sum, ax ; menyimpan ax dalam variable sum
  • int 20 ; akhir program

   instruksi MOV memerintahkan CPU untuk memindahkan atau menyalin data, dari operand sumber ke operand tujuan. Baris 1 memindahkan 5 ke dalam register AX. Baris 2 memindahkan 10 (heksa) ke dalam AX, membuatnya sama dengan 15. Baris 3 menambahkan 20 ke AX, membuatnya sama dengan 35, dan baris 4 menyalin AX ke dalam variable dalam memori yang disebut SUM. Baris terakhir menghentikan program.


 Perintah DEBUG untuk menyusun dan menguji program adalah sebagi berikut:


Perintah
Komentar
A 100
Mov ax, 5
Add ax,10
Add ax,20
Mov [0120], ax
Int 20

R
T
T
T
G
Q
Assembly dimulai pada lokasi 100h
Perintah program yang pertama


Hasil jumlah pada lokasi 0120h
Akhir program
(tekan Enter untuk mengakhiri assembly)
Menampilkan register
Trace satu instruksi


Eksekusi sisa program
Keluar dari Debug kembali ke DOS

           

 Setelah instruksi yang kedua, akan diperoleh tampilan hasil sebagai berikut:

  • mov ax, 5      ax : 05
  • add ax, 10     ax : 10
  • add ax, 20     ax : 20
  • mov sum, ax  ax : 35   sum : 35

AX = 0015 BX= 0000 CX= 0000 DX= 0000 SP= FFEE
BP= 0000 SI= 0000 DI= 0000 DS= 23AD ES= 23AD
SS= 23AD CS= 23AD IP= 0106 NV UP EI PL NZ NA PO NC
23AD : 0106 052000 ADD AX, 0020

   
   Register AX merupakan hasil penjumlahan 5 dan 10 sehingga AX= 15. Register IP menyimpan alamat instruksi berikutnya yang akan dieksekusi (0106). Instruksi berikutnya yang akan dieksekusi adalah ADD AX, 0020.

   
Elemen dasar bahasa assembly

   Karakter- karakter dasar assembler mungkin digunakan untuk membentuk nomor, nama, perintah, dan parameter.


Konstanta

  Konstanta adalah nilai yang diketahui dan dikalkulasikan pada saat penyusunan program. Konstanta mungkin nomor atau karakter string. Dia tidak dapat diubah pada saat program dijalankan.


Kumpulan karakter dalam assembly

Letter              : A-Z, a-z
                        Digit                : 0-9
                        Karakter khusus:
                        ?                                  , (koma)
                        @                                
                        _                                  &
                        $                                  %
                        :                                   !
                        .                                   
                        []                                  ~
                        ()                                  |
                        {}                                =
                        +                                  #
 -                                     ^
                        /                                   ;          
                        *                                  `     

    Variable, sebaliknya, adalah lokasi memori yang dapat berubah pada saat program dijalankan. Contoh berikut adalah konstanta:
  • ‘ABC’
  • 2134
  • 5*6
  • (1+2)/3

   Integer. Integer dibangun oleh digit-digit angka tanpa decimal,diikuti oleh karakter radix (d=decimal, h=hexa, q=octal, b=biner)

Contoh 

Contoh
Radix
11110000b
200
300d
4A6Bh
2047q
2047o
Biner
Decimal
Decimal
Heksadesimal
Octal
oktal

                    

   Bilangan riil. Angka riil mengandung digit, titikdesimal tunggal, eksponen (opsional) dan tanda awal (opsional). Sintaknya:


[{+/-}] digit.digit [E{+/-}] digit

Contoh:
           2.3
           + 200.576 E +05
           0.243526E – 05
           6.08 e3


    Notasi sintak. Dalam contoh sebelumnya dan pada contoh yang akan datang, elemen opsional akan ditutup dengan kurung siku. Tanda kurung besar mengidentifikasikan pilihan yang diperlukan. Kata kunci yang diperlukan ditulis dalam huruf capital. Kata dengan huruf kecil miring adalah istilah- istilah yang didefinisikan sebelumnya seperti identifier, operand, dan register.

    Karakter atau konstanta string. Karakter ASCII tunggal atau string karakter yang ditutup oleh tanda quotasi tunggal (‘’) atau ganda (“”), contoh:
  
  “a”
  ‘B’
  “Stack Overflow”
  ‘012#?%&’

    Konstanta karakter panjangnya 1 byte. Panjang sebuah string ditentukan oleh jumlah karakter yang ada di dalamnya. Konstanta berikut panjangnya 5 byte:
        ‘ABCDE’

    Apostrof (‘) ditutup diantara dua tanda quotasi (“”), atau tanda quotasi ganda (“”) ditutup oleh tanda quotasi tunggal (‘’). Contoh berikut adalah benar:
         “That’s not all………”
         ‘The file “First” was not found’
         “The file ‘First’ was not found”

   
Pernyataan

   Pernyataan/perintah bahasa assembly terdiri dari nama, mnemonic, operand dan komentar. Pernyataan secara umum dibagi menjadi dua kelas, yaitu instruksi dan perintah. Instruksi adalah pernyataan yang dapat dieksekusi, sementara perintah adalah pernyataan yang menyediakan informasi untuk membantu assembler dalam menghasilkan kode yang dapat dieksekusi. Format umum sebuah kalimat:

            [name][mnemonic][operand][;coment]

   Kalimat harus ditulis pada baris tunggal dan tidak melebihi 128 kolom.

  Perintah, atau pseudo op, adalah pernyataan yang berefek pada daftar program atau cara kode mesin dibuat. Contoh, perintah DG memerintah assembler untuk membuat memori untuk variable bernama count dan member nilai awal 50.

    Count DB 50

  Instruksi dieksekusi oleh mikroprosesor pada saat dijalankan. Instruksi dibagi ke dalam tipe-tipe umum, seperti: kendali program, transfer data, aritmetik, logic, dan I/O. Instruksi-instruksi selalu diterjemahkan langsung ke dalam kode mesin oleh assembler. Setiap satu instruksi bahasa assembly diterjemahkan langsung ke dalam satu instruksi bahasa mesin.


Nama

   Nama mengidentifikasikan label, variable, symbol atau kata kunci. Nama mungkin mengandung salah satu karakter berikut:


Karakter
Penjelasan
A…Z, a…z
0-9
?
_
@
$
.
Huruf
Angka
Tanda Tanya
Underscore
Tanda @
Tanda dollar
Titik


Nama mempunyai batasan sebagai berikut:
  1. Hanya 31 karakter pertama yang dikenali,
  2. Tidak ada perbedaan antara huruf capital dan huruf kecil,
  3. Karakter pertama tidak boleh angka,
  4. Jika digunakan, tanda (.) hanya bisa digunakan sebagai karakter pertama,
  5. Tidak boleh memilih nama yang samadengan kata kunci (perintah/direktif).

Variable dan konstanta. Nama digunakan sebelum perintah alokasi memori mengidentifikasikan lokasi diman data disimpan dalam memori. Atau, mungkin juga digunakan untuk mengidentifikasikan konstanta, sebagai berikut:

   Count 1 db 50 ; variable (alokasi memori)
   Count 2 equ 100 ; konstanta

Label. Jika nama tampil disamping instruksi program, ini disebut label.
Label berfungsi sebagai penanda kapan saja program mau meloncat atau looping dari satu lokasi ke lokasi lain. Sperti contoh berikut dimana label 1 dan label 2 adalah label yang mengidentifikasikan lokasi dalam program:
    
          Label 1            mov ax, 0

            Label 2            mov ax, 0
                                    
                                    
            Label 2
                                    Jmp label 1


Kata kunci. Kata kunci atau reserved word selalu mempunyai arti yang sebelumnya telah didefinisikan. Keyword mungkin instruksi atau direktif. Contohnya, MOV, ADD, AX, dan END. Kata kunci tidak dapat digunakan keluar dari konteksnya atau sebagai identifier. Contoh kekeliruan penggunaan ADD sebagai label adalah berikut:

           add : mov ax, 10



Jenis-Jenis Instruksinya 

Page 1

Page 2

Page 3



Mode Pengalamatan 



Pengalamatan Langung

Pengalamatan langsung dilakukan dengan memberikan nilai ke suatu register secara langsung, Untuk melaksanakan hal tesersebut digunakan tanda #. Operand yang digunakan pada pengalamatan langsung /immediate data dapat berupa bilangan bertanda mulai 256 hingga +256.
Contoh :
MOV A,#25H             ;Isi akumulator dengan bilangan 25H
MOV DPTR, #20H    :isi register DPTR dengan bilangan 20H
MOV R1,10H :           ; isi register R1 dengan 10H
MOV A,#-1                ; sama dengan MOV A,#0FFH
                             ; karena 00H 1 menjadi FFH


Pengalamatan Tak Langsung

Pada pengalamatan ini, operand menunjuk ke sebuah register yang berisi lokasi alamat memori yang akan digunakan dalam operasi. Untuk melaksanakan pengalamatan tak langsung digunakan symbol @. Pengalamatan jenis ini biasa digunakan untuk melakukan penulisan, pemindahan atau pembacaan beberapa data dalam lokasi memori. AT89C51 mempunyai sebuah register 16 bit (DPTR) yang dapat digunakan untuk melakukan pengalamatan tidak langsung.

Contoh :

ADD, A,R1             ; Tambahkan isi RAM yang lokasinya ditunjukkan oleh   
                            ;register R1 ke akumulator
DEC @R1               ;Kurangi satu isi RAM yang alamatnya ditunjukkan oleh R1
MOVX, ADPTR, A   ; pindahkan isi dari akumulator ke memori luar yang
    ; lokasinya ditunjukkan oleh data pointer (DPTR)




Pengalamatan Data

Pengalamatan data terjadi pada sebuah perintah ketika nilai operasi merupakan alamat dari data yang akan diisi atau yang akan dipindahkan.
Contoh :
MOV P1,A                  ;isi P1 dari Akumulator
MOV P2,FFH              ;isi P2 dengan nilai FFH


Pengalamatan Kode

Pengalamatan kode terjadi ketika operand merupakan alamat dari instruksi JUMP dan CALL. Berikut contoh ACALL yang memanggil label Tunda, sehingga akan melompat ke lokasi memori bernama Tunda.

Contoh :

ACALL Tunda
TUNDA:
                MOV A,#FEH
LOOP:           
            DJNZ A, LOOP
            RET


Pengalamatan Bit

Pengalamatan bit ialah penunjukkan alamat lokasi bit baik dalam RAM internal atau perangkat keras menggunakan symbol titik (.).

Contoh :

SETB P1.7     ; Set bit port 1.7 aktif
SETB TR1      : Set TR1 (Timer 1 aktif)
SETB RXD     ; memberikan logika 1 pada kaki RXD yang berada di port 3.0




Operator

Operator digunakan untuk melakukan aksi aritmatika, logika pergeseran bit dan lain-lainnya pada operand .Beberapa operator yang tersedia diantaranya :
      Operator Aritmatika
      *  =  untuk perkalian
      /   = untuk pembagian
      +  = untuk penambahan
      -   = untuk pengurangan

Contoh : MOV A, #25H+3H ; sama dengan MOV A,#28H


  Operator Logika
 OR untuk operasi OR
 AND untuk operasi AND
 XOR untuk operasi XOR
 EXOR untuk operasi EXOR
 NOT untuk operasi invert

Contoh :
MOV A, #20H OR 40H          ;sama dengan MOV A,#60H
MOV A,#10H AND 31H         ;sama dengan MOV A, 10H

     Operasi Khusus
      SHR 16 bit geser ke kanan
      SHL 16 bit geser ke kiri
      HIGH pilih bagian tas bit
      LOW pilih bagian bawah bit
      EQ = sama dengan
      NET <> tidak sama dengan
      Lt < lebih kecil
      LE <= lebih kecil atau sama dengan
      GT >; lebih besar
      GE >;= lebih besar atau sama dengan

Dimana perlu anda perhatikan prioritas dari operator sebagai berikut :
()
HIGH , LOW
Z*/, MOD, SHL , SHR
+, -
EQ, NE, LT, LE, GT, GE,=,<>,<,<=,>,>=
NOT
AND
OR, XOR

Tuliskan  penjelasan Isntruksinya

Contoh 1 :

.model small
.code
org 100h
mulai:
mov ah,2
mov dl,'B'
int 21h
int 20h
end mulai
    Penjelasan :

    • .Model small (program yang akan dibuat hanya membutuhkan memory kecil)
    • .Code berpasangan dengan org 100h (kita memberitahukan bahwa kita akan menggunkan kode segmen)
    • Mulai : (label, dan diakhir dengan label end mulai untuk membatasi kode inti)
    • Mov ah,2 (perintah menampilakan karakter yang disimpan dalam register DL)
    • Mov dl, “B” ()
    • Int 21h dipasangkan dengan int 20h (berfungsi untuk menampilkan sebuah karakter pada layar)
    Contoh 2


    ORG 0               ;Mulai program dari alamat 0000
          MOV R5,#25h         ;Isikan 25h pada R5
          MOV R7,#34h         ;Isikan 34h pada R7
          MOV A,#0            ;buat A = 0
          ADD A,R5            ;Tambahkan isi R5 ke dalam A
                              ;sehingga A = A + R5
          ADD A,R7            ;Tambahkan isi R7 ke dalam A
                              ;sehingga A = A + R5
          ADD A,#12h          ;Tambahkan 12h ke dalam A
    TUNGGU: SJMP TUNGGU       ;program selesai dan berputar di sini
          END


    Sumber :
    Selesai

    0 komentar: