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 RegisterAlamat 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