02-03 Dasar Assembly
Download
Report
Transcript 02-03 Dasar Assembly
Data Definition Directives
Directive
Deskripsi
Bytes
Attribut
DB
Mendefinisikan
Byte
1
Byte
DW
Mendefinisikan
Word
2
Word
DD
Mendefinisikan
DoubleWord
4
Doubleword
DF,DP
Mendefinisikan
Far Pointer
6
Far pointer
DQ
Mendefinisikan
QuadWord
8
Quadword
DT
Mendefinisikan
TenBytes
10
tenbye
Data Definition Directives (Lanj.)
DB (Mendefinisikan 1 byte untuk satu nilai)
Penggunaan : [name] DB nilai,[nilai]
Bagian name tidak bisa digunakan jika
menggunakan debug.
Contoh
list db 10,20,30,40
db 10,20,30,40
(multiple values)
Assignment
MOV Lvalue, Rvalue
Lvalue = register atau alamat memori
Rvalue = literal, register, atau akses memori
Tidak semua register bisa digunakan sebagai Lvalue
atau Rvalue
- A 150
DB 10,0
- A
Mov
Mov
Add
Mov
Int
-
100
ax,0
ah,[150]
ah,10
[151],ah
20
T
T
T
T
D 150,151
Modifikasi program di atas,
- A 150
Db 10,20
- R IP
:100
-
T
T
T
T
D 150,151
Latihan
Modify the program so it adds three memory bytes
together (offsets 150, 151, 152) and stores the result at
offset 153
Data Definition Directives (Lanj.)
DW (Mendefinisikan 2 byte untuk satu nilai)
Penggunaan : [name] DW nilai,[nilai]
Bagian name tidak bisa digunakan jika
menggunakan debug.
Contoh
list dw 1234,5678,9ABC,0DEF
dw 1234,5678,9ABC,0DEF
Reversed storage format Byte terendah
disimpan di lokasi memori terendah ciri khas
pada prosesor Intel dan kompatibelnya.
- A 150
DW 1234,5678
- A
Mov
Mov
Add
Mov
Mov
Int
-
100
ax,[150]
bx,[152]
ax,2
[154],ax
[150],bx
20
T
T
T
T
T
D 150,155
Data Definition Directives (Lanj.)
DD (Mendefinisikan 4 byte untuk satu nilai)
Penggunaan : [name] DD nilai,[nilai]
Contoh
list dw 12345678,9ABC0DEF
Reversed storage format Byte terendah
disimpan di lokasi memori terendah ciri khas
pada prosesor Intel dan kompatibelnya.
Data Definition Directives (Lanj.)
DUP (tidak didukung di DEBUG)
Mengulangi satu atau lebih nilai ketika
mengalokasikan memori berguna untuk alokasi
ruang tabel atau array
Hanya bisa digunakan setelah Data Definition
Drictives (DB,DW, dsb).
Contoh :
db 20 dup(0) mengalokasikan 20 bytes, seluruhnya
bernilai nol.
Data Transfer Instructions
MOV
Menyalin (copy) data dari satu operand ke operand yang
lain
Penggunaan : MOV tujuan,sumber
Yang bisa dijadikan operand :
Register Seluruh register bisa digunakan, kecuali CS dan IP tidak
bisa digunakan sebagai tujuan
Immediate Nilai konstanta integer bisa dimasukkan ke semua
register (kecuali register segmen atau IP) dan ke memori.
Direct Alamat memori atau nama variabel, bisa digunakan
sebagai salah satu operand.
Indirect RegisterAlamat memori operand tersimpan di register.
Data Transfer Instructions (Lanj.)
Hal-hal yang tidak diperbolehkan dalam MOV :
CS atau IP sebagai register tujuan.
Memasukkan nilai immediate ke dalam register
segment.
Menyalin dari register segment ke register segment.
Tujuan dan sumber memiliki ukuran yang berbeda.
Penyalinan dari memori ke memori.
Data Transfer Instructions (Lanj.)
Contoh kesalahan:
mov ip,ax
mov ds,1000h
mov ds,es
mov al,bx
mov si,al
mov 1000h,ax
mov [0150],[0151]
Contoh program mov immediate values ke register
dan mov antar-register
- A
Mov
Mov
Mov
Mov
Int
-
T
T
T
T
100
ax,2810
bx,ax
dl,ah
cl,bl
20
Data Transfer Instructions (Lanj.)
XCHG
Menukarkan isi dari dua register atau sebuah register
dengan memori/variabel
Penggunaan : XCHG op1,op2
Op1,op2 bisa berupa memori atau register, tapi salah
satunya harus register.
Contoh
xchg ax,bx
xchg ah,al
xchg var1,bx
- A 150
Dw 1122
- A 100
Mov ax,1234
Mov bx,5678
Xchg ax,bx
Xchg ax,[150]
int 20
-
T
T
T
T
D 150,152
Data Transfer Instructions (Lanj.)
Stack Operations
(PUSH,POP,PUSHF,POPF,PUSHA,PUSHAD)
SS (Stack Segment) registers contains the base location of
the stack
SP (Stack Pointer) contains the top of the stack, where the
last value were pushed
PUSH
Menyalin isi register 16-bit atau operand ke dalam stack
kemudian menurunkan nilai SP yang berisi alamat puncak
stack (alamat tampat nilai terakhir dimasukkan).
Contoh
push ax memasukkan nilai ax ke stack
Data Transfer Instructions (Lanj.)
POP
Menyalin isi dari stack yang ditunjuk oleh SP ke dalam
register 16-bit atau memori (variabel) kemudian
menaikkan nilai SP.
Contoh
pop cx memasukkan nilai dari stack
register cx
ke
- R sp
- a 100
Mov ax,10
Push ax
Mov ax,20
Push ax
Int 20
-
R
T
T
R SP
T
T
R SP
- R sp
- a 100
Mov ax,10
Push ax
Mov ax,20
Push ax
Pop [150]
Pop [152]
Int 20
-
R
T
T
R
T
T
R
D
T
R
T
R
D
SP
SP
150 155
SP
SP
150,155
Arithmetic Instructions
INC
Menambahkan 1 pada operand
Penggunaan : INC destination
Contoh inc al
inc bx
DEC
Mengurangkan 1 dari operand
Penggunaan : DEC destination
Contoh
dec al
dec bx
Destination bisa 8-bit atau 16-bit, INC dan DEC lebih cepat
dibandingkan instruksi ADD dan SUB, semua status FLAG
dipengaruhi kecuali CARRY FLAG
- A
Mov
Inc
Dec
Int
- R
- T
- T
100
ax,10
ax
ax
20
Perulangan (Looping)
LOOP addr
Perintah LOOP otomatis mengurangi CX dengan 1 dan
kembali ke alamat yang diberikan
Looping dilakukan selama register > 0
Output ?
- A 100
Mov cx,1a
Mov dl,41
105: Mov ah,02
Int 21
Inc dl
Loop 105
int 20
- G
Buat program untuk menuliskan
9876543210
- A 100
Mov cx,0A
Mov dl,39
105: Mov ah,02
Int 21
Dec dl
Loop 105
int 20
- G
Arithmetic Instructions (Lanj.)
ADD
Menambahkan operand (source) ke destination operand.
Penggunaan : ADD destination,source
Bagian source tidak akan berubah setelah operasi dilakukan.
Ukuran operand-operand harus sama.
Hanya satu operand memori yang boleh digunakan.
Register segment tidak boleh menjadi tujuan
Contoh
add
add
add
add
add
add
al,1
cl,al
bx,1000h
var1,ax
dx,var1
var1,10
Arithmetic Instructions (Lanj.)
SUB
Mengurangkan source operand dari destination operand.
Penggunaan : SUB destination,source
Bagian source tidak akan berubah setelah operasi dilakukan.
Ukuran operand-operand harus sama.
Hanya satu operand memori yang boleh digunakan, Segment
registers tidak bisa digunakan sebagai destination operand.
Contoh
sub al,1
sub cl,al
sub bx,1000h
sub var1,ax
Secara ril pada level mesin, source operand dinegasikan kemudian
dijumlahkan dengan operand.
Arithmetic Instructions (Lanj.)
Operasi penjumlahan dan pengurangan dapat
memberikan efek terhadap flag register (apabila
ADD atau SUB menghasilkan 0 maka ZERO FLAG
di-set, apabila hasil negatif maka SIGN FLAG di-
set).
Contoh
mov ax,10
sub ax,10 AX=0, ZF=1
mov ax,1
sub ax,2 AX=FFFF, SF=1
Latihan 1
Berapakah nilai register AX dan DX setelah instruksi-
instruksi berikut dieksekusi ?
mov ax,FFFF
inc al
sub al,2
mov dl,al
add dx,2
int 20
Latihan 2
Tulis program dalam bahasa Assembly yang
melakukan hal-hal berikut :
1.
2.
3.
Mengisi register-register dengan nilai-nilai berikut :
AX=0001, BX=0002, CX=0003, DX=0004
Push masing-masing register ke dalam stack dengan
urutan : AX,BX,CX,DX
Pop (ambil) dari stack, kemudian letakkan dalam
register dengan urutan : AX,BX,CX,DX
Berapakah nilai AX,BX,CX,DX setelah barisbaris program tersebut dieksekusi ?
Latihan 3
Berapakah nilai hexadecimal dari destination operand pada setiap instruksi ?
(Jika terdapat instruksi yang ERROR, tuliskan ERRORsebagai jawaban !)
Instruction
Before
After
Mov ax,bx
AX=0022 BX=00A6
AX=00A6
Mov ah,3
AX=06AF
AX=03AF
Mov bl,ax
BX=00A5 AX=4000
BL=Error
Mov di,100
DI=06E9
DI=0100
Mov ds,cx
DS=0FB2 CX=0020
DS=error
Mov ah,bl
AX=0023 BX=00A5
AX=A523
Add ah,3
AX=06AF
AX=09AF
Inc bl
BX=FFFF
BX=0000
Add di,100
DI=06E9
DI=07E9
Dec cx
CX=0000
CX=FFFF
Latihan 4
Gunakan instruksi PUSH dan POP untuk membalik
bilangan 16–bit dalam list yang disimpan pada offset
200. Simpan hasilnya di offset 208
0200 : dw 1000, 2000, 3000, 4000
0208 : dw 0, 0, 0, 0
Latihan 5
Berdasarkan kodes ASCII tersebut, tulislah
program dalam bahasa assembly dengan
output program sebagai berikut :
•ZYXWVUTSRQPONMLKJIHGFEDCBA
•AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQq
RrSsTtUuVvWwXxYyZz
Program harus memanfaatkan istruksi LOOP
dan INT