Professional Documents
Culture Documents
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.
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.
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
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
Contoh :
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).
Contoh :
355 bilangan oktal ke desimal :
( 3 x 82 ) + ( 5 x 81 ) + ( 5 x 80 )
192 + 40 + 5 = 237 Desimal
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
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
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
Bagaimana karakter string "RG 2z" disimpan dalam memori, dengan alamat
awal 0 ?
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
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
Contoh :
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).
Contoh :
355 bilangan oktal ke desimal :
( 3 x 82 ) + ( 5 x 81 ) + ( 5 x 80 )
192 + 40 + 5 = 237 Desimal
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
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
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
Bagaimana karakter string "RG 2z" disimpan dalam memori, dengan alamat
awal 0 ?
Address Contents
0 01010010
1 01000111
2 00100000
3 00110010
4 01111010
Bab IV
DEBUG
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.
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.
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)
3. U (Unassemble)
Berfungsi untuk menampilkan listring dari suatu program bahasa mesin.
Contoh :
A:\>Debug (enter)
-U FFFF:0000 (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)
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
'-'.
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.
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'.
-a 0100
xxxx : 0100 mov AH,FFFF (enter)
xxxx : 010C (enter)
Apa yang terjadi ? Beri alasan !
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.
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
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.
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.
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
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.
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
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'.
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.
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.
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 :
-
INPUT :
AH = 01H
CH = Sel (Garis) Awal Kursor
CL = Sel (Garis) Akhir Kursor
OUTPUT :
Kursor Baru
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
INPUT :
AH = 05H
AL = 0-3 Mode Layar 2,3
0-7 Mode Layar 0,1
OUTPUT :
Active page berubah
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
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
INPUT :
AH = 08H
BH = Nomor Halaman
OUTPUT :
AL = Kode ASCII Karakter (Nilai ASCII yang dibaca)
AH = Warna Karakter (Atribut dari karakter tersebut)
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
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
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 :
-
INPUT :
AH = 0CH
AL = Nilai Warna Titik (0-3)
DX = Nomor Baris Titik (0-199)
CX = Nomor Kolom Titik (0-319, 639)
OUTPUT :
-
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
INPUT :
AH = 0EH
AL = IBM ASCII Code
BL = Foreground Color (Graphic Mode) / Warna Tulisan
BH = Halaman Layar
OUTPUT :
-
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
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 :
INPUT :
-
OUTPUT :
AL = Equipment List
INPUT :
-
OUTPUT :
AX = Besarnya Memory dalam KB
INPUT :
-
OUTPUT :
-
INPUT :
AH = 00
OUTPUT :
-
INPUT :
AH = 01
OUTPUT :
AL = Status
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
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
INPUT :
AH = 04h
AL = Jumlah Sector
CH = Track
CL = Sector
DH = Side
DL = Drive
OUTPUT :
AH = Kode Kesalahan
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
INPUT :
AH = 08h
DL = Drive Harddisk ( 80<= )
OUTPUT :
CH = Track
CL = Sector / Track
DH = Side
DL = Banyak Drive dalam 1 harddisk
INPUT :
AH = 0Ah
DL = Drive Harddisk ( 80<= )
OUTPUT :
-
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
INPUT :
AH = 0Bh
AL = Sector
BX = Offset Data
CH = Track
CL = Sector
DH = Side
DL = Drive ( 80<= )
ES = Segment Data
OUTPUT :
AH = Kode Kesalahan
INPUT :
AH = 0Ch
CH = Bagian Bawah Track
CL = Bagian Atas Track (bit 6 & 7)
DH = Head
DL = Drive ( 80<= )
OUTPUT :
AH = Kode Kesalahan
INPUT :
AH = 0Dh
DL = Drive ( 80h<= )
OUTPUT :
AH = Kode Kesalahan
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)
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
INPUT :
AH = 03h
DX = Nomor Komunikasi
OUTPUT :
AH = Line Status
AL = Status Byte
INPUT :
AH = 00h
OUTPUT :
Carry Flag = 1 , Gagal
= 0 , Berhasil
INPUT :
AH = 01h
OUTPUT :
Carry Flag = 1 , Gagal
= 0 , Berhasil
OUTPUT :
Carry AH = Kode Kesalahan
No Carry AH = 0
DX = Banyaknya Byte Yang Dibaca
INPUT :
AH = 03h
BX = Offset Data
CX = Banyaknya Data Yang Ditulis
ES = Segment Data
OUTPUT :
Carry AH = Kode Kesalahan
INPUT :
AH = 00h
OUTPUT :
AH = Scan Code
AL = ASCII Code
INPUT :
AH = 01h
OUTPUT :
Zero Flag = 1 , Buffer Kosong
Zero Flag = 0 , AH = Scan Code
AL = Kode ASCII
INPUT :
AH = 02h
OUTPUT :
AL = Shift Status
INPUT :
AH = 00h
DX = Nomor Printer
OUTPUT :
Carry AH = Printer Status
INPUT :
AH = 01h
DX = Nomor Printer
OUTPUT :
Carry AH = Printer Status
INPUT :
AH = 02h
DX = Nomor Printer
OUTPUT :
Carry AH = Printer Status
INPUT :
AH = 00h
OUTPUT :
AL = Midnight Flag
CX = Word Atas Dari Waktu
DX = Word Bawah Dari Waktu
INPUT :
AH = 01h
CX = Word Atas Dari Waktu
DX = Word Bawah Dari Waktu
OUTPUT :
AL = Midnight Flag
INPUT :
AH = 02h
OUTPUT :
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)
INPUT :
AH = 03h
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)
DL = Tanda Tengah Malam
OUTPUT :
-
INPUT :
AH = 04h
OUTPUT :
CH = Abad (BCD)
CL = Tahun (BCD)
DH = Bulan (BCD)
DL = Hari (BCD)
INPUT :
AH = 05h
CH = Abad (BCD)
CL = Tahun (BCD)
DH = Bulan (BCD)
DL = Hari (BCD)
OUTPUT :
-
INPUT :
AH = 06h
OUTPUT :
CH = Jam (BCD)
CL = Menit (BCD)
DH = Detik (BCD)
INPUT :
AH = 07h
OUTPUT :
-
INPUT :
-
OUTPUT :
-
OUTPUT :
-
INPUT :
-
OUTPUT :
-
INPUT :
-
OUTPUT :
-
INPUT :
-
OUTPUT :
-
DOS INTERRUPT
INPUT :
-
OUTPUT :
Program Berakhir
INPUT :
AH = 00H
CS = merujuk ke PSP
OUTPUT :
-
INPUT :
AH = 01H
OUTPUT :
AL = Kode ASCII Hasil Input Tercetak di layar
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)
INPUT :
AH = 04
DL = Kode ASCII Karakter Yang Dikirim
OUTPUT :
-
INPUT :
AH = 05
DL = Kode ASCII Karakter Yang Dikirim
OUTPUT :
-
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
INPUT :
AH = 08H
OUTPUT :
AL = Kode ASCII Yang Ditekan
INPUT :
AH = 09H
DS = Segment Variabel Yang Akan Dicetak
DX = Offset Variabel Yang Akan Dicetak
OUTPUT :
Kalimat Tercetak Di Layar
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
INPUT :
AH = 0BH
OUTPUT :
AL = FFh, jika ada karakter dalam buffer,
AL = 00h, jika tak ada karakter dalam buffer keyboard.
INPUT :
AH = 0CH
AL = Function Keyboard Masukan Pertama (Number)
OUTPUT :
-
OUTPUT :
-
INPUT :
AH = 0EH
DL = Drive Number Yang Akan Diaktifkan
(0=A, 1=B, 2=C, dst)
OUTPUT :
Ganti Drive Aktif (Banyak drive)
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)
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
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
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)
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
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
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)
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.
INPUT :
AH = 19H
OUTPUT :
AL = Default Drive Yang Sedang Aktif (0=A, 1=B, 2=C dst)
INPUT :
AH = 1AH
DS:DX = Lokasi DTA (Disk Transfer Address) Yang Baru
OUTPUT :
-
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)
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)
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
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)
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)
INPUT :
AH = 25H
DS:DX = Address dari rutin interrupt handling (Alamat Baru)
AL = Nomor Interrupt
OUTPUT :
-
INPUT :
AH = 26H
DS:DX = Nomor Segmen Untuk Segmen Baru
OUTPUT :
-
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
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
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)
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)
OUTPUT :
CH = Jam (0-23)
CL = Menit (0-59)
DH = Detik (0-59)
DL = Perseratus/Mikro Detik (0-99)
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)
OUTPUT :
-
INPUT :
AH = 2FH
OUTPUT :
ES:BX = Alamat DTA yang sedang aktif
INPUT :
AH = 30H
OUTPUT :
AL = Bilangan mayor dari bilangan versi
AH = Bilangan minor dari bilangan versi
BX = 0000h
CX = 0000h
OUTPUT :
-
INPUT :
AH = 33h
AL = 00h cek status Ctrl-Break (Ambil keterangan Ctrl-Break)
OUTPUT :
DL = Nilai Status (00h=Off, 01h=On)
INPUT :
AH = 35h
AL = Interrupt Number
OUTPUT :
ES : BX = Mengacu ke rutin interrupt handling (Interrupt
Vector)
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
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
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
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
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
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)
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
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)
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)
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)
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)
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)
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)
INPUT :
AH = 45H
BX = File Handle Yang Diduplikatkan
OUTPUT :
AX = File Handle Baru (No Carry)
AL = Kode Kesalahan (Carry)
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
INPUT :
AH = 48H
BX = Paragraf Yang Dipesan
OUTPUT :
AX = Kode Kesalahan
BX = Paragraf Maksimum
INPUT :
AH = 49H
ES = Alamat Segment dari memory yang akan dibebaskan
OUTPUT :
AX = Kode Kesalahan
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
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)
INPUT :
AH = 4CH
OUTPUT :
-
INPUT :
AH = 4DH
OUTPUT :
AX = Kode Kesalahan
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
INPUT :
AH = 4FH
OUTPUT :
AX = Kode Kesalahan (Carry)
No Carry = DTA berisi keterangan file
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
INPUT :
AH = 54h
OUTPUT :
AL = 0 Verify Flag Off
= 1 Verify Flag On
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
ADDRESS VECTORS
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
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
- Error Unknown
NO. INTERRUPT = 27h
NO. SERVICE = -
FUNCTION = Membuat Suatu Program Menjadi Memori Resident (Terminate
And Stay Resident)
.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
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).
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
Arithmetic Overflow
Baris program yang melakukan operasi aritmatik melebihi besaran
operandnya,
Contoh : Mov AX,2000h*10
Data2 Segment
Ambil db ?
Data2 Ends
SegDua Segment
B: Mov AX,B-A
SegDua Ends
Seg1 Segment
Assume CS:Seg1
Org 100h
Code2 Segment
Seg Label Byte
Code2 Ends
Bg Proc Far
Mov AX,Vae
Data Segment
Vae Dw ?
Illegal Immediate
Kesalahan pada operand dari tata penulisan.
Contoh : Mov 10,AX
Illegal Instruction
Kesalahan intruksi yang tidak dikenal
Illegal Number
Terdapat angka yang tidak sesuai dengan tata angka.
Contoh : Mov AX,0eadjh ; j bukan angka
Illegal Radix
Kesalahan pendefinisian directive radix.
Missing Argument Or (
Lupa memberikan suatu argument atau tanda (.
Contoh : Ifb
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
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
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
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
Undefined Symbol
Baris program yang memakai simbol yang belum pernah didefinisikan.
Contoh : Mov Ax,Banyak ; Banyak tidak didefinisikan
Unknow Character
Suatu karakter yang tidak diketahui.
Contoh : Mov Ax,$a
Unmatched Ends
Suatu segment yang namanya tidak sama pada saat mendeklarasikan dan
menutupnya.
Contoh : Code Segment
---
---
---
Data Ends
Internal Error
Terdapat kerusakan pada TASM yang dipakai
Out Of Memory
Memory yang dipakai untuk proses compile tidak mencukupi