You are on page 1of 87

PENDAHULUAN

Tujuan Instruksional
Dalam bab ini akan dijelaskan mengenai arsitektur komputer secara umum
mengenai komponen hardware utama, yaitu processor, memory, peripherals
dan hubungannya dengan software atau program. Dijelaskan pula apa yang
dilakukan oleh komputer ketika mengeksekusi sebuah instruksi serta
membahas keuntungan dan kekurangan bahasa pemograman assembler.

Komponen Sistem Mikro Komputer


Sebuah sistem mikro komputer terdiri dari sebuah sistem unit, keyboard,
layar monitor, dan disk drive.
Sistem unit terdiri dari papan sirkuit (the circuit boards of the computer)
sedang keyboard, monitor, dan diskdrive disebut I/O devices karena
digunakan untuk operasi operasi input/output atau sering disebut sebagai
peripheral devices or peripherals.

Integrated Circuit (IC) digunakan untuk menyusun circuit komputer,


dimana setiap chip berisi ratusan bahkan ribuan transistor.
IC disebut sebagai digital circuits karena beroperasi dengan menggunakan
sinyal listrik tinggi (a high voltage) dan sinyal listrik rendah
(a low voltage signals).
Simbol 0 dan 1 digunakan untuk low dan high voltage signals.
Simbol tersebut dikenal dengan binary digits atau bits.
Semua informasi yang diproses oleh komputer adalah terjemahan dari
string 0 dan 1 yang adalah bit strings, sehingga disebut juga machine
language.

Bahasa Pemograman
Operasi komputer dikontrol oleh software. Sebuah CPU
hanya akan dapat diproses dengan intruksi bahasa mesin, seperti berikut :
Machine Instruction Operation
10100001 00000000 00000000 Fetch the contents of
memory word 0
put it in register AX
00000101 00000100 00000000 Add 4 to AX
10100011 00000000 00000000 Store the contents of
AX in memory
word 0
Tentu dapat dibayangkan betapa sulitnya membuat program dalam bahasa
mesin !
Untuk keperluan tersebut dibutuhkan bahasa assembler yang menggunakan
simbol untuk menjelaskan operasi, registers, dan lokasi memori.

Assembly Language Intruction Comment


MOV AX,A ; Fetch the contents of memory word 0
; put it in register AX
ADD AX, 4 ; Add 4 to AX
MOV A, AX ; Store the contents of AX in memory
; word 0

Sebuah program yang ditulis dalam bahasa assembly harus dikonversi ke


bahasa mesin sebelum CPU menjalankannya. Untuk itu dibutuhkan sebuah
assembler untuk menterjemahkan setiap statement bahasa ke dalam intruksi
bahasa mesin tunggal.

Bahasa Tingkat Tinggi ( High Level Languages)


Adalah lebih mudah menulis program dalam bahasa assembly daripada
bahasa mesin, yang terlalu sulit dan primitive, sehingga bahasa
seperti FORTRAN, Pascal, C dan sebagainya dikembangkan.
Dengan bahasa tingkat tinggi, seorang programmer dalam menulis program
dengan bahasa manusia (natural language text). Sebuah compiler
dibutuhkan untuk menterjemahkan bahasa tingkat tinggi menjadi kode-kode
mesin. Sebuah statement bahasa tingkat tinggi identik dengan
menterjemahkan kedalam beberapa instruksi bahasa mesin.
Banyak alasan mengapa seorang programmer memilih bahasa tingkat tinggi
daripada bahasa assembly :
1. Bahasa tingkat tinggi mendekati bahasa manusia (natural langguage),
sehingga mudah dibaca, dan dipahami
2. Sebuah bahasa assembly umumnya berisi banyak statement dibanding
bahasa tingkat tinggi sehingga membutuhkan banyak waktu untuk membuatnya
3. Setiap komputer mempunyai bahasa assembly yang unik, program bahasa
assembly dibatasi oleh satu mesin, tetapi program bahasa tingkat tinggi
dapat diproses dibanyak mesin yang punya compilernya.

Keuntungan Bahasa Assembly


Alasan utama menulis program dengan bahasa assembly adalah efisiensi,
karena bahasa assembly mendekati bahasa mesin, sebuah program assembly
yang baik akan dijalankan lebih cepat, memendekkan bahasa mesin.
Juga banyak operasi, seperti membaca atau menulis secara spesifik ke
lokasi memori dan I/O ports, dapat dikerjakan dengan mudah dalam bahasa
assembly tetapi tidak mungkin di bahasa tingkat tinggi.
Sebenarnya seorang programmer dapat memilih antara bahasa assembly
dan bahasa tingkat tinggi, karena banyak bahasa tingkat tinggi dapat
menerima subprogram yang ditulis dengan bahasa assembly.
B A B II
SISTEM BILANGAN

Tujuan Instruksional
Dalam bab ini akan dijelaskan mengenai jenis-jenis sistem bilangan, yang
meliputi bilangan sistem bilangan biner, sistem bilangan oktaf, sistem
bilangan desimal, sistem bilangan hexadesimal, bentuk-bentuk konversi
bilangan, proses pengurangan dan penjumlahan sederhana.

Pendahuluan
Untuk mempelajari bahasa assembler, harus memahami konsep bilangan,
karena berhubungan dalam pengaksesan ke port atau mengetahui pengkodean
ASCII.
Sistem Bilangan adalah kumpulan angka yang membentuk suatu sistem
peredaran tertentu.
Jenis bilangan :
1. Sistem Bilangan Biner
2. Sistem Bilangan Oktaf
3. Sistem Bilangan Desimal
4. Sistem Bilangan Hexadesimal

Sistem Bilangan Biner


Komputer memproses data atau program dari memori komputer berupa
sejumlah bilangan biner uang menyatakan dalam keadaan hidup atau mati
(on or off) dengan angka 1 dan 0. Sehingga semua yang diproses komputer
hanya angka 0 dan 1, sehingga sistem biner (bilangan berdasar 2)
sangatlah penting. Cara mengkonversi bilangan biner ke bilangan desimal
adalah dengan mengalikan dua dengan pangkat N (suku ke-N).

Contoh :
Angka 11010 bilangan desimalnya adalah :
( 1 x 24 ) + ( 1 x 23 ) + ( 0 x 22 ) + ( 1 x 21 ) + ( 0 x 20 ) = 26
16 + 8 + 0 + 2 + 0
Angka 110111 bilangan desimalnya adalah :
( 1 x 25 ) + ( 1 x 24 ) + ( 0 x 23 ) + ( 1 x 22 ) + ( 1 x 21 ) + ( 1 x 20
) = 55
32 + 16 + 0 + 4 + 2
+ 1

Operasi tambah pada sistem biner


Aturan operasi tambah :
Bilangan pertama Bilangan kedua Hasil
0 0 00
1 0 01
0 1 01
1 1 11

Contoh :

Biner 1110001 + 1011000 = 11001001


Desimal 113 + 89 = 201

Biner 1010100 + 1111100 = 11010000


Desimal 84 + 124 = 208

Hal-hal penting :
Setiap digit bilangan biner disebut satu bit
Setiap empat digit bilangan biner disebut satu nibble
Setiap delapan digit bilangan biner disebut satu byte
Setiap enambleas digit bilangan biner disebut satu word
Setiap tiga puluh dua digit bilangan biner disebut satu double word
Setiap 128 digit bilangan biner disebut satu para
Setiap 256 byte (2048 bit) disebut satu page (halaman).

Sistem Bilangan Oktal


Merupakan bilangan berdasar 8, terdiri angka 0, 1, 2, 3, 4, 5, 6, dan 7
serta jarang digunakan. Konversi bilangan oktal ke desimal mempunyai
cara yang sama bila anda melakuka konversi bilangan biner ke desimal,
hanya saja menggunakan dasar delapan.

Contoh :
355 bilangan oktal ke desimal :
( 3 x 82 ) + ( 5 x 81 ) + ( 5 x 80 )
192 + 40 + 5 = 237 Desimal

204 bilangan oktal ke desimal :


(2 x 82 ) + ( 0 x 81 ) + ( 4 x 80 )
128 + 0 + 4 = 132 Desimal

Sistem Bilangan Desimal


Jenis bilangan yang umum dipakai dalam kehidupan sehari-hari yang
menggunakan 10 simbol dasar (digits), yaitu : 0, 1, 2, 3, 4, 5, 6, 7,
8, dan 9.
Contoh :
Angka 321 dengan dasar 10, maka :
3932 = ( 3 x 103 ) + ( 9 x 102 ) + ( 3 x 101 ) + ( 2 x 100 )

Angka 4532 dengan dasar 10, maka :


4532 = ( 4 x 103 ) + ( 5 x 102 ) + ( 3 x 101 ) + ( 2 x 100 )

Sistem Bilangan Hexadesimal


Bilangan yang mutlak dipahami dalam memakai bahasa Assembler. Hal ini
disebabkan berbagai perintah assembler baik dalam program yang digunakan
dengan utility 'DEBUG' (DOS) dan 'COMPILER TURBO ASSEMBLER'.
Terdiri 16 bilangan, yaitu 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. (Hexa = 6 ;
Desimal = 10).
Cara mengkonversi bilangan desimal ke bilangan hexadesimal :
3A bilangan desimalnya adalah :
( 3 x 161 ) + ( A x 160 )
48 + 10 = 58 Desimal
A341 bilangan desimalnya adalah :
( 10 x 163 ) + ( 3 x 162 ) + ( 4 x 161 ) + ( 1 x 160 )
40960 + 768 + 64 + 1 =
41793 Desimal

Tabel Hexadecimal Digits and Binary Equivalent

Hex Digits Binary


0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Tabel Decimal, Binary, and Hexadecimal Equivalent

Decimal Binary Hexadecimal


0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
17 10001 11
18 10010 12
19 10011 13
20 10100 14
21 10101 15
22 10110 16
23 10111 17
24 11000 18
25 11001 19
26 11010 1A
27 11011 1B
28 11100 1C
29 11101 1D
30 11110 1E
31 11111 1F
32 100000 20
. . .
. . .
. . .
256 100000000 100
. . .
. . .
. . .
1024 . 400
. . .
. . .
. . .
32767 . 7FFF
32768 . 80000
. . .
. . .
. . .
65535 . FFFF
______________________________

1 Kilobyte (1 KB) = 1024 = 400h


64 Kilobytes (64 KB) = 65536 = 10000h
1 Megabyte (1 MB) = 1,048,576 = 100000h

Bentuk-bentuk Konversi
8 A 2 D h = 8 x 163 + A x 162 + 2 x 161 + D x 160
= 8 x 163 + 10 x 162 + 2 x 161 + 13 x 160
= 35373 Desimal

8 A 2 D h = 8 x 163 + A x 162 + 2 x 161 + D x 160


= (( 8 x 16 + A ) x 16 + 2 ) x 161 + D
= (( 8 x 16 + 10 ) x 16 + 2 ) x 16 + 13
= 35373 Desimal

1 1 1 0 1 b = 1 x 2 4 + 1 x 23 + 1 x 22 + 0 x 21 + 1 x 2 0
= 29 Desimal

1 1 1 0 1 b = 1 1 1 0
1
= 1 x 2 + 1 => 3 x 2 + 1 => 7 x 2 + 0 => 14 x 2 + 1
= 29 Desimal

2 B D 4 h = 2 B D 4
= 2 x 16 + 11 => 43 x 16 + 13 => 701 x 16 + 4
= 11220 Desimal

1 1 1 7 2 d = 698 x 16 + 4
698 = 43 x 16 + 10 (Ah)
43 = 2 x 16 + 11 (Bh)
2 = 0 x 16 + 2
==> = 2BA4 Hex

9 5 d = 47 x 2 + 1
47 = 23 x 2 + 1
23 = 11 x 2 + 1
11 = 5 x 2 + 1
5 = 2 x 2 + 1
2 = 1 x 2 + 0
1 = 0 x 2 + 1
==> = 1011111 Biner

2 B 3 C h = 2 B 3 C
= 0010 1011 0011 1100
= 0010101100111100 Bin

1110101010 b = 11 1010 1010


= 3 A A
= 3AA Hex

Operasi Penjumlahan dan Pengurangan


2 5 4 6
1 8 7 2 +
4 4 1 8 d

5 B 3 9 h
7 A F 4 h +
D 6 2 D h

1 0 0 1 0 1 1 1 1
1 1 0 1 1 0 +
1 0 1 1 0 0 1 0 1 b
9 1 4 5
7 2 8 3 -
1 8 6 2 d

D 2 6 F
B A 9 4 -
1 7 D B h

1 0 0 1
0 1 1 1 -
0 0 1 0 b

Latihan

1. Isilah tabel dibawah ini :

Binary Decimal Hex


........... 9 ...........
1010 ........... ...........
........... ........... D
........... 12 ...........
1110 ........... ...........
........... ........... B

2. Konversikan nilai-nilai biner dan heksa dibawah ini ke nilai desimal !


1110
100101011101
46Ah
FAE2Ch

3. Konversikan nilai desimal dibawah ini !


97 ke biner
627 ke biner
921 ke heksa
6120 ke heksa

4. Konversikan nilai-nilai dibawah ini !


1001011 ke heksa
1001010110101110 ke heksa
A2Ch ke biner
B34Dh ke biner

5. Tambahkan nilai-nilai dibawah ini :


100101b + 10111b
100111101b + 10001111001b
B23CDh + 17912h
FEFFEh + FBCADh

6. Kurangkan nilai-nilai dibawah ini :


11011b - 10110b
10000101b - 111011b
5FC12h - 3ABD1h
F001Eh - 1FF2Fh

Bagaimana karakter string "RG 2z" disimpan dalam memori, dengan alamat
awal 0 ?

Character ASCII Code (hex) ASCII Code


(Binary)
R 52 0101 0010
G 47 0100 0111
space 20 0010 0000
2 32 0011 0010
z 7A 0111 1010

Sehingga memori akan nampak seperti berikut :

Address Contents
0 01010010
1 01000111
2 00100000
3 00110010
4 01111010
B A B II
SISTEM BILANGAN

Tujuan Instruksional
Dalam bab ini akan dijelaskan mengenai jenis-jenis sistem bilangan, yang
meliputi bilangan sistem bilangan biner, sistem bilangan oktaf, sistem
bilangan desimal, sistem bilangan hexadesimal, bentuk-bentuk konversi
bilangan, proses pengurangan dan penjumlahan sederhana.

Pendahuluan
Untuk mempelajari bahasa assembler, harus memahami konsep bilangan,
karena berhubungan dalam pengaksesan ke port atau mengetahui pengkodean
ASCII.
Sistem Bilangan adalah kumpulan angka yang membentuk suatu sistem
peredaran tertentu.
Jenis bilangan :
1. Sistem Bilangan Biner
2. Sistem Bilangan Oktaf
3. Sistem Bilangan Desimal
4. Sistem Bilangan Hexadesimal

Sistem Bilangan Biner


Komputer memproses data atau program dari memori komputer berupa
sejumlah bilangan biner uang menyatakan dalam keadaan hidup atau mati
(on or off) dengan angka 1 dan 0. Sehingga semua yang diproses komputer
hanya angka 0 dan 1, sehingga sistem biner (bilangan berdasar 2)
sangatlah penting. Cara mengkonversi bilangan biner ke bilangan desimal
adalah dengan mengalikan dua dengan pangkat N (suku ke-N).

Contoh :
Angka 11010 bilangan desimalnya adalah :
( 1 x 24 ) + ( 1 x 23 ) + ( 0 x 22 ) + ( 1 x 21 ) + ( 0 x 20 ) = 26
16 + 8 + 0 + 2 + 0
Angka 110111 bilangan desimalnya adalah :
( 1 x 25 ) + ( 1 x 24 ) + ( 0 x 23 ) + ( 1 x 22 ) + ( 1 x 21 ) + ( 1 x 20
) = 55
32 + 16 + 0 + 4 + 2
+ 1

Operasi tambah pada sistem biner


Aturan operasi tambah :
Bilangan pertama Bilangan kedua Hasil
0 0 00
1 0 01
0 1 01
1 1 11

Contoh :

Biner 1110001 + 1011000 = 11001001


Desimal 113 + 89 = 201

Biner 1010100 + 1111100 = 11010000


Desimal 84 + 124 = 208

Hal-hal penting :
Setiap digit bilangan biner disebut satu bit
Setiap empat digit bilangan biner disebut satu nibble
Setiap delapan digit bilangan biner disebut satu byte
Setiap enambleas digit bilangan biner disebut satu word
Setiap tiga puluh dua digit bilangan biner disebut satu double word
Setiap 128 digit bilangan biner disebut satu para
Setiap 256 byte (2048 bit) disebut satu page (halaman).

Sistem Bilangan Oktal


Merupakan bilangan berdasar 8, terdiri angka 0, 1, 2, 3, 4, 5, 6, dan 7
serta jarang digunakan. Konversi bilangan oktal ke desimal mempunyai
cara yang sama bila anda melakuka konversi bilangan biner ke desimal,
hanya saja menggunakan dasar delapan.

Contoh :
355 bilangan oktal ke desimal :
( 3 x 82 ) + ( 5 x 81 ) + ( 5 x 80 )
192 + 40 + 5 = 237 Desimal

204 bilangan oktal ke desimal :


(2 x 82 ) + ( 0 x 81 ) + ( 4 x 80 )
128 + 0 + 4 = 132 Desimal

Sistem Bilangan Desimal


Jenis bilangan yang umum dipakai dalam kehidupan sehari-hari yang
menggunakan 10 simbol dasar (digits), yaitu : 0, 1, 2, 3, 4, 5, 6, 7,
8, dan 9.
Contoh :
Angka 321 dengan dasar 10, maka :
3932 = ( 3 x 103 ) + ( 9 x 102 ) + ( 3 x 101 ) + ( 2 x 100 )

Angka 4532 dengan dasar 10, maka :


4532 = ( 4 x 103 ) + ( 5 x 102 ) + ( 3 x 101 ) + ( 2 x 100 )

Sistem Bilangan Hexadesimal


Bilangan yang mutlak dipahami dalam memakai bahasa Assembler. Hal ini
disebabkan berbagai perintah assembler baik dalam program yang digunakan
dengan utility 'DEBUG' (DOS) dan 'COMPILER TURBO ASSEMBLER'.
Terdiri 16 bilangan, yaitu 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. (Hexa = 6 ;
Desimal = 10).
Cara mengkonversi bilangan desimal ke bilangan hexadesimal :
3A bilangan desimalnya adalah :
( 3 x 161 ) + ( A x 160 )
48 + 10 = 58 Desimal
A341 bilangan desimalnya adalah :
( 10 x 163 ) + ( 3 x 162 ) + ( 4 x 161 ) + ( 1 x 160 )
40960 + 768 + 64 + 1 =
41793 Desimal

Tabel Hexadecimal Digits and Binary Equivalent

Hex Digits Binary


0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Tabel Decimal, Binary, and Hexadecimal Equivalent

Decimal Binary Hexadecimal


0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
17 10001 11
18 10010 12
19 10011 13
20 10100 14
21 10101 15
22 10110 16
23 10111 17
24 11000 18
25 11001 19
26 11010 1A
27 11011 1B
28 11100 1C
29 11101 1D
30 11110 1E
31 11111 1F
32 100000 20
. . .
. . .
. . .
256 100000000 100
. . .
. . .
. . .
1024 . 400
. . .
. . .
. . .
32767 . 7FFF
32768 . 80000
. . .
. . .
. . .
65535 . FFFF
______________________________

1 Kilobyte (1 KB) = 1024 = 400h


64 Kilobytes (64 KB) = 65536 = 10000h
1 Megabyte (1 MB) = 1,048,576 = 100000h

Bentuk-bentuk Konversi
8 A 2 D h = 8 x 163 + A x 162 + 2 x 161 + D x 160
= 8 x 163 + 10 x 162 + 2 x 161 + 13 x 160
= 35373 Desimal

8 A 2 D h = 8 x 163 + A x 162 + 2 x 161 + D x 160


= (( 8 x 16 + A ) x 16 + 2 ) x 161 + D
= (( 8 x 16 + 10 ) x 16 + 2 ) x 16 + 13
= 35373 Desimal

1 1 1 0 1 b = 1 x 2 4 + 1 x 23 + 1 x 22 + 0 x 21 + 1 x 2 0
= 29 Desimal

1 1 1 0 1 b = 1 1 1 0
1
= 1 x 2 + 1 => 3 x 2 + 1 => 7 x 2 + 0 => 14 x 2 + 1
= 29 Desimal

2 B D 4 h = 2 B D 4
= 2 x 16 + 11 => 43 x 16 + 13 => 701 x 16 + 4
= 11220 Desimal

1 1 1 7 2 d = 698 x 16 + 4
698 = 43 x 16 + 10 (Ah)
43 = 2 x 16 + 11 (Bh)
2 = 0 x 16 + 2
==> = 2BA4 Hex

9 5 d = 47 x 2 + 1
47 = 23 x 2 + 1
23 = 11 x 2 + 1
11 = 5 x 2 + 1
5 = 2 x 2 + 1
2 = 1 x 2 + 0
1 = 0 x 2 + 1
==> = 1011111 Biner

2 B 3 C h = 2 B 3 C
= 0010 1011 0011 1100
= 0010101100111100 Bin

1110101010 b = 11 1010 1010


= 3 A A
= 3AA Hex

Operasi Penjumlahan dan Pengurangan


2 5 4 6
1 8 7 2 +
4 4 1 8 d

5 B 3 9 h
7 A F 4 h +
D 6 2 D h

1 0 0 1 0 1 1 1 1
1 1 0 1 1 0 +
1 0 1 1 0 0 1 0 1 b
9 1 4 5
7 2 8 3 -
1 8 6 2 d

D 2 6 F
B A 9 4 -
1 7 D B h

1 0 0 1
0 1 1 1 -
0 0 1 0 b

Latihan

1. Isilah tabel dibawah ini :

Binary Decimal Hex


........... 9 ...........
1010 ........... ...........
........... ........... D
........... 12 ...........
1110 ........... ...........
........... ........... B

2. Konversikan nilai-nilai biner dan heksa dibawah ini ke nilai desimal !


1110
100101011101
46Ah
FAE2Ch

3. Konversikan nilai desimal dibawah ini !


97 ke biner
627 ke biner
921 ke heksa
6120 ke heksa

4. Konversikan nilai-nilai dibawah ini !


1001011 ke heksa
1001010110101110 ke heksa
A2Ch ke biner
B34Dh ke biner

5. Tambahkan nilai-nilai dibawah ini :


100101b + 10111b
100111101b + 10001111001b
B23CDh + 17912h
FEFFEh + FBCADh

6. Kurangkan nilai-nilai dibawah ini :


11011b - 10110b
10000101b - 111011b
5FC12h - 3ABD1h
F001Eh - 1FF2Fh

Bagaimana karakter string "RG 2z" disimpan dalam memori, dengan alamat
awal 0 ?

Character ASCII Code (hex) ASCII Code


