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 dengan melakukan operasi tertentu sesuai dengan daftar yang sudah tertanam dalam CPU)
Daftar Assembly Directive
Assembly Directive | Keterangan |
EQU | Pendefinisian konstanta |
DB | Pendefinisian data dengan ukuran satuan 1 byte |
DW | Pendefinisian data dengan ukuran satuan 1 word |
DBIT | Pendefinisian data dengan ukuran satuan 1 bit |
DS | Pemesanan tempat penyimpanan data di RAM |
ORG | Inisialisasi alamat mulai program |
END | Penanda akhir program |
CSEG | Penanda penempatan di code segment |
XSEG | Penanda penempatan di external data segment |
DSEG | Penanda penempatan di internal direct data segment |
ISEG | Penanda penempatan di internal indirect data segment |
BSEG | Penanda penempatan di bit data segment |
CODE | Penanda mulai pendefinisian program |
XDATA | Pendefinisian external data |
DATA | Pendefinisian internal direct data |
IDATA | Pendefinisian internal indirect data |
BIT | Pendefinisian data bit |
#INCLUDE | Mengikutsertakan file program lain |
Daftar Instruksi
Instruksi | Keterangan Singkatan |
ACALL | Absolute Call |
ADD | Add |
ADDC | Add with Carry |
AJMP | Absolute Jump |
ANL | AND Logic |
CJNE | Compare and Jump if Not Equal |
CLR | Clear |
CPL | Complement |
DA | Decimal Adjust |
DEC | Decrement |
DIV | Divide |
DJNZ | Decrement and Jump if Not Zero |
INC | Increment |
JB | Jump if Bit Set |
JBC | Jump if Bit Set and Clear Bit |
JC | Jump if Carry Set |
JMP | Jump to Address |
JNB | Jump if Not Bit Set |
JNC | Jump if Carry Not Set |
JNZ | Jump if Accumulator Not Zero |
JZ | Jump if Accumulator Zero |
LCALL | Long Call |
LJMP | Long Jump |
MOV | Move from Memory |
MOVC | Move from Code Memory |
MOVX | Move from Extended Memory |
MUL | Multiply |
NOP | No Operation |
ORL | OR Logic |
POP | Pop Value From Stack |
PUSH | Push Value Onto Stack |
RET | Return From Subroutine |
RETI | Return From Interrupt |
RL | Rotate Left |
RLC | Rotate Left through Carry |
RR | Rotate Right |
RRC | Rotate Right through Carry |
SETB | Set Bit |
SJMP | Short Jump |
SUBB | Subtract With Borrow |
SWAP | Swap Nibbles |
XCH | Exchange Bytes |
XCHD | Exchange Digits |
XRL | Exclusive OR Logic |
untuk yang lebih jelas dan detil:
a. MOV
Perintah MOV adalah perintah untuk mengisi, memindahkan,memperbaruhi isi suatu register, variable ataupun lokasi memory, Adapun tata penulisan perintah MOV adalah :
MOV [operand A], [Operand B]
Contoh :
MOV AH,02
Operand A adalah Register AH
Operand B adalah bilangan 02
Hal yang dilakukan oleh komputer untuk perintah diatas adalahmemasukan 02 ke register AH.
b. INT (Interrupt)
Bila anda pernah belajar BASIC, maka pasti anda tidak asing lagi dengan perintah GOSUB. Perintah INT juga mempunyai cara kerja yang sama dengan GOSUB, hanya saja subroutine yang dipanggil telah disediakan oleh memory komputer yang terdiri 2 jenis yaitu :
- Bios Interrupt ( interput yang disediakan oleh BIOS (INT 0 – INT 1F))
- Dos Interrupt ( Interrupt yang disediakan oleh DOS (INT 1F – keatas))
c. Push
Adalah perintah untuk memasukan isi register pada stack, dengan tata penulisannya:POP [operand 16 bit]
d. Pop
perintah yang berguna untuk mengeluarkan isi dari register/variable dari stack,dengan tata penulisannya adalah : POP [operand 16 bit]
e. RIP (Register IP)
Perintah ini digunakan untuk memberitahu komputer untuk memulai memproses program dari titik tertentu.
f. A (Assembler)
Perintah Assembler berguna untuk tempat menulis program Assembler.
-A100
0FD8:100
g. RCX (Register CX)
Perintah ini digunakan untuk mengetahui dan memperbaruhi isi register CX yang merupakantempat penampungan panjang program yang sedan aktif
pun, ada yang demikian:
1. Definisi Stack
Secara harfiah stack berarti tumpukan, yaitu bagian memori yang digunakan untuk menyimpan nilai suatu register untuk sementara, membentuk tumpukan nilai. Stack dapat dibayangkan sebagai tabung memanjang (seperti tabung penyimpan koin). Sedangkan nilai suatu register dapat dibayangkan sebagai koin yang dapat dimasukkan dalam tabung tersebut. Jika ada data yang disimpan maka data-data tersebut akan bergeser ke arah memori rendah, dan akan bergeser kembali ke arah memori tinggi bila data yang disimpan telah diambil.
Secara harfiah stack berarti tumpukan, yaitu bagian memori yang digunakan untuk menyimpan nilai suatu register untuk sementara, membentuk tumpukan nilai. Stack dapat dibayangkan sebagai tabung memanjang (seperti tabung penyimpan koin). Sedangkan nilai suatu register dapat dibayangkan sebagai koin yang dapat dimasukkan dalam tabung tersebut. Jika ada data yang disimpan maka data-data tersebut akan bergeser ke arah memori rendah, dan akan bergeser kembali ke arah memori tinggi bila data yang disimpan telah diambil.
2. Perintah Perpindahan Data
Terkait perpindahan data, bahasa assembler mempunyai beberapa perintah yang dapat dibedakan yaitu untuk memindahkan data tunggal seperti huruf atau angka dan untuk memindahkan data string yang berupa deretan huruf. Tetapi di sini hanya akan menjelaskan beberapa perintah yang dipakai dalam aplikasi.
Terkait perpindahan data, bahasa assembler mempunyai beberapa perintah yang dapat dibedakan yaitu untuk memindahkan data tunggal seperti huruf atau angka dan untuk memindahkan data string yang berupa deretan huruf. Tetapi di sini hanya akan menjelaskan beberapa perintah yang dipakai dalam aplikasi.
2.1. PUSH/POP
Syntax :
Syntax :
PUSH Reg16Bit POP Reg16Bit
PUSH adalah perintah penyimpanan data ke memori stack
secara langsung, dan untuk mengambil keluar nilai yang disimpan
tersebut gunakan perintah POP. Nilai terakhir yang dimasukkan dalam stack, dengan perintah PUSH, akan terletak pada puncak tabung stack. Dan perintah POP pertama kali akan mengambil nilai pada stack
yang paling atas kemudian nilai berikutnya, demikian seterusnya. Jadi
nilai yang terakhir dimasukkan akan merupakan yang pertama dikeluarkan.
Operasi ini dinamakan LIFO (Last In First Out). Perhatikan contoh berikut ini:
push ax; push bx; push cx; mov ax, $31C; mov bx; $31D; mov cx, $31E; pop cx; pop bx; pop ax;2.2. MOV
Syntax :
MOV destination, source
Digunakan untuk menyalin data dari memori/register ke memori/register atau dari data langsung ke register. Nilai pada source yang dipindahkan tidaklah berubah. Pada contoh di bawah, register al diberi nilai $31C kemudian nilai register al disalin ke register ax. Jadi sekarang nilai register al dan register ax adalah $31C.
mov al, $31C; mov ax, al;
Hal-hal yang tidak boleh dilakukan dalam penyalinan data:
a. Penyalinan data antarregister segmen (ds, es, cs, ss)
mov ds, es ? tidak dibenarkanGunakan register general, misalnya register ax, sebagai perantara
mov ax, es mov ds, ax
atau gunakan stack sebagai perantara
push es pop ds
b. Penyalinan data secara langsung untuk register segmen (ds, es, cs, ss)
mov ds, $31C ? tidak dibenarkan
Gunakan register general, misalnya register ax, sebagai perantara
mov ax, $31C mov ds, ax
c. Penyalinan data langsung antarmemori
mov memB, memA ? tidak dibenarkan
Gunakan register general, misalnya register ax, sebagai perantara
mov ax, memA mov memB, ax
d. Penyalinan data antarregister general yang berbeda daya tampungnya (8 bit dengan 16 bit) tanpa pointer
mov al, bx ? tidak dibenarkan
2.3. IN/OUT
Syntax :
Syntax :
IN Reg16Bit, port OUT port, Reg16Bit
Untuk membaca data dari suatu port dan
memasukkan nilainya ke dalam suatu register gunakan perintah IN. Dan
perintah OUT digunakan untuk memasukkan suatu nilai ke dalam suatu port.
Nilai yang akan dimasukkan diberikan pada register al/ax dan alamat
port diberikan pada register dx. Pada contoh berikut ini, pertama kali register dx disimpan pada stack, menyalin nilai $31E pada register dx kemudian perintah IN akan membaca nilai pada register dx (port bernilai $31E) dan memasukkannya ke dalam register al. Dan terakhir nilai tersebut disalin ke variabel Data.
push dx mov dx, $31E in al, dx mov Data, al pop dx
Dan contoh berikut untuk memberi nilai ($8A) pada suatu port.
push dx mov dx, $31E mov al, $8A out dx, al pop dx3. Operasi Aritmatika
3.1. Penjumlahan
Syntax :
ADD destination, source ADC destination, source INC destination
Perintah ADD akan menjumlahkan nilai pada destination dan source tanpa menggunakan carry (ADD), dimana hasil yang didapat akan ditaruh pada destination. Dalam bahasa pascal pernyataan ini sama dengan pernyataan destination := destination + source. Daya tampung destination dan source harus sama misalnya register al (8 bit) dan ah (8 bit), ax (16 bit) dan bx (16 bit). Perhatikan contoh berikut, nilai register ah sekarang menjadi $10 :
mov ah, $5; mov al, $8; add ah, al
Perintah ADC digunakan untuk menangani penjumlahan dengan hasil yang melebihi daya tampung destination yaitu dengan menggunakan carry (ADD), dalam bahasa pascal sama dengan pernyataan destination := destination + source + carry. Misalnya register ax (daya tampung 16 bit) diberi nilai $1234 dan bx (16 bit) diberi nilai $F221, penjumlahan kedua register ini adalah $10455. Jadi ada bit ke 17 padahal daya tampung register bx hanya 16 bit, penyelesaiannya adalah nilai bx = $0455 dengan carry flag = 1.
Perintah INC digunakan untuk operasi penjumlahan dengan nilai 1. Jadi nilai pada destination akan ditambah 1, seperti perintah destination := destination + 1 dalam bahasa Pascal.
3.2. Pengurangan
Syntax :
Syntax :
SUB destination, source SBB destination, source DEC destination
Perintah SUB untuk mengurangkan 2
operand tanpa carry flag. Hasilnya diletakkan pada destination dalam
bahasa pasca sama dengan pernyataan destination := destination – source. Untuk mengenolkan suatu register, kurangkan dengan dirinya sendiri seperti contoh berikut ini. Pertama kali register ax bernilai $5, kemudian nilai register tersebut dikurangi dengan dirinya sendiri sehingga terakhir nilai register ax adalah 0.
mov ax, $15; mov bx, $10; sub ax, bx; sub ax, ax;
Perintah SBB mengurangkan nilai destination dengan nilai source kemudian dikurangi lagi dengan carry flag (destination := destination – source – carry flag).
Dan perintah DEC untuk mengurangi nilai destination dengan 1.
3.3. Perkalian
Syntax :
Syntax :
MUL source
Digunakan untuk mengalikan data pada accumulator dengan suatu operand dan hasilnya diletak pada register source. Register source dapat berupa suatu register 8 bit (misal bl, bh, dan sebagainya), register 16 bit (bx, dx, dan sebagainya) atau suatu variabel.
3.4. Pembagian
Syntax :
Syntax :
DIV source
Operasi aritmatika ini pada dasarnya sama dengan operasi perkalian.
sumber : http://tid3ustj.blogspot.com/2012/10/daftar-instruksi-bahasa-assembly.html#pages/1