Facebook SDK


 

Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan


bahasa level tinggi misalnya bahasa C, C++, Pascal, Turbo Basic, Java, dan sebagainya. Bahasa C atau
Pascal dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah
dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Assembler
adalah program yang bekerja membantu penulisan instruksi dalam format bahasa inggris sehingga
mudah dibaca dan dipahami.

MOV R0, #02h
MOV A, #03h
ADD A, R0

Perintah baris pertama bekerja menjalankan proses pengisian register R0 dengan data 02h.
Perintah baris kedua bekerja menjalankan proses pengisian register A dengan data 03h. Kemudian
proses penjumlahan data pada register A dengan data pada register R0 dijalankan menggunakan
perintah ADD A,R0 dan menghasilkan data 05h tersimpan di register A.

Perintah MOV dan ADD adalah mnemonik atau singkatan dari perintah MOVE dan ADD.
Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan
oleh komputer.


NOOPERATION CODEASSEMBLY
178 02MOV R0,#02h
274 03MOV A,#03h
328ADD A, RO
Kode bahasa mesin atau sering disebut dengan operation code dari perintah MOV R0,#02h
adalah 78 02. Untuk MOV A,#03h kode operasinya dalah 74 03 dan 28 adalah kode operasi dari
perintah ADD A, R0. Kode operasi untuk setiap perintah dapat dibaca pada lembar instruction set.

Program yang ditulis dengan bahasa assembly terdiri dari label; kode mnemonik, operand 1,
operand 2, keterangan, dan lain sebagainya. Program ini disebut sebagai program sumber (Source
Code). Source code belum bisa diterapkan langsung pada prosesor untuk dijalankan sebagai program.
Source code harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner atau operasi.


Element dari Bahasa Pemrograman Assembler

Bahasa assembly dikategorikan sebagai bahasa tingkat rendah (low level languange). Ini untuk menggambarkan kekhususannya sebagai bahasa yang berorientasi pada machine dependent. Untuk membandingkan bahasa mesin dan bahasa assembly, kita dapat melihatnya dari tiga karakteristik berikut :

1. Mnemonic operation code. Sebagai pengganti numeric operation code (opcodes) yang digunakan pada          bahasa mesin, digunakankanlah mnemonic code pada bahasa assembly. Selain kemudahan dalam   penulisannya dibandingkan dari bahasa mesin juga mendukung pelacakan kesalahan seperti kesalahan   penulisan operation code.

2. Symbolic operand specification. Penamaan simbol diasosiasikan sebagai suatu data atau instruksi. Operand lebih menunjukkan symbolic reference dibandingkan dengan alamat mesin suatu data atau instruksi. Hal ini akan mempermudah pada saat harus dilakukan modifikasi program.
3. Declaration of data/storage area. Data dapat dinyatakan dalam notasi desimal. Ini dilakukan untuk mencegah konversi secara manual dari konstanta ke dalam representasi internal mesin. 
Sebagai contoh :
-5 menjadi (11111010)2 atau 10.5 menjadi (41A80000)16

Suatu statement bahasa assembly mempunyai bentuk umum sebagai berikut :

            [Label]                      Menmonic OpCode                 Operand [operand…]

Tanda kurung siku menunjukkan isi di dalamnya boleh digunakan atau tidak dalam statement tersebut, sebagai contoh : label bersifat optional. Jika label digunakan, hal tersebut menujukkan suatu symbolic name akan dibuat dalam machine word untuk keperluan assembly statement. Bila digunakan lebih dari satu operand, digunakan tanda “koma” untuk memisahkannya. Jika digunakan index, nomor index register ditunjukan dalam sebuah simbol, seperti contoh berikut :

               AGAIN                        LOAD NUMBER(4)

Dimana ‘4’ menunjukkan register yang memiliki index. AGAIN diasosiasikan dengan instruksi mesin yang dihasilkan untuk statement LOAD