(Binary)
R 52 0101 0010
G 47 0100 0111
space 20 0010 0000
2 32 0011 0010
z 7A 0111 1010

Sehingga memori akan nampak seperti berikut :

Address Contents
0 01010010
1 01000111
2 00100000
3 00110010
4 01111010
Bab IV
DEBUG

Dalam bab ini akan dijelaskan mengenai pengertian mengenai debug,


langkah-langkah mengaktifkan, menggunakan, dan menerapkan perintah-
perintah dasar dari DEBUG sebagai pengenalan menggunakan beberapa
perintah pokok untuk pemograman assembler.

DEBUG
DEBUG adalah alat bantu dalam perancangan peralatan berbasis mikro-
prosesor, karena daoat mencapai tingkat perangkat keras yang paling
dalam dari suatu komputer, misal menulis informasi ke dalam boot
sector, direktori, FAT, menjalankan interupsi BIOS atau DOS.

Hal-hal penting dalam Debug :


Hanya mengenal dan selalu bekerja dengan bilangan-bilangan heksadesimal
Bekerja dengan penunjukan ke alamat-alamat memori memakai format
segment : offset.
Kemampuan mengakses daerah "very low level access" (software /
hardware).
Setiap jenis komputer (mainframe, minicomputer, microcomputer) memiliki
sarana debugging berbeda.

Langkah mengaktifkan DEBUG.EXE / DEBUG.COM :


a> Debug (enter)
-

Perintah DEBUG
1. R (Register)
Untuk menampilkan informasi komposisi register-register di dalam
mikroprosesor, alamat memori, serta isi dari alamat memori tersebut
yang mungkin berupa instruksi yang akan dilaksanakan oleh komputer,
atau data.
Contoh :
A:\>DEBUG (enter)
r (enter)
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=29E7 ES=29E7 SS=29E7 CS=29E7 IP=0100 NV UP EI PL NZ NA PO NC
29E7:0100 0114 ADD[SI],DX DS:0000=20CD

AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, dan IP adalah register
internal mikroprosesor yang dipakai dalam CPU.
NV, UP, EI, PL, NZ, NA, PO, dan NC adalah output dari sebuah register
yang disebut register status atau register flag.
Angka 29E7:0100 adalah alamat lokasi memori dengan format segment:offset.
Kedua nilai tersebut merupakan kombinas antara register CS (Code Segment)
dengan IP (Instruction Pointer).
0114 adalah isi alamat memori bersangkutan, byte ke-1 berisi nilai '01',
dan byte ke-2 berisi nilai '14'. Karena setiap alamat memori berisi satu
byte, tentunya nilai 01 itulah yang berdiam pada alamat offset 0100,
sedangkan nilai 14 ada di alamat 0101 ADD[SI],DX adalah terjemahan
intruksi dari alamat memori bersangkutan.

Untuk mengubah nilai-nilai register internal dapat menggunakan perintah :


RAX = mengubah nilai register AX
RBX = mengubah nilai register BX
RCX = mengubah nilai register CX
RDX = mengubah nilai register DX
RSP = mengubah nilai register SP
RBP = mengubah nilai register BP
RSI = mengubah nilai register SI
RDI = mengubah nilai register DI
RDS = mengubah nilai register DS
RES = mengubah nilai register ES
RSS = mengubah nilai register SS
RCS = mengubah nilai register CS
RIP = mengubah nilai register IP

Sebagai contoh untuk mengubah nilai register AX dari nilai '0000' ke nilai
'1111' :
A:\>Debug (enter)
-RAX (enter)
AX 0000
: 1111 (diisi setelah ':' dan enter)

Contoh diatas juga berlaku untuk register internal lainnya dan untuk
diperhatikan bahwa angka-angka yang dimasukkan kedalam register harus nilai
heksadesimal.

2. D (Dump)
Berfungsi untuk melihat isi blok memori.
Contoh :
A:\>Debug (enter)
-d 0100 (enter)

Hasil yang diperoleh : (import dari sidekick ke text !)

Dari tampilan tersebut, terbagi menjadi 3 bagian, yaitu :


Bagian kiri : menampilkan alamat-alamat memori dengan format
segment:offset
Bagian tengah : menampilkan angka-angka dalam heksadesimal sebagai isi
dari alamat-alamat memori
Bagian kanan : menampilkan kode-kode karakter ASCII sebagai terjemahan
dari angka heksadesimal tersebut
Debug hanya akan memperlihatkan 96 jenis karakter ASCII tercetak
(printable character), mulai dari nilai desimal 33 - 127. Di luar nilai
itu, karakter yang ditampilkan hanyalah berupa tanda titik (dot atau
period).

Beberapa parameter yang dapat digunakan :


L (length / panjang)
Memiliki arti menampilkan data sepanjang 2 byte, bila parameter 'L' tidak
diberikan, maka otomatis akan ditampilkan 128 byte data.
-D 0100 L 2 (enter)
Alamat awal - alamat akhir
-D 0100 01FF (enter)
Alamat segment:offset
-D FFFF:0000 (enter)
Alamat segment:offset sampai segment:offset
-D F000:E000 F000:E000 (enter)

3. U (Unassemble)
Berfungsi untuk menampilkan listring dari suatu program bahasa mesin.
Contoh :
A:\>Debug (enter)
-U FFFF:0000 (enter)

Hasil : import dari sidekick ke text !

Beberapa bentuk perintah 'U' :


U F000:E05B (enter)

4. E (enter)
Berfungsi untuk mengisi atau mengubah data dalam memori.
Contoh :
A:\>Debug (enter)
-E 0100 (enter)
Hasil :
-E 0100
29E7:0100 01.

Setelah angka 01, dapat dimasukkan nilai untuk mengganti angkat tersebut
langsung di belakangnya yang diakhir dengan menekan ENTER atau menekan
SPACE BAR untuk berpindah ke alamat berikutnya atau menekan tanda '-'
(Hyphen) untuk mundur ke lokasi sebelumnya.

5. F (Fill)
Berfungsi untuk mengisi lokasi memori. Perbedaan dengan perintah 'E
(Enter)', yang menawarkan modifikasi memori secara satu alamt demi satu
alamat, sedang 'F (Fill" untuk mengubah isi alamat memori dalam jumlah
besar, sesuai dengan rentang (range) yang dikehendaki.
Contoh :
A:\>Debug (enter)
-F 0100 017F 58 (enter)
Berarti isilah mulai alamat offset 0100 sampai offset 017F dengan nilai
heksa 58 (karakter ASCII 'x').
atau
- F F 0100 017F 'x' (enter)

Beberapa bentuk perintah 'F' :


F 0100 L 1 41 (enter)
Arti : mulai offset 0100 sebanyak 1 byte diisi dengan nilai heksa 41
(karakter ASCII 'A').

6. C (Compare)
Berfungsi untuk membandingkan isi sebuah blok memori dengan isi blok
memori lainnya.
Format perintah : C alamat1 panjang alamat2
Contoh :
A:\>Debug (enter)
-C 0100 L 10 0200 (enter)
Berarti mulai offset 0100 sebanyak 16 byte (10 heksa) bandingkan dengan
offset 0200. Hasil yang dimunculkan hanyalah nilai-nilai yang berbeda
setiap alamat.
Apabila dilayar tidak memberikan reaksi apapun selain kembali ke prompt
'-' atau hyphen, berarti kedua blok memori persis sama.

7. S (Search)
Berfungsi untuk mencari data baik yang berupa karakter maupun untaian
karakter (string) di dalam suatu blok memori tertentu.
Apabila dalam pencarian, data yang dicari diketemukan, maka akan
ditampilkan semua alamat dari data tersebut lengkap dengan nilai segment
dan offsetnya, sebaliknya bila tidak diketemukan akan kembali ke prompt
'-'.

Format perintah : S alamat awal panjang alamat akhir

Contoh :
A:\>Debug (enter)
-S F000:E000 L FF "IBM" (enter)
Berarti mulai alamat F000:E000 sebanyak FFh byte cari string "IBM".
-S F000:E000 L FF "A" (enter)
Berarti mulai alamat F000:E000 sebanyak FFh byte cari string "A"..

8. M (Move)
Berfungsi untuk memindahkan atau menyalin data yang ada di suatu lokasi
memori ke alamat memori lainnya.
Format perintah : M alamat asal panjang alamat tujuan

Contoh :
A:\>Debug (enter)
-M 0100 L 7F 0200 (enter)
Berarti mulai alamat offset 0100 sebanyak 7Fh byte isi memorinya
pindahkan atau kopikan ke offset 0200.

Dari pembahasan perintah-perintah DEBUG dapat disimpulkan bahwa DEBUG


dibuat
dengan tujuan untuk dapat mengeksplorasi program-program yang sudah
dibuat berikut segala dampaknya terhadap sistem dan aplikasi,
sedangkan ASSEMBLY diadakan dengan untuk mempermudah seorang programmer
dalam menyusun instruksi-instruksi pada sebuah program yang sedang dibuat.

INSTRUKSI-INSTRUKSI MIKROPROSESOR
Untuk dapat mempergunakan serta memanfaatkan sebuah mikroprosesor,
kita harus mengenal terlebih dahulu instruksi-instruksi yang bisa
dijalankan oleh mikroprosesor yang bersangkutan. Karena pada hakekatnya,
seluruh kemampuan yang ada pada mikroprosesor terletak pada kecanggihan
perintah-perintah yang terdapat didalamnya.
Tanpa adanya instruksi-instruksi yang membentuk sebuah program,
mikroprosesor tidak lebih hanya merupakan serpihan tanpa guna.
Setiap mikroprosesor mempunyai perbendaharaan instruksi sendiri-sendiri,
yang disebut dengan 'Set Instruksi' atau 'Instruction Set'.

Operasi, Operator dan Operand


Pada dasarnya mikroprosesor mampu melakukan beberapa jenis operasi,
antara lain operasi perhitungan (arithmetic), operasi logika
(logical operation), operasi transfer data (data transfer operation),
manipulasi string serta kendali prosesor.
Masing-masing jenis instruksi tersebut adalah sebagai berikut :
a. Perhitungan
ADD (penjumlahan), SUB (pengurangan), MUL (perkalian), DIV (pembagian)
b. Logika
AND (logika DAN), OR (logika OR), XOR (logika Exclusive OR)
c. Transfer Data
MOV (pindahkan/salin), IN (Input), OUT (Output), dan sebagainya.
d. Transfer Kendali
JMP (loncat), CALL (panggil), RET (kembali), INT (interupsi), dsb
e. Manipulasi String
MOVS (pindahkan/salin string), CMPS (bandingkan string), LODS (muatkan
byte/word ke register AX), dan sebagainya.
f. Kendali Prosesor
CLC (hilangkan bawaan/carry), CLI (hilangkan interupsi), dan sebagainya.

Pada instruksi-instruksi komputeri, operator diterapkan sebagai


Operation-Code (Op-Code), sedangkan bilangan disebut Operand (adalah
obyek dari suatu operasi).

Operasi Transfer Data


1. Pemindahan data dari data register ke register
Format : MOV register, register
Contoh :
-a 0100 (enter)
xxxx : 0100 mov AX,DX (enter)
xxxx : 0102 (enter)

2. Pemindahan data dari memori ke register


Format : MOV register, memori
Contoh :
-a 0100 (enter)
xxxx : 0100 mov BX,[0200] (enter)
xxxx : 0104 (enter)

3. Memindahkan data langsung ke dalam register


Format : MOV register, bilangan
Contoh :
-a 0100 (enter)
xxxx : 0100 mov AX,1111 (enter)
xxxx : 0103 mov BX,2222 (enter)
xxxx : 0106 mov CX,3333 (enter)
xxxx : 0109 mov DX,4444 (enter)
xxxx : 010C (enter)

-a 0100
xxxx : 0100 mov AH,FFFF (enter)
xxxx : 010C (enter)
Apa yang terjadi ? Beri alasan !

4. Memindahkan data dari register ke memori


Format : MOV memori, register
Contoh :
-a 0100
xxxx : 0100 mov [0200],AX (enter)
xxxx : 0103 (enter)

5. Pertukaran data antar register


Format : XCHG register, register
Contoh :
-a 0100
xxxx : 0100 xchg AX,BX (enter)
xxxx : 0102 (enter)

Operasi Aritmatik
1. Menjumlahkan dua bilangan dengan perintah ADD
Format : ADD register,register
2. Mengurangkan dua bilangan dengan perintah SUB
Format : SUB register,register
3. Perkalian dua bilangan dengan perintah MUL
Format : MUL register
4. Membagi dua bilangan dengan perintah DIV
Format : DIV register

Operasi Logika
1. Instruksi logika AND
Format : AND register,register
2. Instruksi logika OR
Format : OR register,register
3. Instruksi logika XOR
Format : XOR register,register
B A B IV
KONVERSI, REGISTER, DAN PENGELOLAAN MEMORI

Tujuan Instruksional
Dalam bab ini akan dijelaskan mengenai tujuan dan langkah-langkah konversi
alamat logik menjadi alamat fisik, pengertian, fungsi dan jenis-jenis
register, antara lain general purpose register, dan register status serta
penjelasan singkat mengenai pengelolaan memori.

KONVERSI ALAMAT FISIK KE ALAMAT LOGIKA


Untuk memberikan alamat sesungguhnya dari sebuah nilai alamat logika dalam
nilai segment:offset, maka diperlukan suatu cara untuk menterjemahkan nilai
tersebut ke dalam notasi alamat fisik. Metode konversinya yaitu dengan
cara memisahkan nilai segment, kemudian tambahkan satu digit '0' heksa-
desimal pada digit paling kiri, lalu ambil nilai offsetnya, jumlahkan ke
bawah seperti halnya menghitung bilangan-bilangan desimal sehari-hari.

Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?

J a w a b :
Nilai segment : 0220
Geser satu digit menjadi : 02200
Nilai offset : 1234

02200
1234
------- +
03434

Untuk nilai binary, alamat segment harus diubah menjadi binary, lalu
geserlah nilai tersebut ke kiri sebanyak empat bit, artinya akan timbul
empat binary digit 0 berturut-turut di sebelah kanan. Kemudian nilai
offset juga diubah ke dalam binary dan tambahkanlah hasilnya ke nilai
offset yang telah digeser tadi. Untuk mempermudah dalam membaca,
kembalikan nilai akhir dalam binary tersebut ke dalam notasi heksadesimal

Contoh :
Diketahui : Nilai alamat logika adalah 0220:1234
Ditanyakan : Berapa nilai alamat fisiknya ?

J a w a b :
Nilai segment : 0220
Nilai binary-nya menjadi : 0000 0010 0010 0000
Geser 4 bit ke kiri menjadi : 0000 0010 0010 0000 0000
Nilai offset : 1234
Nilai binary-nya menjadi : 0001 0010 0011 0100

Tambahkan :
0000 0010 0010 0000 0000
0001 0010 0011 0100
------------------------------------ +
0000 0011 0100 0011 0100

Alamat fisik secara binary : 0000 0011 0100 0011 0100


Secar heksadesimal : 03434 heksa

PENGERTIAN REGISTER
Sebuah register adalah sebuah tempat penampungan sementara untuk data-
data yng akan diolah oleh prosesor, dan dibentuk oleh 16 titik elektronis
di dalam chip mikroprosessor itu sendiri. Dengan adanya tempat-tempat
penampungan data sementara ini, proses pengolahan akan bisa dilakukan
secara jauh lebih cepat dibandingkan apabila data-data tersebut harus
diambil langsung dari lokasi-lokasi memori. Register-registe tersebut
sebagai register internal dan terdiri dari empat belas register dan
keseluruhannya dapat dibagi dalam beberapa jenis, yaitu :

Register segment
Terdiri dari 4 register, yaitu code segment, data segment, stack segment,
dan extra segment. Segment adalah bagian dari ruang memori yang berkapa-
sitas 64 kilobyte (65536 byte) dan digunakan secara spesifik untuk
menempatkan jenis-jenis data tertentu. Misalnya code segment digunakan
oleh program dan instruksi-instruksi (code), data segment dialokasikan
untuk data-data, stack segment dipakai untuk menyediakan ruang untuk
stack, yang berfungsi untuk penyimpanan data dan alamat sementara pada
saat program utama sedang mengerjakan program percabangan (subroutine,
prosedur, dan sebagainya) dan extra segment sebagaimana halnya data
segment juga dipergunakan sebagai penempatan data-data.

Register data
Register ada adalah register yang mengandung informasi yang akan, sedang
atau telah diolah oleh komputer. Pada 8088 register ini diwujudkan oleh
AX, BX, CX dan BX (sebagai general purpose register), sehubungan dengan
fungsinya yang selain menangani tugas-tugas khusus, juga bisa dimanfaat-
kan untuk membantu proses-proses pengolahand data didalam internal mikro-
prosessor.

Register pointer

Register index
Register jenis pointer dan register index merupakan register-register
yang memuat alamat offset dari segment-segment tertentu, yang terdiri
dari stack pointer (SP) dan base pointer (BP) yang digunakan sebagai
pemegang nilai offset dari stack segment, sedangkan source index (SI)
dan destination index (DI) berisi nilai offset dari data segment.
Instruction pointer (IP) merupakan pemegang nilai offset dari code
segment dan fungsinya mirip dengan program counter (PC) pada prosesor-
prosesor 8 bit. Hanya bedanya, program counter langsung mengalamati
instruksi-instruksi yang ada dimemori dengan nilainya sendiri, IP harus
bekerja sama dengan register CS untuk dapat membentuk pengalamatan 20
bit dalam format segment:offset.

Register status
Register ini mempunyai struktur yang berbeda dengan register-register
lainnya, yang dibentuk dari sebuah register 16 bit, yang masing-masing
bitnya memberikan informasi tertentu tentang keadaan -keadaan yang
terjadi pada prosesor, sebagai akibat proses pengolahan data. Informasi
yang diwakili oleh sebuah bit pada register status disebut 'flag'.
Hanya 9 dari keseluruhan 16 bit yang dipakai oleh register status
sebagai tanda kondisi-kondisi prosesor.

GENERAL PURPOSE REGISTER


General Purpose adalah register-register serbaguna, sering dimanfaatkan
untuk keperlua-keperluan lain yang bukan merupakan fungsi khasnya dan
untuk menampung secara sementara data-data yang akan diolah, sebelum
diambil dan diproses oleh ALU (Arithmetic and Logical Unit), walaupun
demikian ada juga instruksi-instruksi tertentu yang mengharuskan penggunaan
register-register secara spesifik (sesuai fungsi sebenarnya), yang
mempunyai
16 bit, dan dapat digunakan penuh 16 bit (1 word = 1 kata) atau 8 bit
(1 byte = 1 karakter) saja.

Jenis-jenis general purpose register dapat dijelaskan sebagai berikut :

1. AX (16 bit), terdiri dari AH (high byte/8 bit), AL (low byte/8 bit)
Secara khusus sebagai Accumulator dan register serbaguna yang berfungsi
sebagai masukan, atau menampung hasil proses / perhitungan (add, sub,
mul, dan div) dan sering untuk menyimpan data sementara. Banyak
instruksi
yang dioptimasikan unjuk kerjanya jika beroperasi pada register
accumulator. Pengoperasian data yang disimpan di accumulator sedikit
lebih cepat dibanding bila data disimpan di register lain. Pada operasi
pembagian, jika bilangan pembagi besarnya 16 bit, bilangan yang dibagi
ditampung di pasangan register DX:AX. Setelah pembagian hasil ditampung
di AX sedang sisa hasil bagi di DX.
Bila bilangan pembagi besarnya 8 bit, bilangan yang dibagi ditempatkan
di AX. Setelah pembagian, hasil bagi ditempatkan di AL sedang sisa hasil
bagi di AH.
Pada operasi perkalian, accumulator menampung bilangan yang akan dikali-
kan. Hasil perkalian ditempatkan di register AX. Pada operasi I/O ke dan
dari port, accumulator menampung data yang akan ditransfer.

2. BX (16 bit), terdiri dari BH (high byte.bit), AL (low byte/8 bit)


Secara spesifik sebagai Base juga dan register serbaguna yang merupakan
salah satu dari dua register base Addressing mode (penunjuk basis
alamat),
yang dapat mengambil atau menulis langsung dari/ke memory dengan segment
DS (Data Segment) serta dapat dipakai sebagai pointer pada suatu basis
data misalnya.

3. CX (16 bit), terdiri dari CH (high byte.bit), CL (low byte/8 bit)


Secara spesifik sebagai Counter untuk meletakkan jumlah lompatan pada
LOOP yang dilakukan, misal sebagai penunjuk berapa banyak perhitungan
dilakukan. Berfungsi untuk menampung cacah perulangan suatu operasi
(loop, string, shift, dan rotate). Register ini dapat dipakai sebagai
penyimpan data sementara.

4. DX (16 bit), terdiri dari DH (high byte.bit), DL (low byte/8 bit)


Secara spesifik sebagai Data juga sebagai register serbaguna yang
digunakan sebagai penampung data tertentu (karakter, pointer,
penentuan disk).
4 tugas pokok register DX :
Mmbantu AX dalam proses perkalian dan pembagian, terutama perkalian
dan pembagian 16 bit
DX merupakan register offset dari DS
Menunjukkan nomor port pada operasi port
Dipakai sebagai penampung sementara data. Dipakai berpasangan dengan
register AX, operasi perkalian dan pembagian 16 bit. Pada operasi
I/O ke dan dari port, DX menampung port yang akan diakses.

AX / BX / CX / DX
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
-----------------------------------
---------------------------------------
AH / BH / CH / DH AL / BL / CL / DL

Dari fungsi-fungsi register AX, BX, CX, DX dapat digolongkan sebagai


register 'Data' karena kegunaan dan pemanfaatannya yang cenderung ke
penampungan data, selain memiliki fungsi spesifik tetapi dapat saling
tergantung.

SEGMENT REGISTER
1. ES (Extra Segment)
Tidak mempunyai tugas, tetapi berguna untuk pemograman pada saat
melakukan operasi ke segment lain. Nilai yang dikandung oleh register
ini merupakan address yang berguna bagi instruksi-instruksi string.
Address dari sebuah segmen tambahan juga dapat disimpan di register
ES ini. Processor 80386 selain ES, masih memiliki 2 register extra
segment, yaitu FS dan GS.

2. CS (Code Segment)
Yang menunjuk ke segment adalah register segment, maka CS merupakan .
salah satu dari empat register segment. Tugasnya adalah menunjukkan
segment program berada. Sedangkan pasangan register ini adalah register
IP.
Menampung nilai yang merupakan address awal dari suatu segmen.
Segmen ini berisi instruksi-instruksi dan operand-operand yang dispesi-
fikasikan oleh program.

3. DS (Data Segment)
Nilai yang ditampung oleh register ini merupakan address dari segmen
yang normalnya berisi data-data yang dialokasikan oleh program

