inline($90/
$90/
$90);
exit;
inline($90/
$90/
$90);
end.
Hasil Compile
0F9C:0000
0F9C:0005
0F9C:0006
0F9C:0008
0F9C:000A
0F9C:000F
0F9C:0010
0F9C:0011
0F9C:0012
0F9C:0014
0F9C:0015
0F9C:0016
0F9C:0017
9A00009E0F
55
89E5
31C0
9ACD029E0F
90
90
90
EB03
90
90
90
5D
CALL
PUSH
MOV
XOR
CALL
NOP
NOP
NOP
JMP
NOP
NOP
NOP
POP
0F9E:0000
BP
BP,SP
AX,AX
0F9E:02CD
0017
BP
Pada contoh diatas tampak bahwa hasil penterjemahan instruksi PASCAL exit
adalah instruksi mesin JMP.
Dilihat dari fungsi yg dilakukannya, instruksi mesin di P 8088 dapat dibedakan menjadi
3, yaitu :
Data transfer
digunakan untuk (1) memindahkan data dari suatu elemen memory ke elemen memory
lainnya atau (2) mengisi register data dengan suatu data. Contoh: MOV, PUSH, POP
Aritmetika dan Logika
digunakan untuk mengkalkulasi suatu perhitungan aritmetika (contoh: ADD, SUB, MUL,
DIV) dan logika (contoh: AND, OR, NOT, XOR, SHL, SHR)
Kontrol
digunakan untuk memindahkan kontrol instruksi ke suatu lokasi baru (tidak lagi secara
sekuensial). Contoh: JMP, JZ, JE
Instruksi MOV
1. Register ! Data (data yg akan ditulis ke register ditulis langsung di instruksi)
2. Register ! Register (data yg akan ditulis ke register berasal dari register lainnya)
3. Register ! Memory (data yg akan ditulis ke register berasal dari memory,
dan alamat dari data disimpan di register alamat)
4. Memory ! Register (data yg akan ditulis ke memory berasal dari register,
dan alamat memory yg akan ditulis disimpan di register alamat)
Contoh instruksi MOV untuk pengisian langsung (1) dan transfer antar register (2)
-a
0F6C:0100
0F6C:0103
0F6C:0105
0F6C:0107
0F6C:0109
mov
mov
mov
mov
bx,abcd
ah,56
bl,ah
ax,bx
"
"
"
"
mengisi reg.
mengisi reg.
mengcopy isi
mengcopy isi
-r
AX=0000 BX=0000
DS=0F6C ES=0F6C
0F6C:0100 BBCDAB
-t
AX=0000 BX=ABCD
DS=0F6C ES=0F6C
0F6C:0103 B456
-t
AX=5600 BX=ABCD
DS=0F6C ES=0F6C
0F6C:0105 88E3
-t
AX=5600 BX=AB56
DS=0F6C ES=0F6C
0F6C:0107 89D8
-t
AX=AB56
DS=0F6C
CX=0000
SS=0F6C
BX=AB56
ES=0F6C
DX=0000
CS=0F6C
SP=FFEE
IP=0109
catatan:
Instruksi berikut akan menimbulkan Error :
mov ch,5678 :
tidak bisa karena CH = 1 byte dan datanya 2 byte
mov dl,ax
:
tidak bisa karena AX = 2 byte dan DL = 1 byte
mov dx,al
:
tidak bisa karena AL = 1 byte dan DX = 2 byte
mov
mov
mov
mov
mov
00
10
20
30
40
50
60
70
bx,0002
ah,[bx]
ax,[bx]
ax,[bx+1]
[bx],ax
01
11
21
31
41
51
61
71
02
12
22
32
42
52
62
72
03
13
23
33
43
53
63
73
"
"
"
"
"
04
14
24
34
44
54
64
74
mengisi
membaca
membaca
membaca
menulis
05
15
25
35
45
55
65
75
06
16
26
36
46
56
66
76
reg. BX dgn
memori pada
memori pada
memori pada
isi reg. AX
07-08
17-18
27-28
37-38
47-48
57-58
67-68
77-78
09
19
29
39
49
59
69
79
0A
1A
2A
3A
4A
5A
6A
7A
0B
1B
2B
3B
4B
5B
6B
7B
data 0002H
alamat BX sebanyak 1 byte (AH)
alamat BX sebanyak 2 byte (AX)
alamat BX+1 sbanyak 2 byte (AX)
ke memori pada alamat BX
0C
1C
2C
3C
4C
5C
6C
7C
0D
1D
2D
3D
4D
5D
6D
7D
0E
1E
2E
3E
4E
5E
6E
7E
0F
1F
2F
3F
4F
5F
6F
7F
................
................
!#$%&()*+,-./
0123456789:;#?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~.
-r
AX=0000 BX=0000
DS=0F6C ES=0F6C
0F6C:0100 BB0200
-t
AX=0000 BX=0002
DS=0F6C ES=0F6C
0F6C:0103 8A27
-t
AX=0200 BX=0002
DS=0F6C ES=0F6C
0F6C:0105 8B07
-t
AX=0302 BX=0002
DS=0F6C ES=0F6C
0F6C:0107 8B4701
-t
AX=0403 BX=0002
DS=0F6C ES=0F6C
0F6C:010A 8907
-t
AX=00A0 BX=0002
DS=0F6C ES=0F6C
0F6C:010C 90
CX=0000 DX=0000
SS=0F6C CS=0F6C
NOP
-d
0F6C:0000
0F6C:0010
0F6C:0020
0F6C:0030
00
10
20
30
01
11
21
31
03
12
22
32
04
13
23
33
04
14
24
34
05
15
25
35
06
16
26
36
SP=FFEE
IP=010C
07-08
17-18
27-28
37-38
09
19
29
39
0A
1A
2A
3A
0B
1B
2B
3B
0C
1C
2C
3C
0D
1D
2D
3D
0E
1E
2E
3E
0F
1F
2F
3F
................
................
!#$%&()*+,-./
0123456789:;#?
0F6C:0040
0F6C:0050
0F6C:0060
0F6C:0070
40
50
60
70
41
51
61
71
42
52
62
72
43
53
63
73
44
54
64
74
45
55
65
75
46
56
66
76
47-48
57-58
67-68
77-78
49
59
69
79
4A
5A
6A
7A
4B
5B
6B
7B
4C
5C
6C
7C
4D
5D
6D
7D
4E
5E
6E
7E
4F
5F
6F
7F
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~.
Catatan:
Instruksi berikut akan menimbulkan Error :
mov [bx],[bx+1]
:
transfer data dari memori ke memori secara langsung
mov [bx],12
:
transfer data langsung ke memori
kesimpulan : semua transfer yg melibatkan memori harus via register
mov ah,[bl]
mov [ax],bx
mov [cx],bx
mov [dx],bx
:
:
:
:
mov
mov
add
sub
ax,1234
bx,5678
ax,bx
ax,bx
-t
" trace MOV AX,1234
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE
DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0103
0DA0:0103 BB7856
MOV
BX,5678
-t
" trace MOV BX,5678
AX=1234 BX=5678 CX=0000 DX=0000 SP=FFEE
DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0106
0DA0:0106 01D8
ADD
AX,BX
-t
" trace ADD AX,BX
AX=68AC BX=5678 CX=0000 DX=0000 SP=FFEE
DS=0DA0 ES=0DA0 SS=0DA0 CS=0DA0 IP=0108
0DA0:0108 29D8
SUB
AX,BX
-t
" trace SUB AX,BX
AX=1234 BX=5678 CX=0000
DS=0DA0 ES=0DA0 SS=0DA0
DX=0000
CS=0DA0
SP=FFEE
IP=010A
MOV
MOV
XOR
JMP
MOV
JZ
AX,ABCD
BX,DCBA
AL,AL
010C
AL,BH
010E
-t
" trace MOV AX,ABCD
AX=ABCD BX=0000 CX=0000 DX=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C
SP=FFEE
IP=0103
-t
" trace MOV BX,DCBA
AX=ABCD BX=DCBA CX=0000 DX=0000
DS=0F6C ES=0F6C SS=0F6C CS=0F6C
SP=FFEE
IP=0106
-t
" trace XOR AL,AL
AX=AB00 BX=DCBA CX=0000
DS=0F6C ES=0F6C SS=0F6C
DX=0000
CS=0F6C
SP=FFEE
IP=0108
-t
" trace JMP 010C
AX=AB00 BX=DCBA CX=0000
DS=0F6C ES=0F6C SS=0F6C
DX=0000
CS=0F6C
SP=FFEE
IP=010C
-t
" trace JZ 010E
AX=AB00 BX=DCBA CX=0000
DS=0F6C ES=0F6C SS=0F6C
DX=0000
CS=0F6C
SP=FFEE
IP=010E