Program assembly mengenal tiga jenis statement : (i) imperative statement (ii) declarative statement (iii) assembler directive statement.

Imperative Statement
Statement imperative dalam bahasa assembly ditunjukan dengan suatu tindakan yang dikerjakan selama eksekusi program assembly. Karena itu setiap statement imperative ditranslasikan ke dalam instruksi mesin.


Declarative Statement
Statement declarative dalam bahasa assembly menunjukkan konstanta atau storage area pada suatu program. Sebagai contoh :
               A                  DS               1
secara sederhana storage area sebesar 1 word ditunjukkan dengan sebuah label A. DS di sini menunjukkan Declare Storage (DS).
Suatu konstanta dideklarasikan melalui Declare Constant (DC) statement, contohnya :
               ONE            DC              ‘1’
maksud dari statement di atas adalah label ONE berisi konstanta 1. Programmer dapat mendeklarasikan kontanta dalam desimal, binary, hexadesimal, dsb. Assembler akan mengkonversi bentuk tersebut ke dalam bentuk internal yang tepat.

Konstruksi Program Assembly
Source program dalam bahasa Assembly menganut prinsip 1 baris untuk satu perintah
tunggal. Setiap baris perintah tersebut bisa terdiri atas beberapa bagian (field), yakni bagian Label,
bagian mnemonik, bagian operand yang bisa lebih dari satu dan terakhir bagian komentar. Untuk
membedakan masing-masing bagian tersebut dibuat ketentuan sebagian berikut:

1. Masing-masing bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang lebih dari
    satu masing-masing operand dipisahkan dengan koma.

2. Bagian-bagian tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu bagian yang
    tidak ada maka spasi atau TAB sebagai pemisah bagian tetap harus ditulis.
3. Bagian Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan tidak mengandung
    label maka label tersebut digantikan dengan spasi atau TAB, yakni sebagai tanda pemisah antara
    bagian Label dan bagian mnemonik.


              ORG 0H
              MOV A,#11111110B
Mulai:
              MOV P0,A
              ACALL Delay
              RL A
              SJMP Mulai
Delay:      MOV R0,#0FFH
Delay1:    MOV R1,#0FFH
Delay2:    DJNZ R1,Delay2
              DJNZ R0,Delay1
              RET
END

Label mewakili nomor memori-program dari instruksi pada baris bersangkutan, pada
saat menulis instruksi JUMP, Label ini ditulis dalam bagian operand untuk menyatakan nomor
memori-program yang dituju. Dengan demikian Label selalu mewakili nomor memoriprogram
dan harus ditulis dibagian awal baris instruksi.

Disamping Label dikenal pula Symbol, yakni satu nama untuk mewakili satu nilai
tertentu dan nilai yang diwakili bisa apa saja tidak harus nomor memori-program. Cara
penulisan Symbol sama dengan cara penulisan Label, harus dimulai di huruf pertama dari
baris instruksi.

Mnemonik (artinya sesuatu yang memudahkan diingat) merupakan singkatan
perintah, dikenal dua macam mnemonik, yakni manemonic yang dipakai sebagai instruksi
mengendalikan prosesor, misalnya ADD, MOV, DJNZ dan lain sebagainya. Ada pula
mnemonik yang dipakai untuk mengatur kerja dari program Assembler misalnya ORG, EQU
atau DB, mnemonik untuk mengatur kerja dari program Assembler ini dinamakan sebagai
‘Assembler Directive’.

Operand adalah bagian yang letaknya di belakang bagian mnemonik, merupakan
pelangkap bagi mnemonik. Kalau sebuah instruksi di-ibaratkan sebagai kalimat perintah,

maka mnemonik merupakan subjek (kata kerja) dan operand merupakan objek (kata benda)
dari kalimat perintah tersebut.