4. SS (Stack Segment)
Address yang berada di register ini berguna bagi instruksi-instruksi
yang menyimpan sementara data distack. Stack merupakan sebuah area
memory yang dicadangkan untuk penyimpanan data secara sementara.
DS dan SS adalah dua register segment yang masing-masing mempunyai
tugas menunjukkan segment dari segment data dan segment stack.
Pasangan dari DS adalah DX dan pasangan dari SS adalah SP.

POINTER REGISTER
Pointer register secara khusus berfungsi untuk menyimpan nilai offset
dari relative address. Register ini terdiri dari :

1. IP (Instruction Pointer)
Merupakan pasangan CS yang merupakan register terpenting untuk
menunjukkan baris perintah program. Saat pertama program dijalankan,
register ini akan langsung menunjuk pada awal program dan selalu berisi
address dari instruksi yang akan segera dieksekusi. Programmer tidak
dapat langsung mengakses atau mengubah nilai register IP. Pengubahan
hanya bisa dilangsungkan melalui instruksi-instruksi call, jump, loop
dan interrupt yang secara otomatis akan mengubah nilai yang ada pada
register IP. Kombinasi CS dan IP menunjukkan alamat Segment : Offset.

2. SP (Stack Pointer)
Merupakan pasangan CS, maka SP merupakan pasangan SS yang digunakan
untuk operasi stack. Berisi data yang merupakan address lokasi saat
kini dalam stack. Register ini teknisnya merupakan register multi fungsi
yang dapat dipakai sebagai tempat penyimpanan data maupun tempat
kalkulasi, meski sehari-hari harus dipakai hanya dalam operasi stack.

3. BP (Base Pointer)
Untuk menulis dan membaca ke atau dari memory secara langsung dengan
segment SS (Stack Segment) dan digunakan dalam komunikasi antara bahasa
komputer, seperti Pascal dengan Assembler atau bahasa C dengan bahasa
Assembler Meski dipakai sebagai tempat penampung data sementara sering
dipakai pointer basis kerangka stack.

INDEX REGISTER
Register yang dipakai untuk melakukan operasi string dan sering digunakan
untuk menulis dan membaca ke atau dari memory seperti halnya BX dan BP
(Base Pointer), yang terdiri dari register :

1. SI (Source Index)
Dipakai sebagai pointer atau tempat penyimpan data. Registerini sering
dipakai sebagai pointer untuk menunjuk sebuah item (indexing) dalam
satu kesatuan data. Pada operasi string, SI dipakai untuk menunjuk ke
byte atau word dalam sebuah source string.

2. DI (Destination Index)
Dipakai sebagai pointer atau tempat penyimpanan data. Sering dipakai
sebagai pointer untuk menunjuk sebuah item (indexing) dalam satu
kesatuan data.
Pada operasi string, DI dipakai untuk menunjuk ke byte atau word dalam
sebuah destination string.
Merupakan suatu komposisi register 16 bit, dimana komposisi bitnya
mengecek apakah sesuatu berfungsi atau tidak. Adalah register 16 bit
yang bit-bitnya mengontrol berbagai instruksi dan merefleksikan status
processor pada saat itu. Untuk real mode aktualnya ada 9 flag, untuk
80286 protected mode ada 11 flag, dan untuk 80386 ada 13 flag.
Contohnya, Interrupt Flag mengecek apakah pada saat operasi Interrupt
sedang aktif atau tidak, bila tidak aktif Interrupt tidak akan
dijalankan.
Carry Flag mengecek apakah pada saat operasi terjadi kesalahan atau
tidak, Sign Flag menunjukkan apakah suatu bilangan bertanda atau tidak
dan sebagainya.

Komposisi 16 bit (flag bits)

15 14 13 12 11 10 9 8 7 6
5 4 3 2 1 0
OF DF IF TF SF ZF
AF PF CF

Tabel Register Status (Flag)

Nama Flag Fungsi RESET (0) Arti SET (1) Arti


CF Carry Flag NC No Carry CV Carry
PF Parity Flag PO Parity Odd PE Parity
Even
AF Auxiliary Carry Flag NA No Aux. Carry AC Aux.
Carry
ZF Zero Flag NZ Non Zero ZR Zero
SF Sign Flag PL Plus NG
Negative
OF Overflow Flag NV No Overflow OV
Overflow
IF Interrupt Flag DI Disable Interupt EI Enable
Interupt
DF Direction Flag UP Upward DN
Downward

Carry Flag (CF) akan 'set' (menjadi logika '1', tinggi), apabila terjadi
'bawaan' (carry) atau 'pinjaman' (borrow) dalam suatu hasil proses
perhitungan (arithmetic) pada Most Significant Bit (MSB, bit paling
berbobot). Jika hal-hal itu tidak terjadi maka CF akan 'reset' (logika
'0', rendah). Kalau dalam suatu instruksi, terjadi hasil yang menunjukkan
bahwa sistem pengecekan paritas adalah 'paritas genap' (even parity), maka
PF akan 'set'. Bila yang terjadi 'paritas ganjil' (odd parity), PF akan
'reset'.

Auxiliary Carry Flag dipakai untuk menunjukkan hasil perhitungan pada


byte rendah dari suatu bilangan binary 16 bit. Jika terjadi 'bawaan' atau
'pinjaman' dari nibble bawah (low nibble) ke nibble atas (high nibble), .
AF akan 'set', sebaliknya AF akan di 'reset'. Zero Flag akan 'set' kalau
dalam suatu proses perhitungan di hasilkan nilai nol. Bila hasilnya bukan
nol, ZF akan 'reset'.

SF atau 'Sign Flag' adalah bit yang akan mendeteksi suatu bilangan
sebagai bilangan positif atau bilangan negatif. Hal ini dilakukan dengan
melihat MSB dari bilangan tersebut. Apabila MSB menunjukkan nilai '1'
(set), maka bilangan itu adalah negatif, jika '0' (reset), bilangan
positif.

OF adalah 'Overflow Flag', berguna untuk menunjukkan bahwa telah terjadi


'overflow' yaitu jumlah bit sebagai hasil suatu proses perhitungan telah
melampaui batas yang diperkenankan. Mikroprosesor 8088 mempunyai kemampuan
untuk bekerja dalam mode 'langkah tunggal' (single-step), yaitu semua
instruksi dilaksanakan dengan cara satu demi satu. Mode ini dimungkinkan
dengan jalan membuat TF (Trap Flag) masuk ke logika '1' atau 'set'. Bagi
seorang programmer, mode ini akan sangat berguna dalam pekerjaan
'debugging'.

Interrupt Flag (IF) untuk mendeteksi adanya permintaan interupsi dari


peralatan-peralatan luar. Bila flag ini ada dalam keadaan set, maka
pendeteksian interupsi oleh 8088 akan aktif, akan tetapi jika IF dalam
keadaan reset, semua permintaan interupsi yang "maskable" (tidak mutlak)
akan diacuhkan.

DF adalah 'Direction Flag', berguna menentukan arah dari operasi-operasi


'string' (untaian string), yaitu bila DF di 'set', maka operasi string akan
mengurutkan alamat dari atas ke bawah, akan tetapi, bila flag ini di-
'reset', pengalamatan diurutkan dari alamat rendah ke alamat tinggi.

STRUKTUR ORGANISASI MEMORI


Semua bilangan (hexadecimal, decimal, binary), angka yang terletak paling
kiri adalah 'Most Significant Digit (MSD=angka paling berbobot)', sedangkan
yang paling kanan adalah 'Least Significant Digit (LSD=angka paling kecil
bobotnya)'.
Khusus binary digit, maka MSD disebut Most Significant Bit (MSB) dan LSD
disebut 'Least Significant Bit (LSB).

ORGANISASI RUANG MEMORI DAN REGISTER


Unsur terkecil memori adalah 'sel memori' (memory-cell), yaitu suatu
elemen penyimpanan data yang berkapasitas sebesar 1 bit. Dengan
menggabungkan sejumlah sel memori, akan bisa bentuk suatu ruang penyimpanan
data dengan berbagai ukuran, misalnya 1 byte, 1 word, 1 Kilobyte, 1
Megabyte,
1 Gigabyte, 1 Terabyte, dsb.
Organisasi memori dapat dibandingkan dengan sistem 'locker' (susunan laci
yang mempunyai kode nomor setiap lacinya sehingga memudahkan orang mengenal
lacinya masing-masing sebelum mengambil atau memasukkan barang titipannya).
Untuk IBM PC, 8 buah sel memori digandengkan menjadi satu secara
horisontal,
dan diberi sebuah kode nomor yang sama. Jadi, untuk mengambil atau menaruh
data pada satu kode nomor itu, 8 sel memori sekaligus teralamati. Deretan
8 buah sel memori itu kemudian disusun lagi secara vertikal, dan ditumpuk-
tumpuk sedemikian, sampai mencapai jumlah ribuah susun banyaknya.
Setiap susun, memiliki kode nomor sendiri-sendiri dan merupakan satu
lokasi memori (sebagai 'alamat memori' / memory address).
Alamat memori terdiri dari alamat genap dan alamat ganjil.
Alamat genap adalah alamat yang secara binary bit terendahnya
(LSB=Least Significant Bit-nya) '0', sedangkan alamat ganjil mempunyai
LSB '1'.

Susunan chip prosesor Intel 8088.


Catu Daya/VCC (pin 40) dan GND (pin 1 dan 20)
Bus Data (AD0 - AD7)
Bus Alamat (AD0 - AD7 dan A8 - A19)
Bus Kendali (NMI, INTR, CLK, Reset).

Dalam mikroprosesor 8088 secara fisik, bus alamat terdiri dari 20 bit
(A0-A19), sementara register-register internal terbentuk dari 16 bit data.
Oleh sebab itu, untuk menyesuaikan perbedaan jumlah bit antara bus alamat
8088 dengan register internal, sistem pengalamatan memori dilaksanakan
dengan format segment:offset. Format yang membutuhkan 32 bit ini dibentuk
dengan jalan menggabungkan data dari 2 buah register sekaligus.
Register pertama adalah satu satu dari 4 register segment, sedangkan
register lainnya diambil dari salah sebuah register pointer atau register
indeks.
Kenyataannya, segment-segment yang didefinisikan pada ruang memori itu
boleh dibuat saling berdampingan, terpisah atau tumpang tindih sekalipun.
Prosesor memiliki bus alamat sebanyak 20 bit, yang berarti ia mampu
mengalamati hingga 1.048.575 lokasi memori. Secara heksadesimal, jumlah
ini dinyatakan sebagai angka 00000 sampai dengan FFFFF. Ini adalah
alamat-alamat fisik (physical addresses) dari mikroprosesor. Untuk 8088
dan 8086 yang bus alamatnya terdiri dari 20 bit, otomatis penulisan
alamat fisiknya terdiri dari 5 digit heksadesimal.
Sistem segmentasi pada IBM PC dilaksanakan agak unik. 1 segment adalah
bagian dari ruang memori yang besarnya 65536 byte atau 64 Kb. Namun,
segment-segment itu tidaklah diletakkan secara berdampingan sambung
menyambung satu sama lain, akan tetapi saling tumpang tindih sehingga
jarak antara titik awal suatu segment hanya terpaut 16 byte terhadap
segment lainnya.
Segment pertama, diawali dari alamat 0000:0000 (alamat fisik 00000) dan
berakhir pada 0000:FFFF (alamat fisik 0FFFF). Akan tetapi, segment kedua
dimulai pada alamat 0000:0010 (alamat fisik 00010), berjarak hanya 16
bit dari titik awal alamat segment pertama. Pada kenyataannya, alamat
awal segment kedua ini identik dengan alamat 0001:0000. Sebagai akibatnya,
dalam sistem segmentasi semacam ini, akan banyak didapati penulisan
alamat-alamat segment:offset yang sebenarnya menunjuk pada lokasi yang
persis sama. Sebagai contoh,alamat 0000:0020 sesungguhnya adalah juga
alamat 0001:0010, sekaligus sama dengan alamat lokasi 0002:0001.

PETA MEMORI (MEMORY MAP)


Kapasitas memori untuk IBM PC/XT yang berbasis prosesor Intel 8088/8086
adalah 1.048.576 byte atau lebih mudah disebut 1 (satu) Megabyte.
Nilai sebesar 1 MB inilah yang menjadi dasar sistem pemetaan memori dalam
keluarga IBM PC Kompatibel, sehingga dalam produk-produk yang lebih
mutakhir pun, peta memori tersebut tetap dipertahankan. Hal ini berhubungan
dengan konsistensi yang harus dijaga pada Disk Operating System, yang
dalam keadaan bagaimanapun, harus tetap bisa dijalankan mulai dari produk
yang paling awal seperti PC/XT, sampai kepada yang terbaru seperti AT 486
kompatibel.

Tabel Peta Memori Pada IBM PC

Blok Memori Alokasi Pemakaian


F 0 0 0 0 ROM BIOS, Diagnostic, BASIC
E 0 0 0 0 ROM program
D 0 0 0 0 ROM program
C 0 0 0 0 Perluasan BIOS untuk hardisk XT
B 0 0 0 0 Monokrom Monitor
A 0 0 0 0 Monitor EGA, VGS, dll
9 0 0 0 0 Daerah kerja pemakai s/d 640 KB
8 0 0 0 0 Daerah kerja pemakai s/d 576 KB
7 0 0 0 0 Daerah kerja pemakai s/d 512 KB
6 0 0 0 0 Daerah kerja pemakai s/d 448 KB
5 0 0 0 0 Daerah kerja pemakai s/d 384 KB
4 0 0 0 0 Daerah kerja pemakai s/d 320 KB
3 0 0 0 0 Daerah kerja pemakai s/d 256 KB
2 0 0 0 0 Daerah kerja pemakai s/d 192 KB
1 0 0 0 0 Daerah kerja pemakai s/d 128 KB
0 0 0 0 0 Daerah kerja pemakai s/d 64 KB

Peta memori mengalokasikan ruang memori kepada pemakai sebanyak 640 Kb


(655360 byte) sebagai ruang kerja (user workspace). Kira-kira 2 Kb
diantaranya yang menempati alamat-alamat terbawah, dipakai oleh DOS
untuk keperluan-keperluan dasar operasi atau "housekeeping".
Dengan demikian pemakai akan mendapatkan tempat (space) sebesar 10 blok
memori utama (main memory) dimulai dari alama 00000 sampai dengan 9FFFF
heksadesimal.

Blok A - F (masing-masing berkapasitas 64 Kb), dialokasikan untuk


keperluan-keperluan program pengendali peralatan luar seperti monitor
dan hardisk serta BIOS (Basic Input Output System).
Blok memori A adalah lokasi-lokasi ruang memori yang mempunyai alamat
dari A0000 sampai dengan AFFFF, besarnya 65636 byte. Blok ini dipergunakan
untuk penempatan informasi-informasi yang akan ditayangkan ke monitor,
melalui jenis-jenis monitor mutakhir seperti EGA dan VGA. Disebut sebagai
'perluasan memori tampilan' (display memory expansion).
Blok memori B, dianggap sebagai blok konvensional bagi pengiriman
informasi ke layar monitor. Produk-produk pertama IBM PC menggunakan blok
ini untuk keperluan tersebut melalui monitor monokrom.
Blok memori C dimanfaatkan sejak keluarnya IBM XT, yaitu peningkatan
unjuk kerja dari IBM PC orisinil. Pada IBM XT inilah pertama kali digunakan
hardisk sebagai mass storage. Program kendali untuk hardisk XT yang pada
waktu itu baru berkapasitas 10 MB, ditempatkan pada Blok C tersebut.
XT sudah terdapat pemakaian hardisk, pada PC orisinil tidak.
XT terdapat 8 buah slot, PC orisinil terdapat 5 buah slot.
Blok D dan E disediakan untuk penempatan program-program tertentu yang
bisa dimuat dalam ROM. Blok teratas yang merentang dari alamat F0000
sampai dengan FFFFF adalah blok yang bisa dianggap memegang peranan
paling penting, karena disinilah ROM BIOS berkedudukan. ROM BIOS-lah
yang pertama kali mengaktifkan sistem komputer, memeriksa integritas
sistem, memanggil DOS dan selama komputer aktif juga selalu siap sedia
untuk sewaktu-waktu melakukan tugas yang spesifik.

Alokasi-alokasi alamat terbawah letaknya di dalam blok 0, yang menempati


alamat 0000 sampai dengan 0FFFF heksadesimal.
Saat proses 'start-up' sistem akan meletakkan pada blok 0 ini suatu daftar
yang disebut sebagai 'Tabel Vektor Interupsi' (Interrupt Vector Table).
Tabel memuat sederetan alamat dari rutin perangkat lunak yang berfungsi
melakukan tugas-tugas tertentu. Rutin ini disebut 'Rutin Pelaksana
Interupsi' (Interrupt handling Routine), yang dipanggil melalui prosesor
tertentu, antara lain dengan software.
Pada dasarnya isi dari BIOS software didominasi oleh rutin-rutin interupsi.
LAMPIRAN DAFTAR WARNA

DESIMAL HEKSA BINER WARNA DASAR WARNA TULISAN


000 00 0000 0000 Hitam Hitam
001 01 0000 0001 Hitam Biru
002 02 0000 0010 Hitam Hijau
003 03 0000 0011 Hitam Cyan
004 04 0000 0100 Hitam Merah
005 05 0000 0101 Hitam Magenta
006 06 0000 0110 Hitam Jingga
007 07 0000 0111 Hitam Putih
008 08 0000 1000 Hitam Hitam
009 09 0000 1001 Hitam Biru Terang
010 0A 0000 1010 Hitam Hijau Terang
011 0B 0000 1011 Hitam Cyan Terang
012 0C 0000 1100 Hitam Merah Terang
013 0D 0000 1101 Hitam Jingga Terang
014 0E 0000 1110 Hitam Magenta Terang
015 0F 0000 1111 Hitam Putih Terang

016 10 0000 0000 Biru Hitam


017 11 0000 0001 Biru Biru
018 12 0000 0010 Biru Hijau
019 13 0000 0011 Biru Cyan
020 14 0000 0100 Biru Merah
021 15 0000 0101 Biru Magenta
022 16 0000 0110 Biru Jingga
023 17 0000 0111 Biru Putih
024 18 0000 1000 Biru Biru
025 19 0000 1001 Biru Biru Terang
026 1A 0000 1010 Biru Hijau Terang
027 1B 0000 1011 Biru Cyan Terang
028 1C 0000 1100 Biru Merah Terang
029 1D 0000 1101 Biru Jingga Terang
030 1E 0000 1110 Biru Magenta Terang
031 1F 0000 1111 Biru Putih Terang

032 20 0010 0000 Hijau Hitam


033 21 0010 0001 Hijau Biru
034 22 0010 0010 Hijau Hijau
035 23 0010 0011 Hijau Cyan
036 24 0010 0100 Hijau Merah
037 25 0010 0101 Hijau Magenta
038 26 0010 0110 Hijau Jingga
039 27 0010 0111 Hijau Putih
040 28 0010 1000 Hijau Hitam
041 29 0010 1001 Hijau Biru Terang
042 2A 0010 1010 Hijau Hijau Terang
043 2B 0010 1011 Hijau Cyan Terang
044 2C 0010 1100 Hijau Merah Terang
045 2D 0010 1101 Hijau Magenta Terang
046 2E 0010 1110 Hijau Jingga Terang
047 2F 0010 1111 Hijau Putih Terang

048 30 0011 0000 Cyan Hitam


049 31 0011 0001 Cyan Biru
050 32 0011 0010 Cyan Hijau
051 33 0011 0011 Cyan Cyan
052 34 0011 0100 Cyan Merah
053 35 0011 0101 Cyan Magenta
054 36 0011 0110 Cyan Jingga
055 37 0011 0111 Cyan Putih
056 38 0011 1000 Cyan Hitam
057 39 0011 1001 Cyan Biru Terang
058 3A 0011 1010 Cyan Hijau Terang
059 3B 0011 1011 Cyan Cyan Terang
060 3C 0011 1100 Cyan Merah Terang
061 3D 0011 1101 Cyan Magenta Terang
062 3E 0011 1110 Cyan Jingga Terang
063 3F 0011 1111 Cyan Putih Terang

064 40 0100 0000 Merah Hitam


065 41 0100 0001 Merah Biru
066 42 0100 0010 Merah Hijau
067 43 0100 0011 Merah Cyan
068 44 0100 0100 Merah Merah
069 45 0100 0101 Merah Magenta
070 46 0100 0110 Merah Jingga
071 47 0100 0111 Merah Putih
072 48 0100 1000 Merah Hitam
073 49 0100 1001 Merah Biru Terang
074 4A 0100 1010 Merah Hijau Terang
075 4B 0100 1011 Merah Cyan Terang
076 4C 0100 1100 Merah Merah Terang
077 4D 0100 1101 Merah Jingga Terang
078 4E 0100 1110 Merah Magenta Terang
079 4F 0100 1111 Merah Putih Terang

080 50 0101 0000 Magenta Hitam


081 51 0101 0001 Magenta Biru
082 52 0101 0010 Magenta Hijau
083 53 0101 0011 Magenta Cyan
084 54 0101 0100 Magenta Merah
085 55 0101 0101 Magenta Magenta
086 56 0101 0110 Magenta Jingga
087 57 0101 0111 Magenta Putih
088 58 0101 1000 Magenta Hitam
089 59 0101 1001 Magenta Biru Terang
090 5A 0101 1010 Magenta Hijau Terang
091 5B 0101 1011 Magenta Cyan Terang
092 5C 0101 1100 Magenta Merah Terang
093 5D 0101 1101 Magenta Jingga Terang
094 5E 0101 1110 Magenta Magenta Terang
095 5F 0101 1111 Magenta Putih Terang

096 60 0110 0000 Jingga Hitam


097 61 0110 0001 Jingga Biru
098 62 0110 0010 Jingga Hijau
099 63 0110 0011 Jingga Cyan
100 64 0110 0100 Jingga Merah
101 65 0110 0101 Jingga Magenta
102 66 0110 0110 Jingga Jingga
103 67 0110 0111 Jingga Putih
104 68 0110 1000 Jingga Hitam
105 69 0110 1001 Jingga Biru Terang
106 6A 0110 1010 Jingga Hijau Terang
107 6B 0110 1011 Jingga Cyan Terang
108 6C 0110 1100 Jingga Merah Terang
109 6D 0110 1101 Jingga Magenta Terang
110 6E 0110 1110 Jingga Jingga Terang
111 6F 0110 1111 Jingga Putih Terang

112 70 0111 0000 Putih Hitam


113 71 0111 0001 Putih Biru
114 72 0111 0010 Putih Hijau
115 73 0111 0011 Putih Cyan
116 74 0111 0100 Putih Merah
117 75 0111 0101 Putih Magenta
118 76 0111 0110 Putih Jingga
119 77 0111 0111 Putih Putih
120 78 0111 1000 Putih Hitam
121 79 0111 1001 Putih Biru Terang
122 7A 0111 1010 Putih Hijau Terang
123 7B 0111 1011 Putih Cyan Terang
124 7C 0111 1100 Putih Merah Terang
125 7D 0111 1101 Putih Magenta Terang
126 7E 0111 1110 Putih Jingga Terang
127 7F 0111 1111 Putih Putih Terang

128 80 1000 0000 Hitam Kedip Hitam


129 81 1000 0001 Hitam Kedip Biru
130 82 1000 0010 Hitam Kedip Hijau
131 83 1000 0011 Hitam Kedip Cyan
132 84 1000 0100 Hitam Kedip Merah
133 85 1000 0101 Hitam Kedip Magenta
134 86 1000 0110 Hitam Kedip Jingga
135 87 1000 0111 Hitam Kedip Putih
136 88 1000 1000 Hitam Kedip Hitam
137 89 1000 1001 Hitam Kedip Biru Terang
138 8A 1000 1010 Hitam Kedip Hijau Terang
139 8B 1000 1011 Hitam Kedip Cyan Terang
140 8C 1000 1100 Hitam Kedip Merah Terang
141 8D 1000 1101 Hitam Kedip Jingga Terang
142 8E 1000 1110 Hitam Kedip Magenta Terang
143 8F 1000 1111 Hitam Kedip Putih Terang

144 90 1001 0000 Biru Kedip Hitam


145 91 1001 0001 Biru Kedip Biru
146 92 1001 0010 Biru Kedip Hijau
147 93 1001 0011 Biru Kedip Cyan
148 94 1001 0100 Biru Kedip Merah
149 95 1001 0101 Biru Kedip Magenta
150 96 1001 0110 Biru Kedip Jingga
151 97 1001 0111 Biru Kedip Putih
152 98 1001 1000 Biru Kedip Hitam
153 99 1001 1001 Biru Kedip Biru Terang
154 9A 1001 1010 Biru Kedip Hijau Terang
155 9B 1001 1011 Biru Kedip Cyan Terang
156 9C 1001 1100 Biru Kedip Merah Terang
157 9D 1001 1101 Biru Kedip Jingga Terang
158 9E 1001 1110 Biru Kedip Magenta Terang
159 9F 1001 1111 Biru Kedip Putih Terang

160 A0 1010 0000 Hijau Kedip Hitam


161 A1 1010 0001 Hijau Kedip Biru
162 A2 1010 0010 Hijau Kedip Hijau
163 A3 1010 0011 Hijau Kedip Cyan
164 A4 1010 0100 Hijau Kedip Merah
165 A5 1010 0101 Hijau Kedip Magenta
166 A6 1010 0110 Hijau Kedip Jingga
167 A7 1010 0111 Hijau Kedip Putih
168 A8 1010 1000 Hijau Kedip Hitam
169 A9 1010 1001 Hijau Kedip Biru Terang
170 AA 1010 1010 Hijau Kedip Hijau Terang
171 AB 1010 1011 Hijau Kedip Cyan Terang
172 AC 1010 1100 Hijau Kedip Merah Terang
173 AD 1010 1101 Hijau Kedip Jingga Terang
174 AE 1010 1110 Hijau Kedip Magenta Terang
175 AF 1010 1111 Hijau Kedip Putih Terang

176 B0 1011 0000 Cyan Kedip Hitam


177 B1 1011 0001 Cyan Kedip Biru
178 B2 1011 0010 Cyan Kedip Hijau
179 B3 1011 0011 Cyan Kedip Cyan
180 B4 1011 0100 Cyan Kedip Merah
181 B5 1011 0101 Cyan Kedip Magenta
182 B6 1011 0110 Cyan Kedip Jingga
183 B7 1011 0111 Cyan Kedip Putih
184 B8 1011 1000 Cyan Kedip Hitam
185 B9 1011 1001 Cyan Kedip Biru Terang
186 BA 1011 1010 Cyan Kedip Hijau Terang
187 BB 1011 1011 Cyan Kedip Cyan Terang
188 BC 1011 1100 Cyan Kedip Merah Terang
189 BD 1011 1101 Cyan Kedip Jingga Terang
190 BE 1011 1110 Hijau Kedip Magenta Terang
191 BF 1011 1111 Hijau Kedip Putih Terang

192 C0 1100 0000 Merah Kedip Hitam


193 C1 1100 0001 Merah Kedip Biru
194 C2 1100 0010 Merah Kedip Hijau
195 C3 1100 0011 Merah Kedip Cyan
196 C4 1100 0100 Merah Kedip Merah
197 C5 1100 0101 Merah Kedip Magenta
198 C6 1100 0110 Merah Kedip Jingga
199 C7 1100 0111 Merah Kedip Putih
200 C8 1100 1000 Merah Kedip Hitam
201 C9 1100 1001 Merah Kedip Biru Terang
202 CA 1100 1010 Merah Kedip Hijau Terang
203 CB 1100 1011 Merah Kedip Cyan Terang
204 CC 1100 1100 Merah Kedip Merah Terang
205 CD 1100 1101 Merah Kedip Jingga Terang
206 CE 1100 1110 Merah Kedip Magenta Terang
207 CF 1100 1111 Merah Kedip Putih Terang

208 D0 1101 0000 Magenta Kedip Hitam


209 D1 1101 0001 Magenta Kedip Biru
210 D2 1101 0010 Magenta Kedip Hijau
211 D3 1101 0011 Magenta Kedip Cyan
212 D4 1101 0100 Magenta Kedip Merah
213 D5 1101 0101 Magenta Kedip Magenta
214 D6 1101 0110 Magenta Kedip Jingga
215 D7 1101 0111 Magenta Kedip Putih
216 D8 1101 1000 Magenta Kedip Hitam
217 D9 1101 1001 Magenta Kedip Biru Terang
218 DA 1101 1010 Magenta Kedip Hijau Terang
219 DB 1101 1011 Magenta Kedip Cyan Terang
220 DC 1101 1100 Magenta Kedip Merah Terang
221 DD 1101 1101 Magenta Kedip Jingga Terang
222 DE 1101 1110 Magenta Kedip Magenta Terang
223 DF 1101 1111 Magenta Kedip Putih Terang

224 E0 1110 0000 Jingga Kedip Hitam


225 E1 1110 0001 Jingga Kedip Biru
226 E2 1110 0010 Jingga Kedip Hijau
227 E3 1110 0011 Jingga Kedip Cyan
228 E4 1110 0100 Jingga Kedip Merah
229 E5 1110 0101 Jingga Kedip Magenta
230 E6 1110 0110 Jingga Kedip Jingga
231 E7 1110 0111 Jingga Kedip Putih
232 E8 1110 1000 Jingga Kedip Hitam
233 E9 1110 1001 Jingga Kedip Biru Terang
234 EA 1110 1010 Jingga Kedip Hijau Terang
235 EB 1110 1011 Jingga Kedip Cyan Terang
236 EC 1110 1100 Jingga Kedip Merah Terang
237 ED 1110 1101 Jingga Kedip Jingga Terang
238 EE 1110 1110 Jingga Kedip Magenta Terang
239 EF 1110 1111 Jingga Kedip Putih Terang

240 F0 1111 0000 Putih Kedip Hitam


241 F1 1111 0001 Putih Kedip Biru
242 F2 1111 0010 Putih Kedip Hijau
243 F3 1111 0011 Putih Kedip Cyan
244 F4 1111 0100 Putih Kedip Merah
245 F5 1111 0101 Putih Kedip Magenta
246 F6 1111 0110 Putih Kedip Jingga
247 F7 1111 0111 Putih Kedip Putih
248 F8 1111 1000 Putih Kedip Hitam
249 F9 1111 1001 Putih Kedip Biru Terang
250 FA 1111 1010 Putih Kedip Hijau Terang
251 FB 1111 1011 Putih Kedip Cyan Terang
252 FC 1111 1100 Putih Kedip Merah Terang
253 FD 1111 1101 Putih Kedip Jingga Terang
254 FE 1111 1110 Putih Kedip Magenta Terang
255 FF 1111 1111 Putih Kedip Putih Terang
INTERRUPT FUNCTION

DAFTAR BIOS Interupt

NO. INTERRUPT = 10h


NO. SERVICE = 00h
FUNCTION = Set Screen Mode (Mengubah display mode layar monitor)

INPUT :
AH = 00H
AL = 00H : 40 x 25 B & W
01H : 40 x 25 Color
02H : 80 x 25 B & W
03H : 80 x 25 Color
04H : 320 x 200 Color
05H : 320 x 200 B & W
06H : 640 x 200 Color
07H : 80 x 25 Monochrome
OUTPUT :
-

NO. INTERRUPT = 10h


NO. SERVICE = 01h
FUNCTION = Menentukan/mengubah Bentuk Kursor (Set Cursor Type)
Untuk menghilangkan kursor, bit kelima dari CH harus berisikan 1

INPUT :
AH = 01H
CH = Sel (Garis) Awal Kursor
CL = Sel (Garis) Akhir Kursor

OUTPUT :
Kursor Baru

NO. INTERRUPT = 10h


NO. SERVICE = 02h
FUNCTION = Menentukan/mengatur Letak Kursor Pada Layar (Set Cursor
Position)

INPUT :
AH = 02H
BH = Nomor Halaman Layar
DH = Baris Layar
CL = Kolom Layar

OUTPUT :
Kursor pindah ke lokasi baru yang dinyatakan dalam DH,DL
NO. INTERRUPT = 10h
NO. SERVICE = 03h
FUNCTION = Memanggil/menemukan Posisi dan Bentuk Kursor (Find Cursor
Position)

INPUT :
AH = 03H
BH = Nomor Halaman Layar

OUTPUT :
DH = Nomor baris kedudukan kursor
DL = Nomor kolom kedudukan kursor
CH = Garis Awal Kursor
CL = Garis Akhir Kursor
NO. INTERRUPT = 10h
NO. SERVICE = 04h
FUNCTION = Untuk mengambil Posisi Light Pen (Read Light Pen
Position)

INPUT :
AH = 04H

OUTPUT :
AH = 0, Light Pen Switch Off (Tidak Ada)
AL = 1, DH dan DL berisi nomor baris dan kolom dari posisi light pen
CH raster line (vertical)
0-199 BX kolom pixel (horizontal) 0-319, 639

NO. INTERRUPT = 10h


NO. SERVICE = 05h
FUNCTION = Mengaktifkan/mengubah Halaman Layar (Set Active Display
Page)

INPUT :
AH = 05H
AL = 0-3 Mode Layar 2,3
0-7 Mode Layar 0,1

OUTPUT :
Active page berubah

NO. INTERRUPT = 10h


NO. SERVICE = 06h
FUNCTION = Menghapus Layar Ke Atas (Scroll Active Page Up)
(Untuk scrolling window ke atas pada layar monitor)
Menghapus isi layar ke atas, warna yang dihapus akan diletakkan di nibble
atas register BH dan terdiri atas :

Angka Warna
0 Hitam
1 Biru
2 Hijau
3 Cyan
4 Merah
5 Magenta
6 Kuning
7 Putih
8 Hitam Berkedip
9 Biru Terang (Berkedip)
A Hijau Terang (Berkedip)
B Cyan Terang (Berkedip)
C Merah Terang (Berkedip)
D Magenta Terang (Berkedip)
E Kuning Terang (Berkedip)
F Putih Terang (Berkedip)

INPUT :
AH = 06H
AL = Banyak Baris Yang Dihapus (0=semua, >0, banyaknya baris
dikosongkan)
BH = Warna Layar Yang Muncul (Atribut yang dikenakan pada
baris yang dikosongkan)
CH = Baris Batas Atas (CH:CL, koordinat kiri atas dari window
yang akan discroll)
CL = Kolom Batas Bawah
DH = Baris Batas Bawah (DH:DL, koordinat kanan bawah dari
window yang akan discroll)
DL = Kolom Batas Bawah

OUTPUT :
Layar Terhapus

NO. INTERRUPT = 10h


NO. SERVICE = 07h
FUNCTION = Menghapus Layar Ke Bawah (Scroll Active Page Down)
Untuk scrolling window ke bawah pada layar monitor.

INPUT :
AH = 07H
AL = Banyak Baris Yang Dihapus (0=semua, 0>, banyaknya baris
yang dikosongkan)
BH = Warna Layar Yang Muncul (Atribut yang akan dikenakan pada
baris yang dikosongkan)
CH = Baris Batas Atas (CH:CL, Koordinat kiri atas dari window
yang akan discroll)
CL = Kolom Batas Bawah
DH = Baris Batas Bawah (DH:DL, Koordinat kanan bawah dari
window yang akan discroll)
DL = Kolom Batas Bawah

OUTPUT :
Layar Terhapus

NO. INTERRUPT = 10h


NO. SERVICE = 08h
FUNCTION = Mengambil Warna dan ASCII Karakter Yang Terdapat Di
Posisi Kursor (Read Attribute and Character at Cursor Position) / Membaca
karakter atributnya pada lokasi tertentu di layar monitor.

INPUT :
AH = 08H
BH = Nomor Halaman

OUTPUT :
AL = Kode ASCII Karakter (Nilai ASCII yang dibaca)
AH = Warna Karakter (Atribut dari karakter tersebut)

NO. INTERRUPT = 10h


NO. SERVICE = 09h
FUNCTION = Menulis Karakter Dengan Warna di Posisi Kursor (Write
Attribute and Character at Cursor Position). / Untuk menampilkan karakter
beserta atributnya di posisi kursor. Karakter yang dicetak menurut Tabel
IBM ASCII, bukan Tabel ASCII.

INPUT :
AH = 09H
AL = IBM ASCII Code
BH = Nomor Halaman Layar
BL = Warna Karakter
(atribut karakter untuk alpha mode color untuk graphic mode)
CX = Jumlah Berapa Kali Karakter Dicetak
(Banyaknya karakter yang akan ditampilkan)

OUTPUT :
Karakter ditampilkan di layar pada posisi kursor
NO. INTERRUPT = 10h
NO. SERVICE = 0Ah
FUNCTION = Write Character Only at Cursor Position.
(Untuk menampilkan hanya karakternya saja di posisi kursor)
Karakter yang dicetak adalah menurut Tabel IBM ASCII, bukan kode ASCII.
Berbeda dengan service 09h, service ini hanya mencetak dalam warna 07h
(putih di atas hitam) pada mode layar teks dan mencetak dengan warna pada
mode layar grafik.

INPUT :
AH = 0AH
AL = IBM ASCII Code
BH = Nomor Halaman Layar
BL = Warna (Untuk Grafik)
CX = Jumlah Berapa Kali Karakter Dicetak
(Banyaknya karakter yang akan ditampilkan)

OUTPUT :
Karakter ditampilkan di layar pada posisi kursor

NO. INTERRUPT = 10h


NO. SERVICE = 0Bh
FUNCTION = Set Color Palette (Menset Warna Palette)
Untuk mengatur komposisi warna (Palette) suatu layar grafik. Register BH
harus berisikan kode palette yang mempunyai 2 kemungkinan yaitu 0 dan 1.
Bila register BH berisikan 0, maka register BL dapat berisikan kode warna
dengan 16 warna dengan pembagian 4 bit untuk wana dasar dan 4 bit untuk
warna border. Adapun ke-16 warna tersebut adalah :

0 = Hitam 8 = Gray
1 = Biru 9 = Biru Terang
2 = Hijau 10 = Hijau Terang
3 = Cyan 11 = Cyan Terang
4 = Merah 12 = Merah Terang
5 = Magenta 13 = Magenta Terang
6 = Coklat 14 = Kuning
7 = Putih 15 = Putih Terang

Bila register BH berisikan 1, maka pilihan register BL hanya dua, yaitu :


0 untuk Hijai/Merah/Coklat
1 untuk Cyan/Magenta/Putih

INPUT :
AH = 0BH
BH = Palette Color Code
BL = Background Color Code, jika BH=0
Palette number jika BH=1,
Palette number 0 : Green/Red/Yellow
Palette number 1 : Cyan/Magenta/White

OUTPUT :
-

NO. INTERRUPT = 10h


NO. SERVICE = 0Ch
FUNCTION = Write Pixel Dot (Menset Warna Palette)
Mencetak sebuah titik di layar grafik.

INPUT :
AH = 0CH
AL = Nilai Warna Titik (0-3)
DX = Nomor Baris Titik (0-199)
CX = Nomor Kolom Titik (0-319, 639)

OUTPUT :
-

NO. INTERRUPT = 10h


NO. SERVICE = 0Dh
FUNCTION = Read Pixel Dot
Membaca warna titik yang terdapat di layar grafik

INPUT :
AH = 0DH
DX = Nomor Baris Titik (0-199)
CX = Nomor Kolom Titik (0-319, 639)

OUTPUT :
AL = Nilai Warna Titik (0-3)
CX = Nilai Kolom Titik
DX = Nilai Baris Titik

NO. INTERRUPT = 10h


NO. SERVICE = 0Eh
FUNCTION = Teletype Write To Active Page
Mencetak karakter dari tabel ASCII ke layar.

INPUT :
AH = 0EH
AL = IBM ASCII Code
BL = Foreground Color (Graphic Mode) / Warna Tulisan
BH = Halaman Layar

OUTPUT :
-

NO. INTERRUPT = 10h


NO. SERVICE = 0Fh
FUNCTION = Get Current Active Page
Untuk mengambil halaman layar yang sedang aktif pada saat interrupt ini
dijalankan.

INPUT :
AH = 0FH

OUTPUT :
AH = Banyaknya kolom layar monitor (40 atau 80)
AL = Mode yang aktif (lihat INT 10h service 0)
BH = Page Display yang aktif

NO. INTERRUPT = 11h


NO. SERVICE = -
FUNCTION = Get Equipment List
Untuk mengambil equipment list. Equipment list merupakan suatu byte data
yang bit-bitnya menyatakan komposisi peralatan komputer yang terdiri atas :

Bit Keterangan
14-15 Banyaknya parallel printer
13 Serial Printer/Internal Modern
12 Game I/O
9 - 11 Jumlah RS-232
8 Reserved (Kosong)
6 - 7 Jumlah Disk Drive (0=1 drive)
4 - 5 Inisial Mode Layar
2 - 3 RAM do Motherboard
1 NDP (Co-Processor 8087)
0 Disk Drive

Keterangan :

- Bila bit ke 0,1,12 dan 13 berisikan 1 berarti mempunyai dan bila 0


berarti tidak mempunyai
- Bila bit ke 2*3 berisi angka 00=16K, 01=32K, 10=48K, dan 11=64K
- Bila bit ke 4*5 berisi angka 00=tidak digunakan, 01=40*25 berwarna,
10=80*25 berwarna dan 11=80*25 monochrome

INPUT :
-

OUTPUT :
AL = Equipment List

NO. INTERRUPT = 12h


NO. SERVICE = -
FUNCTION = Mengetahui Besar Memory (Get Memory Size)
Mengambil besarnya memory induk (base memory) yang terdapat pada komputer.

INPUT :
-

OUTPUT :
AX = Besarnya Memory dalam KB

NO. INTERRUPT = 13h


NO. SERVICE = -
FUNCTION = Mengatur Operasi Disk (Disk Function)

INPUT :
-

OUTPUT :
-

NO. INTERRUPT = 13h


NO. SERVICE = 00h
FUNCTION = Untuk Melakukan Reset terhadap suatu Disk Drive (Reset
Disk Drive)

INPUT :
AH = 00

OUTPUT :
-

NO. INTERRUPT = 13h


NO. SERVICE = 01h
FUNCTION = Untuk Mengetahui Apakah Terjadi Kesalahan Pada Disk (Get
Floppy Disk Status).
Adapun kesalahan pada disk tersebut adalah :

Isi Disket/Hardisk Arti


0 (0) SEMUA Tidak ada error
1 (1) SEMUA Kesalahan Parameter Disk
(Invalid Diskette Parameter)
2 (2) SEMUA Alamat yang dituju tidak ada
(Address Mark Was Not Found)
3 (3) DISKET Menulis Di Disket Yang Terproteksi
(Attempted Write On Protected
Diskette)
4 (4) SEMUA Sector Tidak Ditemukan
(Sector Was Not Found)
5 (5) Harddisk Reset Gagal
(Reset Failed)
6 (6) DISKET Disket Dipindahkan
(Diskette Was Removed)
7 (7) Harddisk Kesalahan Tabel Parameter
(Bad Parameter Table)
8 (8) DISKET DMA Melampaui Operasi Sebenarnya
(DMA Overrun On Previous Operation)
9 (9) SEMUA Operasi Melewati 1 Segment
(Attempted To Cross 64K Segment
Boundary
On DMA Operation)
A (10) Harddisk Bad Sector Flag
10 (16) SEMUA Kesalahan CRC atau ECC Pada Saat Baca
(CRC or ECC Error On Disk Read)
11 (17) Harddisk Data Yang Dibenarkan Dari ECC
(ECC Corrected Data Error)
20 (32) SEMUA Controller Failed
40 (80) SEMUA Seek Operation Failed
80 (128) SEMUA Drive Tidak Siap
(Drive Timed Out, Assumed Not
Ready)
AA (170) Harddisk Drive Not Ready
BB (187) Harddisk Undefined Error
CC (204) Harddisk Write Fault
E0 (224) Harddisk Status Error

INPUT :
AH = 01

OUTPUT :
AL = Status

NO. INTERRUPT = 13h


NO. SERVICE = 02h
FUNCTION = Untuk membaca suatu sector dari disket (Read Disk
Sectors).
Bila terjadi kesalahan akan sama dengan status yang terdapat pada fungsi
01h.

INPUT :
AH = 02h
AL = Jumlah Sector
BX = Offset Buffer Tampung
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment Buffer Tampung

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 03h
FUNCTION = Untuk menulis sector ke disket(Write Disk Sectors).
Bila terjadi kesalahan operasi akan terdapat kode kesalahan di register AH
yang artinya dapat dilihat pada service 01h.

INPUT :
AH = 03h
AL = Jumlah Sector
BX = Offset Data yang akan ditulis
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment Data yang akan ditulis

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 04h
FUNCTION = Untuk mengecek kesalahan suatu sector dari disk (Verify
Disk Sectors).
Kode kembali dari hasil interrupt ini dapat dicocokkan dengan daftar yang
terdapat pada fungsi 01h.

INPUT :
AH = 04h
AL = Jumlah Sector
CH = Track
CL = Sector
DH = Side
DL = Drive

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 05h
FUNCTION = Untuk Memformat Disk Secara Per Track (Format Disk
Track).

INPUT :
AH = 05h
AL = Jumlah Sector
BX = Offset dari CHRN
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment dari CHRN

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 06h dan 07h
FUNCTION = -

NO. INTERRUPT = 13h


NO. SERVICE = 08h
FUNCTION = Untuk Mengambil Parameter Harddisk (Return Drive
Parameters).
Karena kadang-kadang nomor track lebih besar dari 1 byte data (255), maka 2
bit paling atas dari CL yang berisi sector akan digunakan untuk 2 bit
paling besar dari CH yang berisi track. Nomor drive yang diberikan harus
lebih besar atau sama dengan 80h.

INPUT :
AH = 08h
DL = Drive Harddisk ( 80<= )