Tergantung pada jenis instruksinya, operand bisa berupa berbagai macam hal. Pada
instruksi JUMP operand berupa Label yang mewakili nomor memori-program yang dituju
misalnya LJMP Start, pada instruksi untuk pemindahan/pengolahan data, operand bisa berupa
Symbol yang mewakili data tersebut, misalnya ADD A,#Offset. Banyak instruksi yang
operandnya adalah register dari prosesor, misalnya MOV A,R1. Bahkan ada pula instruksi
yang tidak mempunyai operand, misalnya RET.

Komentar merupakan bagian yang sekedar sebagai catatan, tidak berpengaruh pada
prosesor juga tidak berpengaruh pada kerja program Assembler, tapi bagian ini sangat penting
untuk keperluan dokumentasi.


"Assembler Directive"
Seperti sudah dibahas di atas, bagian Mnemonik dari sebuah baris perintah bisa
merupakan instruksi untuk prosesor, maupun berupa Assembler Directive untuk mengatur
kerja dari program Assembler. Mnemonik untuk instruksi prosesor, sangat tergantung pada
prosesor yang dipakai, sedangkan mnemonik untuk Assembler Directive tergantung pada
program Assembler yang dipakai. Meskipun demikian, terdapat beberapa Assembler Directive
yang umum, yang sama untuk banyak macam program Assembler.

Assembler Directive yang bersifat umum tersebut, antara lain adalah
ORG – singkatan dari ORIGIN, untuk menyatakan nomor memori yang dipakai setelah
perintah itu, misalnya ORG 0000h maka memori berikutnya yang dipakai Assembler
adalah 0000h. ORG berlaku untuk memori program maupun memori-data. Dalam hal
penomoran memori, dikenal tanda sebagai awalan untuk menyatakan nomor memori dari
baris bersangkutan. Misalnya :

ORG 0H
MOV A,#11111110B
Mulai:
MOV P0,A

EQU – singkatan dari EQUATE, dipakai untuk menentukan nilai sebuah Symbol.
Misalnya Angka88 EQU 88 memberi nilai 88 pada Symbol Angka88, atau CR EQU 0D
mempunyai makna kode ASCII dari CR (Caarriage Return) adalah 08.

DB – singkatan dari DEFINE BYTE, dipakai untuk memberi nilai tertentu pada memoriprogram.
Nilai tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII.
DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel.

DW – singkatan dari DEFINE WORD, dipakai untuk memberi nilai 2 byte ke memoriprogram
pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk
membentuk suatu tabel yang isinya adalah nomor-nomor memori-program.

DS – singkatan dari Define Storage, Assembler Directive ini dipakai untuk membentuk
variable. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM)
bukan memori-program (ROM). Hal ini harus benar-benar dibedakan dengan Assembler
Directive DB dan DW yang membentuk kode di memori-program. Dan karena DS
bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak
mengisi nilai pada memori bersangkutan.

Contoh Code Assembly :


start: ;;Memulai aplikasi/program
;;Routine utama

pushfd ;save flag ;; menyimpan isi dari GPR dan Flag Register ke stack
pushad ;save isi semua GPR

;; Menampilkan karakter dilakukan melalui interrupt 10h, service 0Eh
;; dari bios video card, karakter yang akan ditampilkan diberikan
;; melalui register si

lea si,msg

mov ah,0Eh  ;gunakan service 0Eh
mov bl,07h  ;warna foreground
xor bh,bh  ;gunakan page 0, akan muncul bug tanpa ini

MORE_DIS:mov al,cs:0+[si]  ;karakter yang akan ditulis ada pada al
cmp al,’$’ ;’$' ; menandakan akhir string
je NO_MORE_DIS ; tampilan pada layar dilakukan dengan menggunakan bantuan bios
VGA card
inc si
int 10h  ;panggil int 10h (serice dari video bios)
jmp MORE_DIS
NO_MORE_DIS:

popad  ;restore semua GPR
popfd  ;restore semua flags
retn  ;return / akhiri program

;;Definisi Variabel
msg:
DB 10,13 ;; instruksi untuk
menampilkan string

Post a Comment

Previous Post Next Post