OUTPUT :
CH = Track
CL = Sector / Track
DH = Side
DL = Banyak Drive dalam 1 harddisk

NO. INTERRUPT = 13h


NO. SERVICE = 09h
FUNCTION = Hampir sama dengan fungsi 0 dari interrupt 13h.
(Initialize Fixed Disk Table).
Perbedaannya, fungsi ini hanya khusus untuk harddisk sehingga nomor drive
yang diberikan paling kecil 80h.

INPUT :
AH = 0Ah
DL = Drive Harddisk ( 80<= )

OUTPUT :
-

NO. INTERRUPT = 13h


NO. SERVICE = 0Ah
FUNCTION = Untuk Membaca Suatu Sector Dari Harddisk (Read Long
Sectors).
Isi register DL harus lebih besar dari 80h.

INPUT :
AH = 0Ah
AL = Sector
BX = Offset Buffer Penampung
CH = Track
CL = Sector
DH = Side
DL = Drive ( 80h<= )
ES = Segment Buffer Penampung

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 0Bh
FUNCTION = Untuk Menulis Suatu Sector Ke Harddisk (Write Long
Sectors).

INPUT :
AH = 0Bh
AL = Sector
BX = Offset Data
CH = Track
CL = Sector
DH = Side
DL = Drive ( 80<= )
ES = Segment Data
OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 0Ch
FUNCTION = Untuk Memindahkan Head Pembaca Hardisk Dari Suatu Track
Ke Track Lain.

INPUT :
AH = 0Ch
CH = Bagian Bawah Track
CL = Bagian Atas Track (bit 6 & 7)
DH = Head
DL = Drive ( 80<= )

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 13h


NO. SERVICE = 0Dh
FUNCTION = Hampir Sama Dengan Fungsi 0, namun fungsi ini digunakan
untuk harddisk.

INPUT :
AH = 0Dh
DL = Drive ( 80h<= )

OUTPUT :
AH = Kode Kesalahan

NO. INTERRUPT = 14h


NO. SERVICE = -
FUNCTION = Untuk Memprogram Port Komunikasi (Communication)

NO. INTERRUPT = 14h


NO. SERVICE = 00h
FUNCTION = Untuk Melakukan Inisialisasi Suatu Port Komunikasi
(Initialize Communication Port)
Hasil inisialisasi akan berupa keterangan dalam line status dan modem
status. Adapun arti kedua byte tersebut adalah :

LINE STATUS
Bit
7 6 5 4 3 2 1 0 Arti
1 Time Out Error
1 Transfer Shift Register (TSR) Empty
1 Transfer Holding Register (THR) Empty
1 Break Interrupt Detected
1 Framing Error
1 Parity Error
1 Overrun Error
1 Data Ready

STATUS BYTE
Bit
7 6 5 4 3 2 1 0 Arti
1 Receive Line Signal Detect
1 Ring Indicator
1 Data Set Ready (DSR)
1 Clear To Send (CTS)
1 Delta Receive Line Signal Detect
1 Trailing Edge Ring Detector
1 Delta Data Set Ready (DDSR)
1 Delta Clear To Send (DCTS)

Kemudian dalam memasukkan register AL untuk diinisialisasi, harus memenuhi


aturan seperti dibawah ini :

ISI REGISTER AL
7 6 5 4 3 2 1 0 Arti
0 0 0 110 Baud
0 0 1 150 Baud
0 1 0 300 Baud
0 1 1 600 Baud
1 0 0 1200 Baud
1 0 1 2400 Baud
1 1 0 4800 Baud
1 1 1 9600 Parity
0 0 No Parity
0 1 Odd Parity
1 0 No Parity
1 1 Even Parity

0 1 Stop Bit
1 2 Stop Bit
1 0 7 Bit Data Length
1 1 8 Bit Data Length

INPUT :
AH = 00h
AL = Kode ASCII
DX = Port Komunikasi

OUTPUT :
AH = Line Status
AL = Modem Status

NO. INTERRUPT = 14h


NO. SERVICE = 03h
FUNCTION = Untuk Mengambil Status Byte Dari Port Komunikasi (Get
Status Byte)

INPUT :
AH = 03h
DX = Nomor Komunikasi

OUTPUT :
AH = Line Status
AL = Status Byte

NO. INTERRUPT = 15h


NO. SERVICE = -
FUNCTION = Untuk Mengatur Media Penyimpan Yang Memakai Kaset
(Cassette).

NO. INTERRUPT = 15h


NO. SERVICE = 00h
FUNCTION = Untuk Mengaktifkan Alat Penyimpan Dari Media Kaset (Turn
On Cassette Motor)

INPUT :
AH = 00h
OUTPUT :
Carry Flag = 1 , Gagal
= 0 , Berhasil

NO. INTERRUPT = 15h


NO. SERVICE = 01h
FUNCTION = Untuk Mematikan Alat Penyimpan Dari Media Kaset (Turn Off
Cassette Motor)

INPUT :
AH = 01h

OUTPUT :
Carry Flag = 1 , Gagal
= 0 , Berhasil

NO. INTERRUPT = 15h


NO. SERVICE = 02h
FUNCTION = Untuk Membaca Suatu Data Dari Media Penyimpan Kaset (Read
Data Blocks From Cassette Motor)
Hasil pengembalian pada register AH akan mempunyai arti sebagai berikut :

Kode Kesalahan Operasi Kaset


AH Arti
00 Invalid Command
01 CRC Error
02 Data Transition Lost
03 No Data Located On Tape
86 No Cassettte Port Available
INPUT :
AH = 02h
BX = Offset Buffer Penampung
CX = Banyaknya Byte Yang Akan Dibacan
ES = Segment Buffer Penampung

OUTPUT :
Carry AH = Kode Kesalahan
No Carry AH = 0
DX = Banyaknya Byte Yang Dibaca

NO. INTERRUPT = 15h


NO. SERVICE = 03h
FUNCTION = Untuk Menuliskan Data Ke Media Penyimpan Kaset (Write
Data Blocks To Cassette)
Kode kesalahan hasil operasi dapat dilihat pada fungsi nomor 2.

INPUT :
AH = 03h
BX = Offset Data
CX = Banyaknya Data Yang Ditulis
ES = Segment Data

OUTPUT :
Carry AH = Kode Kesalahan

NO. INTERRUPT = 16h


NO. SERVICE = -
FUNCTION = Mengolah Masukan Dari Keyboard Secara BIOS (Keyboard)
NO. INTERRUPT = 16h
NO. SERVICE = 00h
FUNCTION = Untuk Mengambil Masukan Dari Keyboarad (Read Keyboard
Character)

INPUT :
AH = 00h

OUTPUT :
AH = Scan Code
AL = ASCII Code

NO. INTERRUPT = 16h


NO. SERVICE = 01h
FUNCTION = Untuk Mencek "Apakah Keyboard Buffer Dalam Keadaan Kosong
atau Tidak" (Check If Key Ready To Be Read)

INPUT :
AH = 01h

OUTPUT :
Zero Flag = 1 , Buffer Kosong
Zero Flag = 0 , AH = Scan Code
AL = Kode ASCII

NO. INTERRUPT = 16h


NO. SERVICE = 02h
FUNCTION = Untuk Mengambil Status Keyboard (Read Keyboard Shift
Status)
Yang Terdiri Dari :

SHIFT STATUS KEYBOARD


Bit
7 6 5 4 3 2 1 0 Arti
1 Insert On
1 Caps Lock On
1 Num Lock On
1 Scroll Lock On
1 Alt Key Down
1 Ctrl Key Down
1 Left Shift Key Down
1 Right Shift Key Down

INPUT :
AH = 02h

OUTPUT :
AL = Shift Status

NO. INTERRUPT = 17h


NO. SERVICE = -
FUNCTION = Untuk Mengatur Printer

NO. INTERRUPT = 17h


NO. SERVICE = 00h
FUNCTION = Untuk Mencetak Sebuah Karakter Ke Printer (Print
Character)
Bila terjadi kesalahan, AH akan berisikan printer status yang terdiri
dari :
PRINTER STATUS
Bits
7 6 5 4 3 2 1 0 Arti
1 Printer Not Busy
1 Printer Acknowledgment
1 Out Of Paper
1 Printer Selected
1 I/O Error
? ? Tidak Digunakan
1 Time Out

INPUT :
AH = 00h
DX = Nomor Printer

OUTPUT :
Carry AH = Printer Status

NO. INTERRUPT = 17h


NO. SERVICE = 01h
FUNCTION = Untuk Menginisialisasi Suatu Printer (Initialize Printer
Port)

INPUT :
AH = 01h
DX = Nomor Printer

OUTPUT :
Carry AH = Printer Status

NO. INTERRUPT = 17h


NO. SERVICE = 02h
FUNCTION = Untuk Mengambil Status Printer (Read Status Printer)

INPUT :
AH = 02h
DX = Nomor Printer

OUTPUT :
Carry AH = Printer Status

NO. INTERRUPT = 18h


NO. SERVICE = -
FUNCTION = Untuk Menjalankan Resident BASIC Yang Terdapat Di ROM

NO. INTERRUPT = 19h


NO. SERVICE = -
FUNCTION = Untuk Melakukan Boot Terhadap Komputer (BootStrap)

NO. INTERRUPT = 1Ah


NO. SERVICE = -
FUNCTION = Untuk Mengatur Kerja Waktu Komputer (Time Of Day)

NO. INTERRUPT = 1Ah


NO. SERVICE = 00h
FUNCTION = Untuk Mengambil Jam Dari Suatu Hari Yang Berupa Counter
Dari 0 Hingga 1800B0h (Get Time Of Day)

INPUT :
AH = 00h

OUTPUT :
AL = Midnight Flag
CX = Word Atas Dari Waktu
DX = Word Bawah Dari Waktu

NO. INTERRUPT = 1Ah


NO. SERVICE = 01h
FUNCTION = Untuk Mengeset Jam Dari Suatu Hari Yang Berupa Counter
Dari 0 Hingga 1800B0h (Set Time Of Day)

INPUT :
AH = 01h
CX = Word Atas Dari Waktu
DX = Word Bawah Dari Waktu

OUTPUT :
AL = Midnight Flag

NO. INTERRUPT = 1Ah


NO. SERVICE = 02h
FUNCTION = Untuk Mengambil Jam Dengan Angka BCD (Binary Code
Decimal) Yang Mempunyai Arti Hexa, tetapi dibaca secara desimal (Read Real
Time Clock).

INPUT :
AH = 02h

OUTPUT :
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)

NO. INTERRUPT = 1Ah


NO. SERVICE = 03h
FUNCTION = Untuk Mengambil Jam Dengan Angka BCD (Binary Code
Decimal) Yang Mempunyai Arti Hexa, tetapi dibaca secara desimal (Set Real
Time Clock)

INPUT :
AH = 03h
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)
DL = Tanda Tengah Malam

OUTPUT :
-

NO. INTERRUPT = 1Ah


NO. SERVICE = 04h
FUNCTION = Untuk Membaca Tanggal Dalam Format BCD (Read Date From
Real Time Clock)

INPUT :
AH = 04h
OUTPUT :
CH = Abad (BCD)
CL = Tahun (BCD)
DH = Bulan (BCD)
DL = Hari (BCD)

NO. INTERRUPT = 1Ah


NO. SERVICE = 05h
FUNCTION = Untuk Mengeset Taggal Dalam Format BCD (Set Date From
Real Time Clock)

INPUT :
AH = 05h
CH = Abad (BCD)
CL = Tahun (BCD)
DH = Bulan (BCD)
DL = Hari (BCD)

OUTPUT :
-

NO. INTERRUPT = 1Ah


NO. SERVICE = 06h
FUNCTION = Untuk Membuat Alarm (Set Alarm)

INPUT :
AH = 06h

OUTPUT :
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)

NO. INTERRUPT = 1Ah


NO. SERVICE = 07h
FUNCTION = Untuk Mematika Alarm (Disable Alarm)

INPUT :
AH = 07h

OUTPUT :
-

NO. INTERRUPT = 1Bh


NO. SERVICE = -
FUNCTION = Berisikan Alamat Tempat Keyboard Menekan Tombol Ctrl-
Break (Keyboard Break Address)

INPUT :
-

OUTPUT :
-

NO. INTERRUPT = 1Ch


NO. SERVICE = -
FUNCTION = Untuk Menghitung Detik Dari Komputer (Timer Tick
Interrupt)
Setiap detik akan dipanggil 18.2 kali oleh interrupt 8 hexa yang menghitung
jam dari hari dan diberikan kepada interrupt 1Ah
INPUT :
-

OUTPUT :
-

NO. INTERRUPT = 1Dh


NO. SERVICE = -
FUNCTION = Terdapat Parameter Dari 6845 Video Controller (Video
Parameter Tables)

INPUT :
-

OUTPUT :
-

NO. INTERRUPT = 1Eh


NO. SERVICE = -
FUNCTION = Terdapat Parameter Dari Disk Drive Yang Digunakan
(Diskette Parameter)

INPUT :
-

OUTPUT :
-

NO. INTERRUPT = 1Fh


NO. SERVICE = -
FUNCTION = Terdapat Karakter-karakter Yang Dapat Ditampilkan Oleh
Komputer (Graphics Character Definitions)

INPUT :
-

OUTPUT :
-
DOS INTERRUPT

NO. INTERRUPT = 20h


FUNCTION = Mengakhiri Program .COM (Program Terminate)
Eksekusi interrupt ini akan menyebabkan program dihentikan prosesnya dan
kontrol kembali ke sistem. Semua buffer file akan dikosongkan dan semua
handle akan ditutup. Kita harus menutup semua file yang berubah panjangnya
sebelum mengeksekusi interrupt ini. Jika file yang telah berubah panjangnya
tidak ditutup dulu, panjangnya, tanggal, dan jam tidak akan direkam secara
tepat di directory.

INPUT :
-

OUTPUT :
Program Berakhir

NO. INTERRUPT = 21h


NO. SERVICE = -
FUNCTION = Berisi Fungsi Yang Sangat Kompleks Yang Diberikan Oleh
DOS

NO. INTERRUPT = 21h


NO. SERVICE = 00h
FUNCTION = Program Terminate

INPUT :
AH = 00H
CS = merujuk ke PSP

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 01h
FUNCTION = Input 1 Karakter (Keyboard Input)
Mengamil Input Dari Keyboard (Standard Input Device), lalu menampilkan
karakter ke layar (Standard Output Device) dan menyimpan karakter tersebut
di AL. Penekanan tombol Ctrl-Break akan dicek. Jika tombol tersebut
ditekan, interupt 23h akan dieksekusi.

INPUT :
AH = 01H

OUTPUT :
AL = Kode ASCII Hasil Input Tercetak di layar

NO. INTERRUPT = 21h


NO. SERVICE = 02h
FUNCTION = Output 1 Karakter (Character Output On Screen)
Menampilkan karakter dalam register DL ke standard output device.. Jika
karakter dalam register DL adalah backspace (ASCII 8) kursor akan
digerakkan ke kiri satu posisi (nondestruktif). Jika Ctrl-Break terdeteksi
setelah output, INT 23h dieksekusi.

INPUT :
AH = 02H
DL = Kode ASCII

OUTPUT :
Karakter Tertulis Di Layar
NO. INTERRUPT = 21h
NO. SERVICE = 03h
FUNCTION = Auxiliary Input (Standard Auxiliary Device Input)
Menunggu sebuah karakter dari standard auxiliary device, lalu menyimpan
karakter itu ke register AL (Mengambil Masukan Dari Auxiliary Device Yang
Aktif)

INPUT :
AH = 03H

OUTPUT :
AL = Kode ASCII (Karakter dari auxiliary device)

NO. INTERRUPT = 21h


NO. SERVICE = 04h
FUNCTION = Auxiliary Output (Standard Auxiliary Deviec Output)
Mengirim sebuah karakter dalam register DL ke standard auxiliary device
yang aktif

INPUT :
AH = 04
DL = Kode ASCII Karakter Yang Dikirim

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 05h
FUNCTION = Printer Output
Mengirim sebuah karakter dalam register DL ke standard printer device.

INPUT :
AH = 05
DL = Kode ASCII Karakter Yang Dikirim

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 06h
FUNCTION = Input/Output 1 Karakter (Direct Console I/O)
Membaca sebuah karakter dari standard input device (Untuk Input Atau Output
ke Media I/O Standard).
Service ini tidak menunggu hingga sebuah karakter diketikkan. Jika kita
mengisi DL dengan FFh dan mengaktifkan service 06h ini, AL akan berisi
karakter yang diketikkan, jika ada yang diketikkan, dan zero flag akan
diclear. Jika tak ada karakter yang diketikkan, zero flag akan diset dan
pada register AL tak ada karakter yang dikirimkan. Bila DL tidak kita isi
dengan FFh, service 06h akan menampilkan karakter di dalam DL itu. Service
ini tidak mencek Ctrl-Break ataupun PrtScr.

INPUT :
AH = 06H
Jika DL = FFh --- AL membawa karakter yang dikirim
Jika DL = 00h-FFh --- DL membawa karakter yang diterima

OUTPUT :
AL = Hasil Input Angka ASCII ter-Output
NO. INTERRUPT = 21h
NO. SERVICE = 07h
FUNCTION = Input 1 Karakter Tanpa Echo Tidak Mengecek Ctrl-C (Direct
Console Input Without Echo). Menunggu hingga sebuah karakter diketikkan
dari standard input device dan menyimpannya ke register AL. Service ini
sangat mirip dengan service 01h, hanya saja pada service ini karakter tak
ditampilkan ke layar. Service ini tidak mengecek Ctrl-C atau Ctrl-Break.
Service ini sering dipakai untuk pemasukan password karena tak menampilkan
karakter yang diketikkan.

INPUT :
AH = 07H

OUTPUT :
AL = Kode ASCII Yang Ditekan

NO. INTERRUPT = 21h


NO. SERVICE = 08h
FUNCTION = Input 1 Karakter Tanpa Echo Mengecek Ctrl-C (Console
Input Without Echo With ^C). Menunggu hingga sebuah karakter diketikkan
dari standard input device dan menyimpannya ke AL. Service ini juga tidak
menampilkan karakter yang diketikkan ke layar monitor tapi mencek Ctrl-C
atau Ctrl-Break. Jika tombol tersebut ditekan, INT 23h akan dieksekusi.

INPUT :
AH = 08H

OUTPUT :
AL = Kode ASCII Yang Ditekan

NO. INTERRUPT = 21h


NO. SERVICE = 09h
FUNCTION = Mencetak Satu Baris String (Print String).
Menampilkan karakter-karakter dalam string ke standard output device.
DS:DX merupakan Alamat Data yang dicetak yang diakhiri dengan tanda '$'.

INPUT :
AH = 09H
DS = Segment Variabel Yang Akan Dicetak
DX = Offset Variabel Yang Akan Dicetak

OUTPUT :
Kalimat Tercetak Di Layar

NO. INTERRUPT = 21h


NO. SERVICE = 0Ah
FUNCTION = Input Suatu Kumpulan String (Buffered Keyboard Input /
String Input).
Menerima Masukan Serangkaian Kata-kata. Membaca karakter dari standard
input device dan menempatkannya dalam buffer dimulai pada byte ketiga. Byte
pertama dari input buffer menspesifikasikan panjang buffer (banyaknya
karakter yang dapat ditampung oleh buffer). Nilai terdapat di byte pertama
ini karenanya tak boleh nol. Buffer akan menampung karakter-karakter yang
diketikkan hingga byte terakhir. Jika byte terakhir ini telah tercapai dan
kita masih mengetikkan karakter selain karakter enter, komputer akan
berbunyi (beep). Input akan diakhiri bila tombol Enter ditekan. Setelah
tombol Enter ditekan, cacah karakter yang diketikkan akan diisikan ke byte
kedua pada buffer.

INPUT :
AH = 0AH
DS:DX = Segment dan Offset Buffer Penampung (merujuk ke input
buffer)
Alamat masukan disertai jumlah karakter maksimal yang diterima

OUTPUT :
Buffer Terisi

NO. INTERRUPT = 21h


NO. SERVICE = 0Bh
FUNCTION = Check Standard Input Status
Mengecek 'apakah isi buffer keyoboard sedang kosong atau tidak'. Mengecek
jika ada sebuah karakter dari standard input device. Service ini tidak
unik. Tanpa benar-benar membaca sebuah karakter, kita dapat mencek dan
melihat jika sesuatu telah diketikkan. Penggunaannya sederhana. Istilah
register AH dengan 0Bh dan isukan INT 21h. Jika Ctrl-Break ditekan, program
akan di interupsi. Jika tidak, kita dapat melihat isi AL apakah ada
karakter (atau karakter-karakter) yang dapat dibaca. Kegunaan dari service
ini adalah bahwa dengan service ini kita dapat memakai service 01h, 07h,
08h atau 0Ah tanpa menunggu seperti biasa. Jika ingin mengambil karakter-
karakter dan menampilkannya pada layar, misalnya dapat memakai service 01h.
Dengan service 0Bh kita mencek jika keberadaan karakter dalam buffer
keyboard. Jika ada, pemakaian service 01h akan mengambil karakter itu
sehingga komputer tak perlu menunggu.

INPUT :
AH = 0BH

OUTPUT :
AL = FFh, jika ada karakter dalam buffer,
AL = 00h, jika tak ada karakter dalam buffer keyboard.

NO. INTERRUPT = 21h


NO. SERVICE = 0Ch
FUNCTION = Clear Keyboard Buffer and Invoke a Keyboard Function
Mengosongkan/membersihkan buffer keyboard dari semua karakter yang telah
ada dan menunggu masukan pertama, kemudian mengeksekusi service yang ada di
register AL (hanya service 01h, 06h, 07h, 08h dan 0Ah yang diijinkan).
Pemakaian service ini dengan demikian akan memaksa sistem untuk menunggu
ingga sebuah karakter diketikkan. Terutama ditujukan bagi program-program
yang benar-benar membutuhkan respon secara pasti. Ketika kita mengetikkan
perintah DEL *.*, misalnya, kita selalu akan ditanya 'Are You Sure
(y/n) ?'. Sebelum berita ini ditampilkan, buffer keyboard akan dikosongkan
untuk mencegah terjadinya respon yang tidak benar. Setelah itu baru apa
yang kita ketikkan melalui keyboard akan dianggap sebagai respon yang sah.
Program FORMAT.COM juga menggosongkan buffer keyboard sebelum bertanya
'Format Another (y/n) ?'. Setelah buffer keyboard dibersihkan, isi register
AL dibaca dan service DOS yang bersangkutan akan dieksekusi.

INPUT :
AH = 0CH
AL = Function Keyboard Masukan Pertama (Number)

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 0Dh
FUNCTION = Disk Reset
Mengosongkan semua buffer file dan merekamkannya. File-file yang mengalami
perubahan ukuran tapi tidak/belum ditutup tidak akan direkam secara baik
dalam directory disk (Reset Terhadap Disk).
INPUT :
AH = 0DH

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 0Eh
FUNCTION = Mengganti Drive Yang Sedang Aktif (Select Disk)
Memilih drive yang dispesifikasikan dalam DL (0=A, 1=B, dst) sebagai
default drive.
Ini adalah cara DOS memilih default disk. Misalkan prompt sistem adalah
A>_, kemudian kita ketikkan B:, maka service 0Eh inilah yang dieksekusi.
Banyak drive (disket drive dan hardisk drive) akan diisikan ke register AL
sebagai hasil eksekusi service 0Eh ini. Untuk DOS 3.00 dan 3.10, nilai
minimum untuk banyak drive adalah 5.

INPUT :
AH = 0EH
DL = Drive Number Yang Akan Diaktifkan
(0=A, 1=B, 2=C, dst)

OUTPUT :
Ganti Drive Aktif (Banyak drive)

NO. INTERRUPT = 21h


NO. SERVICE = 0Fh
FUNCTION = Open File (Open Pre Existing File)
Membuka Suatu File Dengan Cara FCB. Melacak nama file pada directory yang
sedang aktif. Jika ketemu, register AL akan diisi nilai 00h dan FCB diisi.
Jika tidak ketemu, register AL diisi nilai Ofh.

INPUT :
AH = 0FH
DS:DX = Menunjuk Ke Sebuah Unopened FCB

OUTPUT :
AL = 00h, jika file dibuka (Sukses)
AL = FFh, jika file tidak di buka (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 10h
FUNCTION = Menutup Suatu File Dengan Cara FCB (Close File)
Menutup sebuah file setelah perekaman. Service ini harus dilakukan pada
file-file yang sedang dibuka tapi tidak lagi dibutuhkan dan setelah
penulisan file untuk menjamin bahwa semua informasi directory telah di
update. Jika file tidak ditemukan pada directory yang sedang aktif,
dianggap bahwa disket telah diganti dan register AL akan diisi nilai FFh.
Jika tidak, directory di update untuk merefleksikan status dalam FCB,
buffer untuk file itu dikosongkan dan isinya direkamkan, dan AL berisi
nilai 00h.
INPUT :
AH = 10H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB)

OUTPUT :
AL = 00h, jika file dibuka (Sukses)
AL = FFh, jika file tidak diketemu dalam directory aktif
(Gagal)
NO. INTERRUPT = 21h
NO. SERVICE = 11h
FUNCTION = Search For First Entry (Search For First Matching File)
Melacak/mencari nama file yang pertama kali cocok dengan nama yang
ditunjukkan di FCB

INPUT :
AH = 11H
DS:DX = Mengacu ke Sebuah FCB (Unopened FCB)

OUTPUT :
AL = 00h, jika nama file yang cocok ketemu (Sukses)
AL = FFh, jika nama file tidak ada yang cocok (Gagal)
DTA Membawa Informasi File

NO. INTERRUPT = 21h


NO. SERVICE = 12h
FUNCTION = Search For Next Entry (Search For Next Matching)
Melacak/mencari nama file berikutnya yang cocok dengan nama yang
ditunjukkan oleh FCB.

INPUT :
AH = 12H
DS:DX = Menunjuk ke Sebuah FCB (Unopened FCB yang telah
dispesifikasikan dari service 11h atau 12h sebelumnya)

OUTPUT :
AL = 00h, jika nama file yang cocok ketemu (Sukses)
AL = FFh, jika nama file tidak ada yang cocok (Gagal)
DTA Membawa Informasi File

NO. INTERRUPT = 21h


NO. SERVICE = 13h
FUNCTION = Delete File
Menghapus semua entri directory yang cocok dengan nama yang
dispesifikasikan (tapi bukan read-only file). Menghapus Suatu File Dengan
Fasilitas FCB.

INPUT :
AH = 13H
DS:DX = Menunjuk ke Sebuah FCB (Unopened FCB)

OUTPUT :
AL = 00h, file dihapus (Sukses)
AL = FFh, jika nama file tidak ada yang cocok (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 14h
FUNCTION = Sequential Read
Meload record yang di address oleh current block (FCB byte C-D) dan cuurent
record (FCB byte 1F) di disk transfer area (DTA), alu address record
bertambah. Membaca suatu file secara sequential. Bila terjadi kesalahan,
kode kesalahan akan tersimpan di AL (lihat lampiran kesalahan FCB).

INPUT :
AH = 14H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB)

OUTPUT :
AL = 00h, jika pembacaan sukses
AL = 01h, jika EOF (tidak ada data yang dibaca)
02h, jika DTA terlalu kecil (pembaca dihentikan/ditunda
03h, jika EOF (ada pembacaan sebagian tapi DTA tidak terisi
sepenuhnya)
Data hasil pembacaan terdapat di DTA

NO. INTERRUPT = 21h


NO. SERVICE = 15h
FUNCTION = Sequential Write
Merekamkan record yang di address oleh current block dan record field
(ukuran ditentukan oleh field FCB record size) dari disk transfer area,
lalu address record dinaikkan. Menulis suatu file secara sequential. Bila
terjadi kesalahan, kode kesalahan akan tersimpan di AL (lihat lampiran
kesalahan FCB).

INPUT :
AH = 15H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB)

OUTPUT :
AL = 00h, jika perekaman sukses
AL = 01h, jika disket full (perekaman ditunda)
02h, jika DTA terlalu kecil (perekaman dihentikan/ditunda)
Data hasil pembacaan terdapat di DTA

NO. INTERRUPT = 21h


NO. SERVICE = 16h
FUNCTION = Create File
Mencari pada directory yang aktif entry yang sesuai. Jika ketemu, file yang
bersangkutan dipakai. Panjang file akan dinolkan dan file dibuka. Jika
tidak, akan dicari tempat yang kosong pada directory. Membuat suatu file
dengan cara FCB. Bila terjadi kesalahan, kode kesalahan akan tersimpan di
AL (lihat lampiran kesalahan FCB).

INPUT :
AH = 16H
DS:DX = Menunjuk Ke Sebuah FCB (Unopened FCB)

OUTPUT :
AL = 00h, jika file berhasil dibentuk (Sukses)
Al = FFh, jika file tidak berhasil dibentuk karena disk full
atau tak ketemu directory yang sesuai (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 17h
FUNCTION = Rename File
Mengubah nama file yang sesuai dengan string yang pertama dalam directory
yang sedang aktif pada drive yang ditentukan ke string kedua. Mengganti
nama file dengan cara FCB. Bila terjadi kesalahan, kode kesalahan akan
tersimpan di AL (lihat lampiran kesalahan FCB).

INPUT :
AH = 17H
DS:DX = Menunjuk Ke Sebuah FCB (Modified FCB)

OUTPUT :
AL = 00h, jika pengubahan nama sukses (Sukses)
AL = FFh, jika tak ada nama file yang diubah (Gagal)
NO. INTERRUPT = 21h
NO. SERVICE = 18h
FUNCTION = Internal To DOS
Service ini hanya diperuntukkan bagi pemakaian secara internal oleh DOS.

NO. INTERRUPT = 21h


NO. SERVICE = 19h
FUNCTION = Mengambil Drive Yang Sedang Aktif (Find Current Disk)
Menentukan/mencari disk drive yang aktif.

INPUT :
AH = 19H

OUTPUT :
AL = Default Drive Yang Sedang Aktif (0=A, 1=B, 2=C dst)

NO. INTERRUPT = 21h


NO. SERVICE = 1Ah
FUNCTION = Set Disk Transfer Area (Set The DTA Location)
Menset address disk transfer area DS:DX (Mengubah Letak
DTA)

INPUT :
AH = 1AH
DS:DX = Lokasi DTA (Disk Transfer Address) Yang Baru

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 1Bh
FUNCTION = Allocation Table Information For Default Drive (FAT
Information For Default Drive)
Mengambil/mengetahui informasi dari FAT pada drive yang
sedang aktif
INPUT :
AH = 1BH

OUTPUT :
DS:BX = Menunjuk Ke Sebuah Kotak FAT
DX = Nomor/Cacah cluster
CX = Kapasitas byte dalam 1 sector (normalnya 512)
AL = Banyaknya sector per cluster (Nomor Sector)

NO. INTERRUPT = 21h


NO. SERVICE = 1Ch
FUNCTION = Allocation Table Information For Specified Drive (FAT
Information For Specified Drive)
Mengambil/mengetahui letak FAT pada drive yang ditentukan.

INPUT :
AH = 1CH
DL = Drive number (0=A, 1=B, dst)

OUTPUT :
DS:BX = Menunjuk Ke Sebuah Byte FAT
DX = Nomor/Cacah Cluster
CX = Kapasitas byte dalam 1 sector (normalnya 512)
AL = Banyaknya sector per cluster (Nomor Sector)
NO. INTERRUPT = 21h
NO. SERVICE = 1Dh - 20h
FUNCTION = Internal To DOS (Hanya dipakai oleh DOS sendiri)

NO. INTERRUPT = 21h


NO. SERVICE = 21h
FUNCTION = Random Read
Mengambil record yang diaddress oleh current block dan current record field
ke memory pada disk transfer area (Membaca data secara Random).

INPUT :
AH = 21H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB) Yang Berisikan
Keterangan Tentang RANDOM.
Data Hasil Baca Di DTA

OUTPUT :
AL = 00h jika pembacaan sukses lengkap
01h jika EOF (tak ada data yang dibaca)
02h jika DTA terlalu kecil (pembacaan ditunda)
03h jika EOF (hanya sebagian record yang terbaca

NO. INTERRUPT = 21h


NO. SERVICE = 22h
FUNCTION = Random Write
Merekamkan record yang diaddress oleh current block dan current record
field dari disk transfer area (Menulis suatu block dari file Random).

INPUT :
AH = 22H
DS:DX = Menunjuk Ke Sebuah (Opened FCB) Yang Berisikan Keterangan
Tentang Random

OUTPUT :
AL = 00h jika perekaman sukses lengkap
01h jika disk full (perekaman ditunda)
02h jika DTA terlalu kecil (perekaman ditunda)

NO. INTERRUPT = 21h


NO. SERVICE = 23h
FUNCTION = Mengetahui Besar Suatu File (File Size)
Melacak directory disket untuk sebuah entry yang sesuai dengan file yang
ditentukan dan menset FCB random record field dengan jumlah record dalam
file

INPUT :
AH = 23H
DS:DX = Menunjuk Ke Sebuah FCB (Unopened FCB) Yang Berisi Nama
File

OUTPUT :
AL = 00h jika entry directory ditemukan (Sukses)
AL = FFh jika entry directory tak ditemukan (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 24h
FUNCTION = Mengeset Suatu Field Dari File Random (Set
Random/Relative Record Field)
Menset random record field sebagai current block dan record field. Kita
harus memakai service ini sebelum melakukan random read dan write, dan
random block read dan write.
INPUT :
AH = 24H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB) Yang Berisi
Keterangan Tentang Random Field
OUTPUT :
Random Field Terset

NO. INTERRUPT = 21h


NO. SERVICE = 25h
FUNCTION = Set Interrupt Vector
Menset interrupt vector table untuk nomer interrupt (Mengubah Interrupt
Vector Yang Terdapat di Segment 0)

INPUT :
AH = 25H
DS:DX = Address dari rutin interrupt handling (Alamat Baru)
AL = Nomor Interrupt

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 26h
FUNCTION = Create New Program Segment
Fungsi membentuk segment program baru. Fungsi ini tidak
pernah dipakai lagi, tetapi digantikan oleh fungsi FBh

INPUT :
AH = 26H
DS:DX = Nomor Segmen Untuk Segmen Baru

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 27h
FUNCTION = Membaca Suatu File Secara Random Per Block (Random Block
Read)
Mengambil sejumlah record tertentu dari file yang diaddress oleh random
record field ke disk transfer area.

INPUT :
AH = 27H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB) Yang Berisikan
Keterangan Tentang Block Random
CX = Banyak record yang hendak dibaca

OUTPUT :
AL = 00h jika pembacaan sukses
01h jika EOF (tak ada data yang dibaca)
02h jika DTA terlalu kecil (pembacaan ditunda)
03h jika EOF (hanya sebagian record yang terbaca)
CX = Banyaknya byte yang berhasil dibaca

NO. INTERRUPT = 21h


NO. SERVICE = 28h
FUNCTION = Menulis Suatu File Secara Random Per Block (Random Block
Write)
Merekamkan sejumlah record tertentu dari disk transfer area ke file yang
diaddress oleh random record field. Jika ruang disk tidak mencukupi untuk
merekamkan data, AL akan diisi 01h dan tak record yang direkamkan.

INPUT :
AH = 28H
DS:DX = Menunjuk Ke Sebuah FCB (Opened FCB) Yang Berisikan
Keterangan Tentang Block Random
CX = Banyak Byte Yang Akan Ditulis

OUTPUT :
AL = 00h jika perekaman sukses
01h jika disk full (perekaman ditunda)
02h jika DTA terlalu kecil (perekaman ditunda)
CX = Banyaknya byte yang berhasil direkamkan

NO. INTERRUPT = 21h


NO. SERVICE = 29h
FUNCTION = Parse Filename
Mengurai nama file yang dispesifikasikan. Untuk menerjemahkan suatu nama
file. Sebagai contoh, bila diberikan *.asm, maka pada akhir operasi akan
muncul tulisan '????????.ASM' yang merupakan terjemahan dari *.ASM. Pada
register AL, yang harus diisikan adalah empat bit bawah yang masing-masing
berarti :

Bit Arti
7 6 5 4 3 2 1 0
0 0 0 0 Harus diisi 0
0 Ekstensi di FCB diberikan atau dianggap kosong
1 Ekstensi di FCB diset sesuai yang diberikan
0 Nama file di FCB diset dengan suatu nilai atau
dianggap kosong
1 Nama file di FCB disesuaikan dengan yang diberikan
0 Drive diberikan pada drive aktif
1 Drive diberikan jika memang diberikan di teks
0 Leading separators tidak diperbolehkan
1 Leading separators diperbolehkan

Bila hasil keluaran di AL berisikan 0, maka tidak terdapat nama file yang
diberikan. Sedang bila keluaran AL berisi 1, maka terdapat wild card, dan
jika berisi ffh, maka drive yang diberikan salah.

INPUT :
AH = 29H
DS:DI = Mengacu ke command line diurai
DI = Offset sebuah FCB
ES = Segment nama yang akan diterjemahkan
DS = Segment FCB
ES:DI = Mengacu ke bagian memory yang akan diisi dengan unopened
FCB
AL = Nilai bit untuk pengontrolan (Parsing Control Byte)
SI = Offset nama yang akan diterjemahkan

OUTPUT :
AL = 00h jika tak ada nama file global
01h jika nama file global dipakai di dalam command line
FFh jika drive specifier tak valid
AL = Status Byte
SI = Offset Terakhir Kode+1
DI = Offset FCB
DS:SI = mengacu ke karakter pertama sesudah nama file yang diurai
ES:DI = mengacu ke byte pertama dari FCB
NO. INTERRUPT = 21h
NO. SERVICE = 2Ah
FUNCTION = Mengambil Tanggal Dari Sistem (Get Date)

INPUT :
AH = 2AH

OUTPUT :
AL = Kode Nama Hari Dalam Minggu (0=Sun, 6:Sat)
CX = Tahun (1980-2099)
DH = Bulan (1-12)
DL = Hari/Tanggal (1-31)

NO. INTERRUPT = 21h


NO. SERVICE = 2Bh
FUNCTION = Menset Tanggal Sistem (Set Date)

INPUT :
AH = 2BH
CX = Tahun (1980-2099)
DH = Bulan (1-12)
DL = Hari/Tanggal (1-31)

OUTPUT :
AL = 00h, jika tanggal valid (Sukses)
FFh, jika tanggal tidak valid (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 2Ch
FUNCTION = Mengambil Waktu Sistem (Get System Time)
Jam, menit, detik, dan perseratus detik.
INPUT :
AH = 2CH

OUTPUT :
CH = Jam (0-23)
CL = Menit (0-59)
DH = Detik (0-59)
DL = Perseratus/Mikro Detik (0-99)

NO. INTERRUPT = 21h


NO. SERVICE = 2Dh
FUNCTION = Menset Waktu Sistem (Set System Time)

INPUT :
AH = 2DH
CH = Jam (0-25)
CL = Menit (0-59)
DH = Detik (0-59)
DL = Perseratus/Mikro Detik (0-99)

OUTPUT :
AL = 00h, jika jam valid (Sukses)
FFh, jika jam tidak valid (Gagal)

NO. INTERRUPT = 21h


NO. SERVICE = 2Eh
FUNCTION = Set / Reset Verify Switch
Menset kondisi verify. Mengeset verify switch yang merupakan suatu switch
untuk mengatur operasi ke disk dengan mengecek kerja disk. Biasanya switch
ini dimatikan.
INPUT :
AH = 2EH
AL = 00h menset verify off / mati
01h menset verify on / hidup
DL = 0

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 2Fh
FUNCTION = Get Disk Transfer Address (DTA)
Mengambil address disk transfer/DTA yang aktif.

INPUT :
AH = 2FH

OUTPUT :
ES:BX = Alamat DTA yang sedang aktif

NO. INTERRUPT = 21h


NO. SERVICE = 30h
FUNCTION = Mengambil / membaca Versi DOS (Get DOS Version Number)

INPUT :
AH = 30H

OUTPUT :
AL = Bilangan mayor dari bilangan versi
AH = Bilangan minor dari bilangan versi
BX = 0000h
CX = 0000h

NO. INTERRUPT = 21h


NO. SERVICE = 31h
FUNCTION = Terminate Process and Keep/Remain Resident.
Menghentikan proses dan menset alokasi block inisial ke size paragraf
memory.
Membuat suatu program menjadi resident. Register AL yang berisi Binary Exit
Code dapat diambil menggunakan Interrupt 21h service 46h. Isi DX adalah
besar memory yang akan diresidentkan dalam satuan paragraf.
INPUT :
AH = 31h
AL = Return Code (Binary Exit Code)
DX = Memory Size Dalam Paragraf

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 32h
FUNCTION = Internal To DOS (Hanya dipakai oleh DOS)

NO. INTERRUPT = 21h


NO. SERVICE = 33h
FUNCTION = Ctrl-Break Check (Ctrl-Break Checking)
Mengatur kerja pengecekan Ctrl-Break. Jika keadaan dihidupkan, maka Ctrl-
Break akan dicek setiap Interrupt DOS dipanggil. Namun, jika keadaan
dimatikan Ctrl-Break hanya dicek pada fungsi-fungsi yang mengijinkan
pengecekan Ctrl-Break.

INPUT :
AH = 33h
AL = 00h cek status Ctrl-Break (Ambil keterangan Ctrl-Break)

01h menset status Ctrl-Break


DL = 00h menset status ke Off
01h menset status ke On

OUTPUT :
DL = Nilai Status (00h=Off, 01h=On)

NO. INTERRUPT = 21h


NO. SERVICE = 34h
FUNCTION = Internal To DOS (Hanya dipakai oleh DOS)

NO. INTERRUPT = 21h


NO. SERVICE = 35h
FUNCTION = Get Vector (Get Interrupt Vector)
Mengacu ke rutin interrupt handling. Mengambil keterangan di Interrupt
vector dari suatu Interrupt.

INPUT :
AH = 35h
AL = Interrupt Number

OUTPUT :
ES : BX = Mengacu ke rutin interrupt handling (Interrupt
Vector)

NO. INTERRUPT = 21h


NO. SERVICE = 36h
FUNCTION = Get Disk Free Space
Untuk mengetahui ruang bebas pada disk (banyak cluster yang masih bebas,
cluster per drive, byte per sector). Mengambil sisa tempat pada suatu
disket.

INPUT :
AH = 36h
DL = Nomor Drive (0=default/yang aktif, 1=A)

OUTPUT :
BX = Banyaknya cluster yang tersisa/bebas
DX = Cluster per drive/banyaknya cluster
CX = Byte per sector/besar sector (512)
AX = 0FFFh jika drive dalam DL tak valid, jika tidak adalah banyaknya
sector per cluster

NO. INTERRUPT = 21h


NO. SERVICE = 37h
FUNCTION = Internal To DOS (Hanya dipakai oleh DOS)

NO. INTERRUPT = 21h


NO. SERVICE = 38h
FUNCTION = Return Country Dependent Information (DOS 2.10)
Untuk mengetahui sistem tanggal, waktu dan penulisan bilangan, mengikuti
sistem USA, Eropa atau Jepang. Area 32 byte berisi sebagai berikut :
Word (2 byte) format DATE/TIME
1 Byte berisi ASCIIZ string currency simbol
1 Byte diset ke 0
1 Byte tanda pemisah ribuan (ASCII)
1 Byte diset ke 0
1 Byte tanda desimal (ASCII)
1 Byte diset ke 0
24 Byte dicadangkan

Format DATE/TIME adalah sebagai berikut :


0 = standar USA h:m:s - m/d/y
1 = standar Eropa h:m:s - d/m/y
2 = standar Jepang h:m:s - d:m:y

Untuk menentukan dan mengambil ketentuan pengaturan yang dipakai. Operasi


ini memerlukan buffer sebesar 34 byte yang terdapat pada daerah yang
ditunjuk oleh DS:DX yang berisikan data hasil proses ataupun data yang akan
diset. Data yang akan diset tersebut terdiri dari Date Format, Currency
Symbol (ASCII), Thousands Separate, Desimal Separate, Date Separate, Time
Separater, Currency Format, Currency Significant Decimal, Time Format, Map
Call dan Datalist Separate (Ambil Informasi).

INPUT :
AH = 38h
DS:DX = Address dari area 32 byte memory (Set Informasi)
AL = 00h

OUTPUT :
AX = Error Code jika carry flag diset
DS:DX = Country data jika carry flag tidak di set (Kode Negara)

INPUT :
AH = 38h
AL = FFh/Country Code
BX = Country Code, jika AL = FFh
DS:DX = Alamat Data, jika ingin mengeset data

OUTPUT :
AX = Error Code jika carry flag diset

NO. INTERRUPT = 21h


NO. SERVICE = 39h
FUNCTION = Membuat SubDirectory (Create Subdirectory)
Service adalah service yang dipakai pada saat kita memberikan instruksi MD
pada DOS. Bila terjadi error, carry flag akan diset dan register AH akan
berisi nilai kode error. Jika nilai kode error itu adalah 3, maka berita
error adalah 'Path Not Found' ; sedang jika nilai kode error ialah 5 maka
berita error adalah Access Denied. Membuat sebuah subdirectory.

INPUT :
AH = 39H
DS:DX = Berisi address dari ASCIIZ string (Nama Direcotry
diakhiri ASCIIZ)
Segment dan Offset Dari Nama Directory

OUTPUT :
AX = Error Code jika carry flag di set
AH = Kode Kesalahan

NO. INTERRUPT = 21h


NO. SERVICE = 3Ah
FUNCTION = Menghapus Sub Directory (Remove Subdirectory / RMDIR).
Dipakai pada saat memberikan perintah RMDIR pada DOS. Bila ada error, carry
flag akan diset dan register AH akan berisi nilai kode error diantaranya
sebagai berikut :
AH -> 3 = Path Not Found
AH -> 5 = Access Denied Or Subdirectories Not Empty

INPUT :
AH = 3AH
DS:DX = Berisi address dari ASCIIZ String (Nama Directory
Diakhiri ASCIIZ)
Segment dan Offset Dari Nama Directory

OUTPUT :
AX = Error Code jika carry flag di set
AH = Kode Kesalahan

NO. INTERRUPT = 21h


NO. SERVICE = 3Bh
FUNCTION = Input Suatu Kumpulan String (Change Current Directory /
CHDIR)
Mengubah directory yang sedang aktif

INPUT :
AH = 3BH
DS:DX = Berisi address dari ASCIIZ string (Nama Directory yang
akan diaktifkan diakhiri ASCIIZ)
Segment dan Offset Dari Nama Directory

OUTPUT :
AX = Error Code jika carry flag diset

NO. INTERRUPT = 21h


NO. SERVICE = 3Ch
FUNCTION = Create File (CREAT)
Membentuk file baru untuk perekaman dengan metode File Handle. Bila file
itu sudah ada maka panjang file akan dinolkan.
Pada saat service ini dieksekusikan, jika file itu belum pernah ada, akan
dibentuk file baru pada directory yang diinginkan dan file dinyatakan
sebagai file read/write access. Bila ternyata pada directory tersebut telah
ada file yang namanya sama, file itu akan ditimpa dan dihapus isinya
sehingga panjangnya kini nol. Bila terjadi error, carry flag akan diset dan
register AL akan berisi nilai kode error diantaranya sebagai berikut :
AL -> 3, Path Not Found
AL -> 4, Too Many File Open
AL -> 5, Disk Full or Previous Read Only file exist

INPUT :
AH = 3CH
DS:DX = Berisi address dari ASCIIZ string (Nama File yang
diakhiri dengan ASCIIZ)
CX = Atribut File

OUTPUT :
AX = Error Code jika carry flag diset nilai 16 bit (disebut file
handle) jika tak ada error
AX = File Handle (No Carry)
AL = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 3Dh
FUNCTION = Open A File (membuka file tertentu)
Service ini akan membuka semua file normal dan yang di hidden yang namanya
cocok dengan metode File Handle. Pointer read/write akan diset ke byte
pertama dari file. Access code yang dapat diisikan ke register AL adalah :
AL -> 0, File dibuka hanya untuk pembacaan
AL -> 1, File dibuka untuk perekaman
AL -> 2, File dibuka untuk pembacaan dan perekaman
Jika terjadi error pada waktu service ini dieksekusi, carry flag akan diset
dan register AL akan berisi nilai kode error. Namun bila tak terjadi error,
tentu saja carry flag tidak diset, register AX akan berisi nilai 16 bit
yang disebut File Handle. Nilai ini dibuat oleh DOS.
INPUT :
AH = 3DH
DS:DX = Berisi address dari ASCIIZ string (Nama File yang
diakhiri dengan ASCIIZ)
AL = Access Code (Metode Operasi File)

OUTPUT :
AX = Error Code jika carry flag diset nilai 16 bit (disebut file
handle) jika tak ada error
AX = File Handle (No Carry)
AL = Kode Kesalahan

NO. INTERRUPT = 21h


NO. SERVICE = 3Eh
FUNCTION = Close a File Handle
Menutup file tertentu yang dibuka dengan metode file handle. Bila tak
terjadi error, directory di update, dan isi semua internal buffer milik
file itu akan direkamkan, dan file akan ditutup.

INPUT :
AH = 3EH
BX = File handle yang dihasilkan pada saat file dibentuk atau
dibuka

OUTPUT :
AX = Error code jika carry flag diset NONE jika carry flag tak diset
AL = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 3Fh
FUNCTION = Read from a File or Device
Menstransfer sejumlah byte tertentu dari sebuah file ke lokasi buffer.
Untuk membaca sebanyak CX byte dari suatu file yang telah terbuka.
Banyaknya byte yang dapat terbaca akan ditampung pada AX dan terdapat
kemungkinan bahwa CX tidak sama dengan AX.

INPUT :
AH = 3FH
BX = File handle
DS:DX = Buffer Address (Buffer Penampung)
CX = Jumlah byte yang dibaca (Banyaknya data yang dibaca)

OUTPUT :
AX = Jumlah byte yang berhasil dibaca error code jika carry di set
(Banyakny data yang terbaca)
AL = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 40h
FUNCTION = Write From File Or Device
Menstransfer sejumlah byte tertentu dari sebuah buffer ke file. Untuk
menulis pada sebuah file yang telah dibuka dengan kemampuan untuk ditulis.

INPUT :
AH = 40H
DS:DX = Address dari datayang akan direkamkan (Buffer penampung
data)
CX = Jumlah byte yang akan direkamkan (Banyaknya byte yang
ditulis)
BX = File Handle

OUTPUT :
AX = Error code jika carry flag diset jumlah byte yang
berhasil di rekamkan
AX = Banyaknya byte yang tertulis (No Carry)
AL = Kode kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 41h
FUNCTION = Delete a File from a Specified Directory (UNLINK).
Menghapus semua entry directory yang diasosiasikan dengan file tertentu
secara file handle. Pemakaian karakter global untuk nama file tak diijinkan
untuk disertakan pada ASCIIZ string ini. File-file Read-Only tak dapat
dihapus dengan service ini. Untuk menghapus file read-only, kita dapat
memakai service 43h dulu guna mengubah atributnya kemudian baru
menghapusnya.

INPUT :
AH = 41H
DS:DX = Berisi address dari ASCIIZ string (Nama File dengan
ASCIIZ)

OUTPUT :
AX = Error code jika carry flag diset NONE jika carry flag
tidak diset
AX = Sukses (No Carry)
AL = Kode kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 42h
FUNCTION = Move File Read/Write Pointer (LSEEK)
Menggerakkan read/write pointer sesuai dengan metode yang dispesifikasikan.
Service ini memindahkan pointer read/write sesuai dengan metode berikut :
AL Deskpripsi
0 Pointer dipindahkan sejauh CX:DX byte (offset) dari awal
file
1 Pointer dipindahkan ke lokasi sejauh offset dari lokasinya
saat itu
2 Pointer dipindahkan ke end-of-file ditambah offset
Untuk memindahkan penunjuk dari suatu file dan berguna untuk pembacaan
ataupun penulisan ke file.

INPUT :
AH = 42H
CX:DX = Jarak (offset) untuk memindahkan dalam byte (Banyaknya
perpindahan)
BX = File Handle
AL = Metode perpindahan (0,1,2)
0, Pointer dipindahkan sebanyak CX:DX dari awal file
1, Pointer ditambahkan CX:DX dari posisi semula
2, Pointer dikurangi CX:DX dari akhir file

OUTPUT :
AX = Error code jika carry flag diset
AL = Kode Kesalahan (Cary)
DX:AX = Lokasi pointer yang baru jika carry flag tidak diset (No
Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 43h
FUNCTION = Menganti File Attribute (CHMOD/Change File's Attribute)
Mengubah atribut file. Jika AL diisi nilai 00h, maka service ini akan
membaca atribut file yang dimaksud dan hasilnya diisikan ke register CX.
Jika register AL diisi nilai 01h, maka service ini akan mengubah atribut
file sesuai dengan nilai yang diisikan di register CX.

INPUT :
AH = 43H
AL = 1, Menganti/mengubah Attribute (Function Code)
AL = 0, Mengambil Attribute
CX = Attribute Baru
DS:DX = Berisi address dari ASCIIZ string (Nama file dengan
ASCIIZ yang attributnya diambil)

OUTPUT :
AX = Error Code jika carry flag diset
CX = Atribut file yang aktif/diambil
No Carry = Sukses
AL = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 44h
FUNCTION = I/O Control
Fungsi ini sangat kompleks dalam mengatur media I/O. Untuk lebih jelasnya
anda dapat membaca buku penuntun yang diberikan pada DOS anda.

NO. INTERRUPT = 21h


NO. SERVICE = 45h
FUNCTION = Duplicate A File Handle
Menduplikat sebuah file handle.

INPUT :
AH = 45H
BX = File Handle Yang Diduplikatkan

OUTPUT :
AX = File Handle Baru (No Carry)
AL = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 46h
FUNCTION = Force Duplication Of A File Handle
Menggandakan fungsi-fungsi dari handle pokok yang mengatur I/O.

INPUT :
AH = 46H
BX = Handle Yang Akan Diduplikatkan
CX = File Handle Kedua

OUTPUT :
AX = Handle Baru (No Carry)
AL = Kode Kesalahan (Carry)
NO. INTERRUPT = 21h
NO. SERVICE = 47h
FUNCTION = Get Current Directory On Specified Drive
Mengambil keterangan tentang informasi dari directory yang sedang aktif.
Informasi ini akan berupa 64 byte data.

INPUT :
AH = 47H
DS:SI = Menunjuk ke buffer
DL = Drive (A=0, B=1 dst)

OUTPUT :
AH = File Handle Baru (Carry)
No Carry = Sukses

NO. INTERRUPT = 21h


NO. SERVICE = 48h
FUNCTION = Allocate Memory
Untuk memesan memory supaya tidak terpakai program lain. Pesanan ini dalam
satuan paragraf.

INPUT :
AH = 48H
BX = Paragraf Yang Dipesan

OUTPUT :
AX = Kode Kesalahan
BX = Paragraf Maksimum

NO. INTERRUPT = 21h


NO. SERVICE = 49h
FUNCTION = Free Allocated Memory
Untuk membebaskan memory dari monopoli pemakaian program lain.

INPUT :
AH = 49H
ES = Alamat Segment dari memory yang akan dibebaskan

OUTPUT :
AX = Kode Kesalahan

NO. INTERRUPT = 21h


NO. SERVICE = 4Ah
FUNCTION = Change Memory Block Allocation
Untuk memesan memory supaya tidak terpakai oleh program lain.

INPUT :
AH = 4AH
BX = Banyaknya program yang diminta
ES = Alamat segment dari memory yang akan dipesan

OUTPUT :
AX = Kode Kesalahan
BX = Memory Maksimum Yang Dapat Dipesan

NO. INTERRUPT = 21h


NO. SERVICE = 4Bh
FUNCTION = Load Or Execute Program
Untuk menjalankan program lain atau program overlay dari program

INPUT :
AH = 4BH
AL = Nomor Fungsi
= 0, Memanggil program
= 3, Memanggil overlay
BX = Offset Parameter Block
DX = Offset Nama File
DS = Segment Nama File
ES = Offset Parameter Block

OUTPUT :
AX = Kode Kesalahan (Carry)

NO. INTERRUPT = 21h


NO. SERVICE = 4Ch
FUNCTION = Process Terminate (EXIT)
Untuk menghentikan jalannya program

INPUT :
AH = 4CH

OUTPUT :
-

NO. INTERRUPT = 21h


NO. SERVICE = 4Dh
FUNCTION = Get Return Code Of A Subprocess
Untuk mengetahui akhir dari suatu program yang baru dijalankan. Hasil
kembalian di AX akan terdiri atas 4 kemungkinan yaitu 0, jika program
berakhir normal, 1 jika program berakhir dengan tombol Ctrl-Break, 2 jika
program berakhir karena ada kesalahan kritis dan 3 jika program berakhir
dengan program resident (TSR).

INPUT :
AH = 4DH

OUTPUT :
AX = Kode Kesalahan

NO. INTERRUPT = 21h


NO. SERVICE = 4Eh
FUNCTION = Search For First File Name Match
Untuk mencari nama file pertama yang sesuai dengan kriteria yang diberikan.

INPUT :
AH = 4EH
CX = File Attribute
DS = Segment Nama File
DX = Offset Nama File

OUTPUT :
AX = Kode Kesalahan (Carry)
No Carry = DTA berisi keterangan file

NO. INTERRUPT = 21h


NO. SERVICE = 4Fh
FUNCTION = Search For Next File Nama Match
Untuk mencari nama file berikutnya yang sesuai dengan kriteria yang
diberikan.

INPUT :
AH = 4FH
OUTPUT :
AX = Kode Kesalahan (Carry)
No Carry = DTA berisi keterangan file

NO. INTERRUPT = 21h (Find Next Matching File)


NO. SERVICE = 4Fh
FUNCTION = Menganti File Attribute

INPUT :
Digunakan Service 4Eh sebelum
AH = 4Fh

OUTPUT :
- Carry= AL = 18 Not More File
- No Carry =DTA Filled as Follow 21 Bytes Reserved
1 Bytes Found Attribute
2 Bytes File's Time
3 Bytes File's Date
4 Bytes Low Word Of Size
5 Bytes High Word Of Size
13 Bytes Name and Extention of Found File is ASCIIZ Form

NO. INTERRUPT = 50h - 53h (Internal to DOS)


NO. SERVICE = -
FUNCTION = Service ini digunakan hanya Internal DOS (Reserved)

NO. INTERRUPT = 21h


NO. SERVICE = 54h
FUNCTION = Untuk Mengambil Verufy Flag (Get Verify Setting)

INPUT :
AH = 54h

OUTPUT :
AL = 0 Verify Flag Off
= 1 Verify Flag On

NO. INTERRUPT = 21h


NO. SERVICE = 55h
FUNCTION = Service ini digunakan hanya Internal DOS (Internal to
DOS/Reserved)

NO. INTERRUPT = 21h


NO. SERVICE = 56h
FUNCTION = Menganti Nama Suatu File (Rename File)

INPUT :
DS:DX = Segment dan Offset Dari Nama Asal (Nama File Yang Akan
Diubah/Alamat nama file lama)
ES:DI = Segment dan Offset Dari Nama Pengganti (Alamat nama file
baru)
AH = 56h

OUTPUT :
- No Carry = Sukses
- Carry/AH/AL=Kode Salah
AL=3 Path Not Found
AL=5 Access Denied
AL=17 Not Same Device
NO. INTERRUPT = 21h
NO. SERVICE = 57h
FUNCTION = Catat perhitungan Waktu dan Hari yang disimpan dalam File
(Get or Set a File's Date and Time). Untuk mengambil ataupun mengubah jam
dan tanggal suatu file.

INPUT :
AH = 57h
AL = 0, Mengambil Hari dan Waktu
AL = 1, Menset Hari ke dalam DX
CX = Jam File Bari (Menset Waktu ke dalam CX )
DX = Tanggal File Baru

OUTPUT :

AX = Kode Kesalahan
CX = Jam File
DX = Tanggal File

- No Carry
CX berisi informasi waktu
DX berisi informasi hari
- Carry
AL = 1, Invalid Function Number
= 6, Invalid Handle

Cara perhitungan Waktu dan Hari yang disimpan ke dalam file :


Waktu = 2048 x Jam + 32 x Menit + Detik/2
Hari = 512 x (Tahun - 1980) + 32 x Bulan + Hari

NO. INTERRUPT = 21h


NO. SERVICE = 59h
FUNCTION = Service ini diaktifkan ketiak terjadi error. Saat itu DOS
menset Carry Flag, atau mengisi AL dengan 0FFFh. Dalam kasus ini, service
ini dapat mengetahui extended error dan memberi informasi dimana error itu
terjadi (Get Extended Error (DOS 3+)

NO. INTERRUPT = 21h


NO. SERVICE = 5Ah
FUNCTION = Service ini membuat file sementara dengan sebuah nama
yang unik (Create Unique File (DOS 3+))

NO. INTERRUPT = 21h


NO. SERVICE = 5Bh
FUNCTION = Service ini membuat file baru seperti Service 3Ch (Create
a New FileName (DOS 3+))

NO. INTERRUPT = 21h


NO. SERVICE = 5Ch
FUNCTION = Ketika sebuah file dipakai bersama-sama, anda dapat
mengunci file tersebut agar tidak dipakai orang lain secara bersamaan (Lock
And Unlock Access To A File (DOS 3+))

NO. INTERRUPT = 21h


NO. SERVICE = 5E00h
FUNCTION = Service ini dapat mengetahui nama dari komputer (Get
Machine Name (DOS 3.10))
NO. INTERRUPT = 21h
NO. SERVICE = 5E02h
FUNCTION = Service ini merupakan salah satu service network, dan
membuat mudah untuk sejumlah orang yang menggunakan printer yang sama (Set
Printer Setup (DOS 3.10))

NO. INTERRUPT = 21h


NO. SERVICE = 5E03h
FUNCTION = Service ini mengetahui parameter setup printer di dalam
network (Get Printer Setup (DOS 3.10))

NO. INTERRUPT = 21h


NO. SERVICE = 5F02h
FUNCTION = Service ini memonitor dan redirection bekerja dengan
mengikuti service 5F03h (Get Redirection List Entry (DOS 3.10))

NO. INTERRUPT = 21h


NO. SERVICE = 5F03h
FUNCTION = Service ini mendefinisikan directory dan redirect printer
di dalam sebuah PC Network (Redirect Device (DOS 3.10))

NO. INTERRUPT = 21h


NO. SERVICE = 5F04h
FUNCTION = Service ini untuk membatalkan service 5F03H (Cancel
Redirection (DOS 3.10))

NO. INTERRUPT = 21h


NO. SERVICE = 62h
FUNCTION = Service ini mengetahui alamat segment PSP yang sedang
diproses (Get PSP (DOS 3+)

ADDRESS VECTORS

NO. INTERRUPT = 22h (Terminate Address)


NO. SERVICE = -
FUNCTION = Vektor interrupt ini menyimpan alamat pengontrolan proses
transfer ketika program dijalankan. Interrupt ini menyimpan alamat terakhir
yang dijalankan oleh program ketika program tersebut berhenti. Anda
diharapkan tidak memakai interrupt ini, tetapi membiarkan DOS sendiri yang
menggunakannya.

NO. INTERRUPT = 23h (Control Break Exit Address)


NO. SERVICE = -
FUNCTION = Vektor ini menyimpan alamat pengontrolan proses transfer
ketika menekan ^Break.
Berisikan program yang bekerja ketika Ctrl-Break ditekan.

NO. INTERRUPT = 24h (Critical Error Handler)


NO. SERVICE = -
FUNCTION = Vektor ini mengaktifkan alamat pengontrolan proses
transfer jika ada critical error, seperti mencoba membaca data dari disk
yang kosong. Jika top bit AH=0, errornya terdapat pada disk, sedangkan jika
bit tersebut 1. Error kode ditemukan dalam 4 bit terendah DI, sebagai
berikut :
0 = Diskette is write protected
1 = Unknown Unit
2 = The Requested Drive Is Not Ready
3 = Unknown Command
4 = Cyclic Redundancy Check Error In The Data
5 = Bad Request Structure Length
6 = Seek Error
7 = Media Type Unknown
8 = Sector Not Found
9 = The Printer Is Out Of Paper
A = Write Fault
B = Read Fault
C = General Failure
Untuk mengecek kesalahan yang sangat kritis. Kesalahan ini dapat diketahui
dari 4 bit bawah yang terdapat pada register DI. Kode kesalahan dapat
dilihat pada kode kesalahan DOS.

NO. INTERRUPT = 25h


NO. SERVICE = -
FUNCTION = Untuk membaca disk secara absolute dengan menggunakan DOS
Sector (Absolute Disk Read).

INPUT :
AL = Nomor Drive (0=A, 1=B dst)
CX = Jumlah/banyaknya Sektor Yang Dibaca
DX = Logika Sektor Pertama (Sector pertama yang dibaca)
DS:BX = Alamat Buffer

OUTPUT :
- No Carry = Sukses
- Carry/AH = Kode Kesalahan
AH = 80h Disk didn't response
40h - Seek Failed
20h - Controller Failure
10h - Bad CRC Error Check DMA Overrun
- Sector Not Found
03 - Write Protect Error
02 - Address Mark Missing

Error Unknown
S

NO. INTERRUPT = 26h


NO. SERVICE = -
FUNCTION = Untuk menulis ke disk secara absolute dengan menggunakan
DOS sector (Absolute Disk Write)

INPUT :
AL = Nomor Drive (0=A, 1=B dst)
CX = Banyaknya/Jumlah Sektor Yang Dibaca
DX = Logika Sektor Pertama Yang Dibaca
DS:BX = Alamat Buffer

OUTPUT :
- No Carry = Sukses
- Carry/AH = Kode Kesalahan
AH =80h Disk didn't Response
40h - Seek Failed
20h - Controller Failure
10h - Bad CRC Error Check DMA Overrun

- Sector Not Found


03 - Write Protect Error
02 - Address Mark Missing

- Error Unknown
NO. INTERRUPT = 27h
NO. SERVICE = -
FUNCTION = Membuat Suatu Program Menjadi Memori Resident (Terminate
And Stay Resident)

NO. INTERRUPT = 28h-2Eh


NO. SERVICE = -
FUNCTION = Internal DOS (Internal DOS)

NO. INTERRUPT = 2Fh


NO. SERVICE = -
FUNCTION = Mensetup komunikasi antara 2 pemrosesan dan dapat membuat
secara antri Multiplex Interrupt

NO. INTERRUPT = 30h-3Fh


NO. SERVICE = -
FUNCTION = Cadangan Yang Akan Datang (DOS Reserved)

NO. INTERRUPT = 40h-5Fh


NO. SERVICE = -
FUNCTION = Cadangan Yang Akan Datang (Reserved)

NO. INTERRUPT = 60h-67h


NO. SERVICE = -
FUNCTION = Cadangan Untuk Pengguna Software (Reserved For User
Software)

NO. INTERRUPT = 68h-7Fh


NO. SERVICE = -
FUNCTION = Tidak Digunakan (Not Used)

NO. INTERRUPT = 80h-85Fh


NO. SERVICE = -
FUNCTION = Cadangan Penggunaan BASIC (Reserved by BASIC)

NO. INTERRUPT = 86h-F0h


NO. SERVICE = -
FUNCTION = Ketika Interpreter BASIC dijalankan, interrupt ini
digunakan (Used by BASIC Interpreter)

NO. INTERRUPT = F1h-FFh


NO. SERVICE = -
FUNCTION = Tidak Digunakan (Not Used)

PROGRAM .EXE DAN .COM


Perbedaannya adalah besarnya segment yang dipakai dalam program.

.COM
Harus dibuat dalam 1 segment (64 Kb)
Stack dibuat oleh program pada akhir segment
Hanya terdapat 1 segment, sehingga tidak perlu mengatur DS, CS, SS
(kecuali diinginkan)
Tidak mungkin membuat program dengan besar file lebih dari 64 Kb (1
segment)
Harus menyediakan ruangan diawal program sebanyak 100h byte untuk
keperluan PSP (Program Segment Prefix)
Karena tempat PSP diketahui dengan pasti, maka dapat melakukan operasi ke
PSP lebih mudah karena masih dalam 1 segment
Karena terdiri 1 segment, dapat menggunakan DEBUG untuk membuat program

.EXE
EXE tidak dibatasi banyaknya segment (1, 2, atau lebih).
Diperbolehkan membuat program yang panjangm, karena tidak ada pembatasan
besar program
Tidak perlu menyediakan tempat untuk PSP sebesar 100h byte, karena
program telah meletakkan PSP ditempat yang telah disediakan
Pengaturan pembagian segment dilakukan dengan bebas
Tidak dapat dibuat dengan DEBUG

Kelebihan dan kekurangan .EXE adalah kebalikan dari program .COM :

OPERASI STACK
STACK
Adalah tempat peletakan sementara isi register. Stack pada .COM terdapat di
akhir segment dan ketika pertama kali dijalankan program penunjuk stack
(SP) akan langsung ke byte terakhir dari segment. Sedang pada program .EXE
harus membuat stack sendiri dan mengalihkan penunjuk stack ke tempat yang
telah dibuat.

PERINTAH STACK
Mempunyai dua fungsi, yaitu fungsi untuk memasukkan isi suatu
register/variabel ke stack dan mengeluarkan isi register variabel dari
stack.
Perintah untuk memasukkan isi register pada stack :
PUSH [operand 16 bit]

PUSHF
Perintah untuk memasukkan Flag Register ke dalam stack untuk mengamankan
Flag Register supaya tidak berubah (bila diperlukan untuk operasi
berikutnya).

POP [Operand 16 bit]


Perintah untuk mengeluarkan isi stack ke sebuah register atau variabel.

POPF
Perintah untuk mengeluarkan isi stack untuk Flag Register.

Bahwa operasi stack yang pertama masuk ke stack adalah yang terakhir keluar
dari stack dan yang terakhir masuk ke stack, maka dialah yang pertama
keluar dari stack. Sistem ini disebut LIFO (Last In First Out).
LAMPIRAN MESSAGES ERROR

Argument Needs Type Override


Baris program yang tidak menyatakan besarnya operasi.
Contoh : Mov [BX],1
Untuk menangani kesalahan harus menambahkan besaran dengan menggunakan
operator PTR.
Bila baris program besar opeasinya 1 word, maka menjadi :
Mov Word PTR [BX],1

Argument to operation or Instruction has illegal size


Baris program yang memindahkan atau membandingkan suatu besaran yang tidak
sama besar.
Contoh : Mov AX,BL

Arithmetic Overflow
Baris program yang melakukan operasi aritmatik melebihi besaran
operandnya,
Contoh : Mov AX,2000h*10

Assume Must Be Segment Register


Baris program yang melakukan perintah assume bukan dengan segment
register.
Contoh : Assume BX : Code ;DX bukan segment register

Assuming Segment Is 32 Bit


Tidak memberitahukan compiler berapa besar segment yang dipakai dengan
menggunakan Use16 (untuk 16 bit) ataupun Use32 (untuk 32 bit), sehingga
compiler akan menganggap segment register sebagai register 32 bit.

Bad Keyword In Segment Statement


Terdapat kesalahan dalam mendefinisikan suatu segment.
Contoh : Data Segment Papa Public ; Papa harus diganti Para

Can't Add Relative Quantities


Baris program yang melakukan pertambahan terhadap 2 buah alamat.
Contoh : A db 9
AB = A + A

Can't Address With Currently Assumed Segment Register


Belum mendefinisikan segment untuk mengambil data dari segment lain.
Contoh : DataSeg Segment
Assume DS : DataSeg

Mov SI, Ambil


DataSeg Ends

Data2 Segment
Ambil db ?
Data2 Ends

Can't Convert To Pointer


Baris program yang menyatakan suatu register yang tidak bisa dijadikan
pointer dijadikan pointer.
Contoh : Mov D,[Word Ptr CX] ; CX bukan register pointer

Can't Emulate 8087 Instruction


Baris program tidak terdapat directives EMUL atau pada saat compile tidak
diberikan command tail/e, tetapi dalam program terdapat instruksi yang
memakai perintah co-processor.

Can't Make Variable Public


Suatu variabel yang didapat dari luar dipublickan kembali.
Contoh : Extrn Ambil
Public Ambil

Can't Override Es Segment


Register ES untuk operasi tidak dapat digunakan.
Contoh : STOS DS:Byte Ptr[DI] ; DS tidak dapat menggantikan
ES

Can't Substract Dissimilar Relative Quantities


Bila dilakukan pengurangan terhadap 2 buah alamat yang berlainan segment.
Contoh : SegPer Segment
A:
SegPer Ends

SegDua Segment
B: Mov AX,B-A
SegDua Ends

Can't Use Macro Name In Expression


Bila suatu macro dipakai dalam operasi.
Contoh : Pertama Macro
--
EndM

Seg1 Segment
Assume CS:Seg1
Org 100h

Start : Mov AX, Pertama

Can't Use This Outside Macro


Bila dalam macro terdapat atau memotong program.
Contoh : DataSeg Segment
EndM ; Macro memotong segment

Code Or Data Emission To Undeclared Segment


Memberikan instruksi sebelum segment dideklarasikan.
Contoh : Mov AX,100
Ends ;Segment belum dideklarasikan

Constant Assumed To Mean Immediate Constant


Terdapat pemakaian perintah [0] pada baris program.
Contoh : Mov AX[0]

CS Not Correctly Assumed


Terdapat label yang didefinisikan secara near dipanggil dari segment yang
berlainan.
Contoh : Code_seg1 Segment
Assume CS:Code_seg1
Jmp Seg
--
Code_seg1 Ends

Code2 Segment
Seg Label Byte
Code2 Ends

CS Override Ini Protected Mode


Bila berada dalam mode terproteksi dari komputer 286 ataupun 386, dimana
menggunakan CS untuk melakukan override.

CS Unreachable From Current Segment


Terdapat assume yang tidak sesuai pada permulaan program.
Hanya di pemograman MASM (lainnya diatasi sendiri oleh compiler)
Contoh : Prog1 Segment
Assume CS:Prog2 ; Assume CS tidak sesuai
dengan segment
Start :

Declaration Needs Name


Suatu deklarasi yang tidak memakai nama.
Contoh : Proc ; Procedure perlu
nama
--
--
EndP

Directives Ignored In Turbo Pascal Model


Membuat suatu program yang akan diinterfacekan ke Turbo Pascal tetapi
tidak menyertakan model yang dikenal oleh Turbo Pascal

Directive Not Allowed Inside Structure Definition


Memakai suatu directive di dalam suatu structure.
Contoh : No Struc
X db ?
Org 100h ; Org merupakan suatu
directive
Y db ?
Ends

Duplicate Dummy Argument


Mendefinisikan dua parameter yang sama.
Contoh : No Macro B,A,B ; Dua buah parameter dengan
nama B

Else Or Endif Without If


Suatu directive ELSE atau ENDIF tanpa terdapat IF di dalam program. Contoh
:

Expecting Offset Quantity


Terdapat perintah yang bermaksud mengambil offset dari suatu segment
dengan cara yang salah.
Contoh : Code Segment
Mov AX,Low Code
Code Ends

Expecting Offset Or Pointer Quantity


Terdapat perintah yang bermaksud mengambil offset atau segment dari suatu
lokasi namun menggunakan cara yang salah.
Contoh : Code Segment
Mov AX,Seg Code
Code Ends
Kesalahan program adalah Seg berguna mengisi nilai segment ke register AX.
Namun karena Code adalah segment, maka pernyataannya salah.

Expecting Pointer Type


Perintah yang berhubungan dengan pointer mengalami kesalahan tata
penulisan perintah. Contoh : LDS BX,4

Expecting Scalar Type


Perintah yang melanggar tata penulisan perintah tersebut.
Contoh : Banyak db 4
Rol AX,Banyak ; Rol harus
menggunakan bilangan bukan variabel

Expecting Segment Or Group Quantity


Kesalahan dalam mengatur segment atau suatu group.
Contoh : Data Segment
Assume DS:Banyak
Banyak db ?
Data Ends

Extra Characters On Line


Terdapat karakter yang lebih pada suatu baris perintah.
Contoh : Mov BX,2000 00

Forward Reference Needs Override


Mengambil suatu variabel yang terdapat diluar jangkauan segment yang
sedang aktif.
Contoh : Assume CS:Data
Call BG

Bg Proc Far
Mov AX,Vae

Data Segment
Vae Dw ?

Global Type Doesn't Match Symbol Type


Mendefinisikan suatu nama dalam global dan mendefinisikannya kembali dalam
program yang sama.

ID Not Member Of Structure


Terjadi dalam mode pemograman ideal karena pemakaian tanda yang dipakai
oleh mode pemograman ideal juga dipakai oleh suatu structure.

Illegal Forward Reference


Menggunakan suatu variabel, namun variabel itu belum didefinisikan.
Contoh : Mov AX,Anda
----
Anda dw 200

Illegal Immediate
Kesalahan pada operand dari tata penulisan.
Contoh : Mov 10,AX

Illegal Indexing Mode


Kesalahan pemakaian register addresing mode dalam mendefinisikan suatu
memory.
Contoh : Mov [BX+A],AL ; AX bukan register addresing
mode

Illegal Instruction
Kesalahan intruksi yang tidak dikenal

Illegal Insruction For Currently Selected Processor(s)


Kesalahan instruksi dimana instruksi tersebut tidak terdapat pada
processor tersebut.
Contoh : . 8086
POPA ; POPA tidak terdapat
pada processor 8086

Illegal Local Argument


Terdapat kesalahan dalam mendefinisikan suatu argument dengan menggunakan
directive local.
Contoh : Local 123 ; 123 tidak merupakan
argument

Illegal Local Symbol Prefix


Kesalahan pemakai antara local dan locals.
Contoh : Locals XTYX ; hanya 1 argument

Illegal Memory Reference


Terdapat pengalamatan memory yang salah.
Contoh : Mov [BX],[SI+4] ; Tidak bisa memindahkan dua
lokasi memory

Illegal Number
Terdapat angka yang tidak sesuai dengan tata angka.
Contoh : Mov AX,0eadjh ; j bukan angka

Illegal Origin Address


Kesalahan program dalam mendefinisikan alamat yang sedang didefinisikan.

Illegal Override To Structure


Mendefinisikan suatu data dengan menggunakan operator DUP di besaran yang
tidak dapat memakai operator DUP.
Contoh : A dw 10 DUP ('D')

Illegal Override Register


Kesalahan pada proses override suatu alamat, seperti menggunakan segment
register yang salah.
Contoh : Mov DX:XYZ,1 ; DX bukan segment register

Illegal Radix
Kesalahan pendefinisian directive radix.

Illegal Register Multiplier


Kesalahan perkalian terhadap register.
Contoh : Mov AX*3,4

Illegal Segment Address


Kesalahan dalam memberikan alamat dalam mendefinisikan suatu segment.
Contoh : A Segment At 12232h

Illegal Use Of Constant


Kesalahan penggunaan angka.
Contoh : Mov BX+1,5

Illegal Use Of Register


Kesalahan pemakaian register untuk keperluan yang digabungkan dengan
operator.
Contoh : Mov AX, 4 shl Bx

Illegal Use Of Segment Register


Kesalahan pemakaian segment register, seperti segment register dilakukan
untuk operasi pertambahan.
Contoh : Add DS,4

Illegal USES Register


Timbul pada operasi dengan menggunakan processor 80386, dimana dilakukan
push, pop yang terkena lokasi penyimpanan alamat procedure.

Instruction Can Be Compacted With Override


Perintah JUMP yang memerlukan tempat 2 sehingga 1 byte harus diberikan
perintah NOP, untuk itu perlu ditambahkan operator.
Contoh : Jmp X ; pesan peringatan
Jmp Short X

Invalid Mode Type


Memberikan tipe model memory yang akan dipakai.
Contoh : . Model Code

Invalid Operand(s) To Instruction


Baris program yang memakai operand yang tidak diperbolehkan oleh perintah.
Contoh : Fadd ST920,ST(3)
Kesalahannya adalah Fadd yang bisa memakai satu variabel stack.
Labels Can't Start With Numberic Character
Mendefinisikan suatu label yang dimulai dengan angka, seperti label
124bhi.

Line Too Long Truncating


Membuat suatu baris program yang lebih dari 255 karakter.

Location Counter Overflow


Mendefinisikan suatu variabel yang melewati batas segment.
Contoh : Org 0fff0h
Db 20 dup(?)

Missing Argument Or (
Lupa memberikan suatu argument atau tanda (.
Contoh : Ifb

Missing Argument Size Variabel


Tidak memberikan nama setelah besaran dalam pemakaian directive ARG
ataupun LOCAL.
Contoh : ARG A:Word, B:Dword= ; Tidak terdapat nama

Missing COMM ID
Kekurangan dalam mendefinisikan directive COMM.
Contoh : COMM Near ; Tidk terdapat nama

Missing Macro ID
Kekurangan dalam mendefinisikan suatu macro.
Contoh : Macro ; Tidak ada nama
macro
Db C
Endm

Missing End Quote


Tidak terdapat tanda petik dalam mendefinisikan suatu data.
Contoh : Mov Ah,'A

Missing Module Name


Mendefinisikan suatu directive NAME, namun lupa memberikan nama setelah
directive tersebut.

Missing Or Illegal Language ID


Salah mendefinisikan directive .Model

Missing Or Illegal Type Specifier


Salah memberikan besar pendefinisian suatu lokasi memory.
Contoh : Sek Label Bute ; Tidak ada besaran
bute, (byte)

Missing Term In List


Kesalahan penulisan dalam directive Extrn Public dan sebagainya.
Contoh : EXTRN A:Byte,,B:Byte ; Kelebihan koma

Missing Text Macro


Kesalahan pendefinisian suatu directive yang memerlukan suatu argument.
Contoh : NEWSTR SUBSTR ; SUBSTR memerlukan text

Model Must Be Specified First


Kesalahan urutan pendefinisian model dan segment pada mode pemograman
ideal.
Contoh : .CODE ; .MODEL harus didefinisikan
dahulu
Name Must Come First
Kesalahan pendefinisian, dimana nama harus diberikan pada urutan pertama.
Contoh : Struc AbCD ; Nama harus pertama

Near Jump Or Call To Different CS


Terdapat lompatan dengan jarak Near yang melompat melewati segment.

Need Address Or Register


Perintah yang kekurangan operand.
Contoh : Mov Ax,

Need Angle Brackets For Structure Fill


Pemakaian data structure tanpa menuruti cara pemakaian.
Contoh :
A Struc
A1 db 10
A2 db 20
Ends
Str1

Need Colon
Pemakaian suatu directive atau label yang kurang tanda titik dua ( : ).
Contoh : EXTRN X Byte ; Kurang Titik Dua

Need Expression
Pernyataan yang mengalami kekurangan operand.
Contoh : X - 4 + * 6

Need File Name After INCLUDE


Pernyataan include yang tidak diikuti dengan nama file.
Contoh : Include

Need Left Parenthesis


Kekurangan tanda kurung kiri pada suatu pernyataan.
Contoh : Mov BX, 5+4)

Need Pointer Expression


Pengalamatan menggunakan tanda [] tidak terdapat ekspresi di dalamnya.
Contoh : Mov BX,[]

Need Quated String


Memasukkan suatu karakter tidak dikenal ke dalam jajaran string

Need Register In Expression


Tidak memakai suatu register dalam operasi yang memerlukan register.

Need Right Angle Bracket


Lupa memakai tanda > dalam suatu pernyataan .
Contoh : MyStruc Strucname < 1,2,3

Need Right Parenthesis


Terdapat perintah yang mengalami kekurangan tanda penutup kurung ) dalam
kalimat perintahnya.
Contoh : Mov AX,10 + (40*50

Need Right Square Bracket


Suatu perintah yang mengalami kekurangan tanda penutup kurung besar ]
dalam kalimat perintahnya.
Contoh : Mov Ax,[Bx

Need Structure Member Name


Mendefinisikan suatu Structure tanpa memakai nama untuk anggotanya.
Contoh : A Stuc
Db 0
A Ends

Not Expecting Group Or Segment Quantity


Pemakaian segment atau group yang tidak pada tempatnya.
Contoh : Code Segment
Rol Ax,Code

Open Conditional
Suatu kondisi dalam keadaan terbuka.
Contoh : If A
End

Open Procedure
Suatu procedure yang dibuka tetapi tidak ditutup.
Contoh : A Proc Near
Mov Ah,02
Mov Dl,30
Int 21
Ret

Open Segment
Suatu segment yang dibuka dan tidak ditutup kembali.
Contoh : Code Segment
Mov Ah,02
Int 20

Open Structure Definition


Kesalahan dalam pendefinisian suatu structure.
Contoh : X Struc
A dw ?
End ; Ends bukan
end

Operand Type Do Not Match


Perintah yang melakukan operasi terhadap dua operand dengan kedua operand
tersebut mempunyai besaran yang tidak sama.
Contoh : Mov Dx,Al

Pass Dependent Construction Encountered


Akibat dari directive 1F1 dan 1F2.

Pointer Expression Needs Brackets


Melakukan perpindahan dengan suatu lokasi memory.
Contoh : b db 021
Mov Ax,b

Positive Count Expected


Pemakaian bilangan negatif tidak pada tempatnya.
Contoh : A db -1 dup (?)

Record Field Too Large


Suatu record yang melebihi 32 bit.
Contoh : B Record Range:12, Atas:12, Bawah:12

Recursive Definition Not Allowed For EQU


Suatu variabel yang mengalami kesalahan pendefinisian, seperti memakai
namanya sendiri untuk mendefinisikan.
Contoh : ABC Equ TwoTimes ABC

Register Must Be AL or AX
Suatu perintah yang mengalami kesalahan karena tidak memakai register AX
atau AL dalam operasinya, seperti operasi In.
Contoh : In Cl,Dx

Register Must Be Dx
Suatu perintah yang mengalami kesalahan karena tidak memakai register DX
dalam operasinya.
Contoh : In Al,Cx

Relative Jump Out Of Range By : ____ Byte


Suatu relative jump yang melebihi 128 byte

Reserved Word Use As Symbol


Suatu kata yang dipakai oleh Turbo Assembler dijadikan simbol.
Contoh : Mov : Mov Ah,01 ; Mov merupakan perintah

Rotate Count Must Be Constant Or CL


Bila banyaknya kali rotasi menggunakan perintah ROL atau ROR tidak memakai
bilangan ataupun register CL.
Contoh : ROL Ax,Dl ; Memakai register DL

Rotate Count Our Of Range


Banyaknya kali rotasi melebihi kapasitas.
Contoh : ROL Ax.40 ; Maximum Rol = 3 di 80286

Segment Alignment Not Strict Enough


Terdapat directive ALIGN yang tidak sesuai dengan alignment yang
ditetapkan.
Contoh : A Segment Para
Align 32 ; 32 > 16

Segment Attributes Illegally Redefined


Suatu segment yang dibuka kembali dengan attribute yang berbeda.
Contoh : DATA Segment Para Public
Data Ends

Data Segment Byte


Data Ends

Segment Name Is Superfluous


Kesalahan dalam pemakaian directive .CODE

Smart Code Generation Must Be Enabled


Terdapat suatu perintah yang dikenal oleh suatu processor tertentu dipakai
oleh processor lain

String Too Long


Suatu string yang didefinisikan melebihi 255 karakter

Symbol Already Defined : ____


Suatu simbol yang dipakai dua kali dalam satu program tanpa memakai local

Symbol Already Different Kind


Suatu simbol yang dipakai dua kali dalam satu program, namun simbol
tersebut mempunyai besaran yang berbeda

Text Macro Expansion Exceeds Maximum Line Length


Suatu program terlalu panjang untuk dicompile karena adanya sisipan dari
macro

Too Few Operands To Instruction


Terdapat kekurangan operand dalam suatu instruksi.
Contoh : Sub Ax,

Too Many Errors Or Warning


Kesalahan dan peringatan yang melebihi 100 buah kesalahan
Too Many Initial Values
Melakukan inisialisasi terhadap suatu nilai dengan nilai yang lebih banyak
dari variabel yang ada.
Contoh : XYZ Struc
A1 db ?
A2 db ?
XYZ Ends

Too Many Registers In Expression


Terlalu banyak register dalam suatu pernyataan.
Contoh : Mov Ax,[Bp+Si+Di]

Too Many Uses Register


Menggunakan lebih dari 8 register dalam suatu procedure

Tralling Null Value Assumed


Suatu variabel yang didefinisikan menggunakan DB ataupun DW dan diakhiri
dengan tanda koma sehingga akan dianggap bernilai 0.

Undefined Symbol
Baris program yang memakai simbol yang belum pernah didefinisikan.
Contoh : Mov Ax,Banyak ; Banyak tidak didefinisikan

Unexpected End Of File (No End Directive)


Kesalahan pemakaian directive End.
Contoh : Code_seg Segment
Assume CS:Code
Org 100h
Start :
---
---
Code_seg Ends
End Mulai

Unknow Character
Suatu karakter yang tidak diketahui.
Contoh : Mov Ax,$a

Unmatched Endp : ____


Suatu procedure yang namanya tidak sama pada saat mendeklarasikan dan
menutupnya.
Contoh : A Proc Near
---
---
---
B Endp

Unmatched Ends
Suatu segment yang namanya tidak sama pada saat mendeklarasikan dan
menutupnya.
Contoh : Code Segment
---
---
---
Data Ends

USE32 Not Allowed Without .386


Memakai directive USE32 tanpa memakai .386 terlebih dahulu

User Generated Error


Kesalahan karena dibuat sendiri oleh programmer dengan menggunakan
directive .ERR

Uses Has No Effect Without Language


Kesalahan pemakaian directive USES
Value Out Of Range
Suatu variabel yang menampung bilangan yang lebih besar darinya.
Contoh : A db 400

PESAN KESALAHAN FATAL

Can't Find File


Suatu file yang dipanggil dan file tersebut tidak ada

Can't Locate File


File yang di-include tidak terdapat pada lokasi yang dicari

Error Writing To Listing File


Kesalahan penulisan ke suatu listing file

Error Writing To Object File


Kesalahan penulisan ke file object

File Not Found


File yang akan dicompile tidak ditemukan

File Was Changed Or Deleted While Assembly In Progress


Saat TASM melakukan proses terdapat suatu utility yang menutup atau
menghapus file yang sedang diproses

Insufficient Memory To Process Command Line


Suatu perintah yang memakai lebih dari 64 kb dari memory yang sisa

Internal Error
Terdapat kerusakan pada TASM yang dipakai

Invalid Command Line


Salah mengetikkan instruksi untuk melakukan compile

Maximum Macro Expansion Size Exceeded


Bila Macro yang diselipkan melebihi 64 kb

Out Of Hash Space


Simbol yang didefinisikan telah melebihi 16.384 simbol, untuk
menanggulangi kesalahan ini, dapat memakai command tail /kh.

Out Of Memory
Memory yang dipakai untuk proses compile tidak mencukupi

Out Of String Space


Memory yang dipakai untuk suatu simbol tidak mencukupi

Too Many Errors Found


Ditemukan kesalahan yang melebihi 100 kesalahan dan peringatan

Unexpected End Of File (No End Directive)


Tidak terdapat directive END pada program

You might also like