TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf
-
Upload
fitra-khan -
Category
Documents
-
view
21 -
download
1
Transcript of TUGAS_SO_1411600958_MUHAMAD_FITRA_SYAWAL.pdf
Page 0 of 48
Dosen :
Dr. Krisna Adiyarta Musodo, S. Kom, M.Sc
NIM : 1411600958
NAMA : MUHAMAD FITRA SYAWAL
KELOMPOK : XM
PENGENALAN INSTRUKSI – INSTRUKSI
DALAM DEBUG DAN INTERRUPT
TUGAS SISTEM OPERASI
Page 1 of 48
TUGAS SISTEM OPERASI
NIM : 1411600958 - NAMA : MUHAMAD FITRA SYAWAL
PENGENALAN DEBUG
Debug adalah suatu program yang berguna untuk menguji suatu program dengan cara melacak
instruksi demi instruksi dari awal hingga akhir program. Setiap eksekusi satu instruksi dapat
dilihat perubahan yang terjadi pada isi suatu memori atau register yang ada hubungannnya dengan
instruksi yang telah dilaksanakan tersebut.
Dalam Arti lain Debug adalah suatu utiliti dalam DOS yang digunakan untuk membuat
pemrograman assambler dengan format ekstensi COM.
– Debug Hanya dapat membuat program dengan extension *.COM karena karakteristik sifat
program ini :
1. program tidak lebih besar 64 K dan
2. Program harus dimulai dgn displacment, offset, atau 0100H memory direction didalam
segment tertentu (spesific)
– Kumpulan perintah debug:
A : merakit intruksi simbolik Æ kode mesin
D : menampilkan isi suatu daerah memori
E : memasukan data ke memori, dimulai pada lokasi tertentu
G : run executable program ke memori
N : menamai program
P : ekskusi sekumpulan instruksi yang terkait
Q : quit
R : menampilkan isi satu atau lebih registers
T : trace isi sebuah instruksi
U : unassembled kode mesin ke kode simbolik
W : menulis program ke disk
– Dengan debug menjadi visualisasi nilai registers internal dari CPU
• Memulai debug:
C:/>debug[enter]
KEL :
XM
Page 2 of 48
Hyphen (garis sambung) yang Saudara lihat dalam jawaban atas perintah Saudara adalah
simbol promt debug. Hal ini berarti menunggu perintah atau instruksi.
Adapun perintah atau instruksi debug adalah:
1. A - Assemble
Format : A [address]
Address : alamat untuk memulai membuat program, nilai default-nya CS:OlOO.
Tujuan : untuk membuat program-program secara langsung ke memori.
Contoh : - A 100
0768:100
Catatan : tombol Enter akan meneruskan baris berikutnya dari program, jika
sudah selesai membuat program, tekan Enter pada baris yang kosong
untuk kembali ke promt DEBUG.
2. C - Compare
Tujuan : membandingkan data pada alamat tertentu.
Format : C range address
range : daerah yang akan dibandingkan.
address : awal alamat untuk memulai melakukan perbandingan, default-nya
OS.
Contoh : C CS:lOO LOFCS:II0 melakukan perbandingan sebanyak 16 byte,
bermula dari Alamat CS:l00 dengan 16 byte berikutnya.
3. D- Dump
Tujuan : melihat data yang ada dalam memori
Format : D [address] atau D [range]
[address] : alamat yang akan ditampilkan, jika kita tulis 0 tanpa alamat, maka
default- nya Menjadi CS:l00,sedangkan jika kita tulis alamat tertentu,
maka segmentnya DS.
[range] : daerah yang akan ditampilkan
Contoh : DO L50 tampilkan 80 byte dari memori, berawal dati DS:O
Page 3 of 48
4. E - Enter
Tujuan : memasukkan atau mengganti data ke dalam memori.
Format : E address [list]
address : dimana kita akan memasukkan data (dalam byte), default-nya
[list] : daftar byte atau data yang akan di masukkan
Contoh : E DS:I0 'DATA PRO' 0 masukan kata DATA PRO diikuti angka O.
5. F - Fill
Tujuan : isi daerah tertentu dengan data yang ditentukan.
Format : F range list
range : daerah yang akan diisi data.
list : data yang akan dimasukkan
Contoh : F B800:0 LFAO 'X' 07 isi alamat color graphic adapter dengan
Karakter 'X' pada putih di atas hitam
6. G - Go
Tujuan : untuk menjalankan program yang ada dalam memori.
Format : G [=address][address[address ...]]
[=address] : jika didefinisikan, program yang akan dijalankan dimulai dari
CS:address.
[address[address ...]] : alamat penghentian jalannya program (minimal 10).
Contoh : 1. G =200 240 jalankan program mulai dari CS:200, dan
hentikan pada alarnat CS:240.
2. G
A
Program terminated normally
7. H - Heksadesimal
Tujuan : untuk menjumlah dan mengurang dua bilangan heksadesimal
Format : H value value
Contoh : H 4200 21A2, hasilnya 63A2 205E
8. I - Input Tujuan Format
Tujuan : membaca dan menampilkan data dari port
Format : port address
Page 4 of 48
9. L - Load
Tujuan : masukkan data dari sektor ke memori
Format : L address drive sektor sektor
Address : alamat yang akan dipakai, default-nya CS.
Contoh : L DS:O 0 5 1 masukkan sektor direktori drive A ke memori
L - Load
Tujuan : baca file,setelah menentukan nama file,
Format : L [ address]
Address : alamat yang akan dipakai.defaul-nya CS : 1.00.
10. M - Move
Tujuan Format : Copy data tertentu ke alamat tertentu.
range : M range address
address : daerah yang akan di copy alamat tujuan data
Contoh : M BOOO:AO copy tiga baris pertama dari RAM video
monochrome ke baris berikutnya.
11. N - Name
Tujuan : Ubah atau defmisikan nama file
Format : N [d:][path] nama fIle [ ext]
[d: ] [path]nama file [ ext] : nama file yang akan di akses ke drive.
12. Output
Tujuan : kirim data ke port
Format : 0 port address byte
13. Proceed
Tujuan : sama seperti Trace, hanya menjalankan fungsi call, loop,
interrupt. atau gabungan beberapa intruksi menjadi satu
intruksi.
Format : p [=address][ value]
[=address] : awal pencarian kesalahan (trace), defaul-nya CS:IP [value
[=banyaknya intruksi yang akan dijalankan.
Page 5 of 48
14. Q-Quit
Tujuan : keluar dari DEBUG tanpa melakukan perekaman.
Format : Q
Contoh : - Q
A >
15. R-Register
Tujuan : menampilkan dan ubah isi dari regester.
Format : R [nama register]
Contoh : RCX tampilkan dan perbaiki isi regester CX.
Untuk mengetahui isi masing-masing register maka ketik R, Ialu tekan enter.
Contoh:
-R
AX=OOOO BX=OOOO CX=OOOO OX=OOOO SP=FFEE BP=OOOO SI=OOOO
01=0000
OS=3970 ES=3970 SS=3970 CS=3970 IP=Oloo NV UP 01 PL NZ AC PE
NC
3970:0100 C020 INT20
16. S-Search
Tujuan : cari suatu data dalam memori.
Format : S range list
Range : data yang dieari.
Contoh : S CS:l00 L 100 'DATA PRO' mencari kata 'DATA PRO' pada
256 byte pertama.
17. T-Trace
Tujuan : menjalankan program sambil menampilkan register yang
dipakai.
Format : T {=addres][ value]
carian kesalahan,default-nya CS:IP [valuel=banyaknya
intruksi yang akan di jalankan.
Contoh : T=102 3 periksa tiga intruksi pertama, dimulai dari alamat
CS:102. Control lain lagi untuk memproses sebaris program
saja dengan mengetik T, yaitu :
Page 6 of 48
- T
- T
AX=OCOI BX=092A CX=OOOO OX=OOOO SP=FFEE BP==OOOO SI=OOOO
01=0000
OS=3756 ES=3756 SS=3756 CS=3756 IP=OI02 NV UP 01 PL NZ AC
PE NC
3756:0102 AC LOOSB
18. U-Unassemble
Tujuan : tampilkan program yang sudah ada.
Format : u [address] atau U [range]
[address] : alamat awal program yang akan ditampilkan, alamat
defaultnya adalah setelah perintah U sebelurnnya.
Jika belum pemah menulis peritah U, maka defaulnya CS:OlOO. [range] = daerah
yang akan dilihat, defaulnya CS
Contoh : U CS:lOO tampilkan program mulai dari alamat awal CS:lOO.
Catatan : Setiap kali kita mengetik U dan menekan Enter, maka yang
akan di- tampilkan adalah program sepanjang 21 heksadesimal.
Contoh:
-U 100
3970:0100 CD21 INT 21
3970:0102 CD20 INT 20
3970:0104 D98D460250B8 ESC 09,{DI+0246][DI+B850]
3970:010A 8DOO LEA AX, [BX+SI]
3970:01OC 50 PUSH AX
3970:01OD E82A23 CAL 243A
3970:0110 8BES MOV SP,BP
3970:0112 83C41A ADD SP,+IA
3970:0115 5D POP BP
3970:0116 C3 RET
3970:0117 55 PUSH BP
3970:0118. 83EC02 SUB SP,+02
3970:011B 8BEC MON BP,SP
3970:011D 823EOEOOOO CMP BYTE PTR [OOOE],00
Page 7 of 48
Untuk menentukan sendiri panjang program yang ingin Saudara lihat dapat
digunakan perintah L (length) dibelakang U dan format penulisannya adalah:
U [address awal] L [panjang program]
Contoh : -U 100 L OA
3985:0100
3985:0102
3985:0105
3985:0108
3985:010A
B241
B90AOO
E8F8oo
E2FB
CD20
MOV
MOV
CALL
LOOP
!NT
DL,41
CX,OOOA
0200
0105
20
19. W - Write
Tujuan Format : menulis program dan data ke dalam disket.
address : W address drive sektor sektor
Contoh : alamat awal yang akan di tulis ke dalam disket. W DS: 005
1 tulis sektor direktori ke drive A
W - Write
Tujuan : tulis program yang sudah dibuat ke dalam disket. W address
Format : alamat awal yang akan ditulis, default-nya CS
Page 8 of 48
Untuk menampilkan semua instruksi pada debug adalah tambahkan tanda Tanya
Disebelah strip (“-“) ? maka akan muncul tampilan dibawah ini
Contoh debug register:
Seluruh isi registers internal ditampilkan atau dgn menggunakan parameter nama
register,misal :
- rbx
Hasil eksekusi :
BX 0000
:
Page 9 of 48
akan ditampikan isi register BX dan indikator debug berubah dari “-” menjadi
“:” (ini berarti kita dapat mengisi nilai baru dari register BX (masukan nilai +
enter), atau kita tetap mempertahankan nilai lama (tekan langsung enter tanpa
mengetik nilai)
Contoh Mencetak Karakter A
Keterangan :
-a100 : Untuk memulai program di alamat offset 100
mov ah,02 : Memasukkan nilai 02h ke register AH sebagai nilai Service
mov dl,41 : Memasukkan nilai 41 ( "A" ) ke register DL
int 21 : Eksekusi
int 20 : Program dihentikan
rcx : untuk mengubah nilai registes CX dgn nilai yg diperoleh dari ukuran file
: menjadi 000a
8
n coba.com : menamai program dengan coba.com
w : menyimpan file
Page 10 of 48
Keterangan :
-U100 : berfungsi untuk menampilkan listing program bahasa mesin yang telah
Dibuat
Contoh mencetak Karakter beserta Atribut
Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk
itu anda bisa menggunakan interupsi ke 10h dengan aturan pemakaiannya :
INPUT
AH = 09h
AL = Kode ASCII dari karakter yang akan dicetak
BH = Nomor halaman(0 untuk halaman 1)
BL = Atribut atau warna dari karakter yang akan dicetak
CX = Banyaknya karakter tersebut akan dicetak
Setelah semua register dimasukkan nilainya maka lakukanlah interupsi 10h. Perlu kita perhatikan
bahwa interupsi ini mencetak karakter tanpa menggerakkan kursor.
1. Langkah pertama adalah menjalankan debug, sama seperti langkah sebelumnya.
Page 11 of 48
2. Kemudian masukkan set instruksi :
3. Setelah memasukkan instruksi seperti diatas, maka akan menghasilkan output cetakan huruf
A sebanya 3 kali dengan latar belakang biru dan dengan warna atribut cyan.
4. Instruksi mov al,41 artinya mengisikan kode ASCII A
5. Mov bh,00 artinya adalah mengatur mode halaman
6. Mov bl,93 artinya adalah mengatur warna tampilan yang akan dicetak
7. Mov cl,3 artinya berapa banyak nilai pengulangan yang akan dicetak.
8. Int 10, adalah perintah untuk mengeksekusi perintah.
9. Int 20 berarti program siap dijalankan dan kembali ke DOS.
10. Kemudian periksa panjang program dengan perintah RCX, dan akan terlihat sebagai
berikut:
- RCX
CX 0000
: 8
11. Isi kursor dengan angka 8 kemudian Enter. Beri nama program dengan perintah N
(Name) yang bernama coba.com, seperti berikut:
- n coba.com
12. Lihat kembali awal program dengan perintah RIP, apakah berisi 0100, jika tidak maka
isilah dengan angka tersebut:
- RIP
IP 0102
:100
Page 12 of 48
13. Gunakan perintah W (Write) untuk menulis ke disk computer, seperti dibawah ini:
- W
Writing 0008 bytes
14. Untuk memproses program (compile) gunakan perintah G (Go)
- G
AAA
Program terminated normally
Output program tersebut adalah huruf A. Dijelaskan pula, bahwa program berhenti secara
normal.
PENGENALAN INTERRUPT
- Interupsi adalah suatu permintaan khusus pada mikroprocessor untuk melakukan
sesuatu, jika terjadi interupsi maka computer akan menghentikan dahulu apa
yang sedang dikerjakan dan melakukan apa yang diminta oleh yang menginterupsi.
- Interrupt merupakan sub rutin yang sudah tersedia dalam memori komputer
- Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi
nomor 0 s/d 255.
- Nomor interupsi 0 s/d 1Fh disediakan oleh ROM BIOS yaitu suatu IC di dalam
komputer yang mengatur operasi dasar komputer.
- Jadi jika terjadi interupsi dengan nomor 0 s/d 1Fh maka secara default komputer
akan beralih ke ROM BIOS dan melaksanakan program yang terdapat disana.
- Program yang melayani suatu interupsi dinamakan Interrupt Handler
Cara penggunaan
int [no int]
Jenis-Jenis Interrupts
• Internal HW interruptions
a. Ditimbulkan/digenerasi oleh peristiwa tertentu yang terjadi pada waktu/selama
eksekusi program
b. Diatur oleh HW dan tidak mungkin diubah
c. Contoh: tipe interrupt u/ counter clock internal; HW call interrupt ini u/
memaintance “time to date”
Page 13 of 48
• External HW interupstions
a. Ditimbulkan/digenerasi oleh devais peripheral, mis keyboard, printers, dsb.
b. Biasa juga ditimbulkan/digenerasi oleh Co-prosessor
c. Tidak mungkin mendeaktifkan
Tidak dikirim langsung ke CPU, melainkan ke IC yang memiliki fungsi u/
menghandle secara eksklusive interrupts ini. (IC = PIC8259A, yg dikontrol
oleh CPU dgn menggunakan urutan komunikasi = PATH Control
• Software interruptions
a. Diaktifkan langsung oleh assembler melalui sejumlah interuosi yg diharapkan dgn
instruksi INT
b. Terdapat dua jenis:
• DOS interruptions
• BIOS interupstions
a. PerbedaannyaDOS int. lebih mudah digunakan, namun lebih lambat, karena int.
jenis ini menggunakan BIOS, BIOS int. lebih cepat, namun
i. banyak kerugiannya karena BIOS bagian HW dan HW-specific
b. Pemilihan interupts tergantung pada karakteristik yang akan kita berikan
pada program: SPEED = BIOS int; PORTABILITY = DOS int.
Ada 2 macam Software Intterrupt :
1. Vektor Interrupt ROM BIOS
Interrupt 00h - 1Fh (0-31) adalah interrupt BIOS dan standar di semua komputer baik
yang menggunakan sistem operasi DOS atau bukan. Lokasi Interrupt Vector table-nya
ada di alamat absolut 0000h-007Fh
Interrupt BIOS dibawah ini telah dipastikan kegunaannya oleh sistem untuk keperluan
khusus tidak boleh diubah oleh program seperti lainnya
1. DEVIDE BY ZERO Jika terjadi pembagian dengan nol maka proses akan segera
dihentikan
2. SINGLE STEP Untuk melaksanakan/mengeksekusi instruksi
satu per satu
3. NMI Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak
dapat dicegah
Page 14 of 48
4. BREAK POINT Jika suatu program menyebabkan overflow flag menjadi 1,
interrupt ini akan melayani pencegahannya
dan memberi tanda error
2. Interrupt DOS
Interrupt 20h-FFh (32 - 255) adalah interrupt DOS, dan hanya ada pada komputer
yang menggunakan sistem operasi DOS dan
interrupt handlernya di-load ke memori oleh DOS pada saat
DOS digunakan. Lokasi Interrupt Vector table-nya ada di alamat absolut 07Fh-3FFh
1. Vektor Interrupt ROM BIOS
definisi : interrupt yang disediakan oleh BIOS ( int 0 sampai int 1Fh)
NO Service Fungsi
INT 5 - tombol print screen
INT 9 - Saat tombol keyboard ditekan, KB mengirim sandi lacak ke
CPU bukan ke karakter ASCII
INT 10 0 Mengubah mode video pada register AL
0-6 = layar grafik, 7 = layar monochrom register input :
AH=00, AL=nomor mode video
Contoh : Mov
AL,5
Mov AH,0
Int 10 1 Mengubah ukuran cursor
Register input : AH=01h, CH=awal garis bentuk cursor,
CL=akhir garis bentuk cursor.
Contoh :
Mov CH,0
Mov CL,7 ; cursor jadi satu blok penuh
Mov AH,1
Int 10
Page 15 of 48
2 Mengubah posisi kursor
Register input : AH=02h, BH=nomor halaman tampilan, DH
nomor baris (dimulai 00), DL=nomor kolom (dimulai 00)
Contoh : Mov
BH,0
Mov DH,7 ; baris (0..24)
Mov DL,8 ; kolom (0..79) Mov
AH,2
Int 10
3 Cari posisi cursor dan ukurannya
Register input : AH=03h, BH=nomor halaman tampilan
Register output : CH=awal garis bentuk cursor, CL=akhir
garis bentuk cursor , DH
nomor baris (dimulai 00), DL=nomor kolom
(dimulai 00)
Contoh :
Mov BH,0
Mov AH,3
Int 10 6 Scroll up window
Register input : AH=06h, AL=jumlah baris untuk digulung,
BH=atribut untuk baris kosong, CH,CL=koordinat kiri atas
window, DH,DL=koordinat kanan bawah
Contoh :
Mov AL,3 ; jumlah baris
Mov CL,3
Mov CH,1
Mov BH,0
Mov DL,8
Mov DH,3
Mov BH,0
Mov AH,06h
Int 10
7 Scroll down window
Register input sama dengan service 6
Page 16 of 48
8 Melihat nilai karakter ASCII yang ada di layar. Cara :
• Atur posisi cursor dengan fungsi 3
• Atur BH dengan nomor halaman 0
• Isi AH dengan 08h
• Jalankan int 10
• AL =Nilai ASCII, AH=atribut
INT 11 - Equipment check di BIOS pada alamat
410h(40:100) Register
output : AX Posisi bit :
0=1 jika ada drive
1=tidak dipakai
2,3=info RAM
4-5=mode service 01Æ 25x40,
10Æ25x80,11Æmonochrom
6-7=jumlah drive
8= tidak dipakai
9,A,B=jumlah port serial C=1
jika ada game port D= tidak
dipakai E,F=jumlah port parallel
INT 16 00 Menunggu masukan keyboard
Register input : AH=00h
Register output : jika AL=0 maka AH=kode extended
Jk AL <>0, mk AL=kode ASCII, AH-kode scan
01 Mengecek isi keyboard buffer
Register input : AH=01h
Register output : ZF=0 jika ada penekanan tombol. jika AL=0
maka AH=kode extended, Jika AL <>0, maka AL=kode
ASCII, AH-kode scan
INT 19 - Melakukan Warm Boot
Page 17 of 48
PENGENALAN KEGUNAAN INTERRUPT DALAM BIOS .
Interrupt 0
Kegunaan: Devide By 0
Interrupt ini hampir tidak pernah digunakan dalam program. Interrupt 0 akan mencetak
‘Devide Overflow’ dan menghentikan proses program bila prosessor melakukan pembagian
dengan 0.
Interrupt 1
Kegunaan: Single Step
Interrupt 1 juga tidak pernah digunakan dalam program, kecuali program-program Debug
seperti DEBUG.COM dan DOS, Turbo Debuger dan Borland dan lain-lain. Interrupt 1 akan
menganalisa langkah per langkah dan proses suatu program.
Interrupt 2
Kegunaan: Non Maskable Interrupt (NMI)
Interrupt ini berguna untuk mengecek perangkat memory yang terpasang, bila ternyata
terjadi kesalahan maka interrupt ini akan melakukan pencetakan kata PARITY CHECK 2.
Interrupt ini tidak dapat dihentikan prosesnya dengan mengeset Interrupt Flag menjadi 1
Interrupt 3
Kegunaan: Break Point
Interrupt ini juga jarang dipakai pada program. Namun seperti halnya interrupt 1, interrupt 4
ini mutlak dipakai dalam program- program debugger. Interrupt ini berguna untuk
menghentikan program bila suatu program debug melaksanakan perintah Go.
Interrupt 4
Kegunaan: Overflow
Seperti Interrupt 0, Interrupt 4 ini akan bekerja bila ternyata kondisi menunjukkan overflow.
Interrupt 5
Kegunaan: Print Screen
Bila kita menjalankan Interrupt 5h ini, maka semua yang terdapat di layar akan tercetak ke
printer. Interrupt 5h ini juga akan dipanggil bila kita menekan tombol Print Screen yang
terdapat pada keyboard.
Page 18 of 48
Interrupt 6 & 7
Kegunaan: Kosong
Interrupt 8
Kegunaan: Time Of Day
Interrupt ini bertugas untuk menjaga waktu yang terdapat pada PC, dipanggil sebanyak 18.2
kali setiap detik. Jika tanggal pada PC akan diganti, maka interrupt ini akan melakukannya.
Interrupt ini akan memanggil Interrupt 1C hexa setiap kali dipanggil.
Interrupt 9
Kegunaan: Keyboard
Interrupt ini bertanggung jawab atas masukan dan keyboard. Interrupt ini akan dipanggil dan
menerjemahkan masukan dan keyboard menjadi scan code dan ASCII code dan diletakkan
di suatu buffer yang disebut dengan Keyboard Buffer.
Interrupt OAh
Kegunaan: Kosong
Interrupt OBh dan OCh
Kegunaan: Comunication
Kedua interrupt ini berguna untuk menangani masukan dan keluaran melalui alat
komunikasi.
Interrupt ODh
Kegunaan: Printer Alternate
Interrupt ODh menangani printer alternate.
Interrupt OEh
Kegunaan: Disket
Interrupt OEh merupakan suatu generator disk.
Interrupt OFh
Kegunaan: Printer
Interrupt OFh merupakan suatu generator printer.
Page 19 of 48
Interrupt 10h
Kegunaan: Video Handling
Interrupt 10h Service 0h
Kegunaan: Set Screen Mode
Fungsi 0h dan Interrupt 10h berguna untuk mengeset mode layar yang diinginkan.
Mode layar terdiri atas:
Mode Bentuk
0 40 * 25 hitam putih
1 40 * 25 berwarna
2 80 * 25 hitam putih
3 80 * 25 berwarna
4 320 * 200 berwarna
5 320 * 200 hitam putih
6 640 * 200 berwarna
7 80 * 25 monokrom (untuk layar monokrom)
Input: Output:
AH = 0 Tidak ada
AL = Mode layar
Interrupt 10h Service 01h
Kegunaan: Set Cursor Type
Fungsi ini berguna untuk mengeset tipe kursor yang sedang aktif. Untuk menghilangkan
kursor, bit kelima dan CH harus berisikan 1.
Input: Output:
AR = Olh Tidak ada
CH = Garis mulai kursor
CL = Garis akhir kursor
Page 20 of 48
Interrupt 10h Service 02h
Kegunaan: Set Cursor Position
Fungsi ini berguna untuk mengatur letak kursor pada layar.
Input: Output:
Ah = 02h Tidak ada
DH = Bans layar
DL = Kolom layar
Bh = Halaman layar
Interrupt 10h Service 03h
Kegunaan: Find Cursor Position & Type
Fungsi ini berguna untuk mengambil posisi kursor pada layar, beserta tipe kursor tersebut.
Input: Output:
AH = 03h DH = Baris layar
BR = Ralaman layar DL = Kolom layar
CH = Garis awal kursor
CL = Garis akhir kursor
Interrupt 10h Service 04h
Kegunaan: Read Light Pen Position
Fungsi mi berguna untuk mengambil posisi light pen.
Input: Output:
AH = 04h AH = 0 — Light Pen tidak ada
AH = 1 — Light Pen ada dan posisi
pada DH = baris
DL = kolom
Interrupt 10h Service 05h
Kegunaan: Set Aktive Display Page
Fungsi ini berguna untuk mengaktifkan halaman layar.
Input: Output:
AR = 04h Tidak Ada
AL = 0 — 3 Mode layar 2,3
= 0 — 7 Mode layar 0,1
Page 21 of 48
Interrupt 10h Service 06h
Kegunaan: Scrool Active Page Up
Fungsi mi akan menghapus isi layar ke atas, warna yang dihapus akan diletakkan di nible
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: Output:
AL = Jumlah baris yang dihapus Tidak ada
0= semua).
CH,CL = Baris, Kolom titik atas daerah yang dihapus
DH,DL = Baris, Kolom titik bawah daerah yang dihapus
Bh = Warna layar yang muncul
AH = 06h
Page 22 of 48
Interrupt 10h Service 07h
Kegunaan: Scrool Active Page Down
Fungsi ini berguna untuk menhapus layar secara ke bawah.
Input: Output:
AH = 07h Tidak ada
CH,CL = Baris, Kolom titik atas
daerah yang akan dihapus
DH,DL = Baris, Kolom titik bawah
daerah yang akan dihapus
BH = Warna layar yang muncul
AL = banyaknya bans yang dihapus
(0 = semua)
Interrupt 10h Service 08h
Kegunaan: Read Character And Attribute
Fungsi mi berguna untuk membaca warna dan karakter yang terdapat pada posisi kursor.
Input: Output:
AH =08h AH =Warna tulisan
BH = Halaman layar AL = Kode ASCII tulisan
Interrupt 10h Service 09h
Kegunaan: Write Karakter And Attribute
Fungsi mi berguna untuk mencetak karakter dengan warna pada posisi kursor. Di sini
karakter yang dicetak menurut Tabel IBM ASCII, bukan Tabel ASCII.
Input: Output:
AH = 09h Tidak ada
AL = Kode ASCII
BR = Halaman layar
BL = Warna karakter
CX = Banyaknya karakter yang akan dicetak
Page 23 of 48
Interrupt 10h Service 0Ah
Kegunaan: Write Character
Fungsi mi berguna untuk mencetak sebuah karakter di posisi kursor. Di sini karakter yang
dicetak adalah menurut Tabel IBM ASCII, bukan Kode ASCII. Berbeda dengan service 09h,
service mi hanya mencetak dalam warna 07h (putih di atas hitam) pada mode layar teks dan
mencetak dengan warna pada mode layar grafik.
Input: Output:
AR = OAh Tidak ada
AL = Kode ASCII
BH = Halaman layar
CX = Banyaknya karakter yang dicetak
BL = Warna (untuk grafik)
Interrupt lOh Service OBh
Kegunaan: Set Color Palette .
Fungsi ini berguna 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 warna dasar dan 4 bit untuk warna border. Adapun ke-16 warna
tersebut adalah:
0 = Hitam
1 = Biru
2 = Hijau
3 = Cyan
4 = Merah
5 = Magenta
6 = Cokiat
7 = Putih 8 = Gray
9 = Biru Terang
10 = Hijau terang
11 = Cyan terang
12 = Merah terang
13 = Magenta terang
Page 24 of 48
14 = Kuning
15 = Putih bersinar
Bila register BH berisikan 1, maka pilihan register BL hanya dua
yaitu:
0 untuk Hijau/Merah/Coklat
1 untuk CyanlMagenta/Putih
Input: Output
AH = OBh tidak ada
BH = Kode palette
BL = Kode warna
Interrupt 10h Service OCh
Kegunaan: Write Pixel Dot
Fungsi mi berguna untuk mencetak sebuah titik di layar grafik.
Input: Output
AH= 0Ch tidak ada
AL = warna titik
CX = kolom titik
DX = baris titik
Interrupt lOh Service ODh
Kegunaan: Read Pixel Dot
Fungsi ini berguna untuk membaca titik yang terdapat di warna layar grafik.
Input: output
AH = ODh AL = warna titik
CX = Kolom titik CX = colom titik
DX = Baris titik DX = baris titik
Interrupt 10h Service 0Eh
Kegunaan: TTY Character Output
Fungsi mi berguna untuk mencetak karakter dan tabel ASCII ke layar.
Input: Output:
AH = OEh Tidak ada
Page 25 of 48
AL = Kode ASCII
BH = Halaman layar
BL = Warna tulisari (pada layar grafik)
Interrupt 10h Service 0Fh
Kegunaan: Get Current Aktive Page
Fungsi mi berguna untuk mengambil halaman layar yang sedang aktif pada saat interrupt mi
dijalankan.
Input: Output:
AH = OFh AH = Lebar layar
AL = Mode layar
BH = Halaman layar yang aktif
Interrupt 11h
Kegunaan: Get Equipment List
Interrupt 11h berguna 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 modem
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 di Motherboard
1 NDP (Co-Processor 8087)
0 Disk Drive
Input: Output:
Tidak Ada AL = Equipment List
Page 26 of 48
Interrupt 12h
Kegunaan: Get Memory Size
Interrupt 12h ini berguna untuk mengambil besarnya memory induk (base memory) yang
terdapat pada komputer.
Input: Output:
Tidak Ada AX = Besarnya memory dalam KB
Interrupt 13h
Kegunaan: Disk Function
Interrupt 13h Berguna untuk mengatur operasi disk.
Interrupt 13h Service 0h
Kegunaan: Reset Disk Drive
Fungsi 0h dan Interrupt 13h berguna untuk melakukan Reset terhadap suatu disk drive.
Input: Output:
AH = 0 Tidak Ada
Interrupt 13h Service 01h
Kegunaan: Get Floppy Disk Status
Fungsi mi berguna untuk mengetahui apakah terjadi kesalahan pada disk. Adapun kesalahan
pada disk tersebut adalah:
Isi Disket/Hard disk Arti
0(0) SEMUA Tidak ada error
1(1) SEMUA Kesalahan Parameter Disket (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) Hard disk Reset gagal (Reset failed)
6(6) DISKET Disket dipindahkan (Diskette was removed)
7(7) Hard Disk 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)
A(10) Hard Disk Bad Sector Flag 10(16) SEMUA kesalahan CRC atau ECC pada saat baca
(CRC or ECC error on disk read)
Page 27 of 48
11(17) Hard Disk Data yang dibenarkan dan 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) Hard Disk Drive not ready
BB(187) Hard Disk Undefined Error
CC(204) Hard Disk Write fault
E0(224) Hard Disk Status Error
Input: Output:
AH = 1 AL = Status
Interrupt 13h Service 02h
Kegunaan: Read Disk Sectors
Fungsi ini berguna untuk membaca suatu sector dan disket. Bila terjadi kesalahan, kesalahan
akan sama dengan status yang terdapat pada fungsi 1.
Input: Output:
AH = 02h AH = Kode Kesalahan
AL = Jumlah sector
BX = Offset buffer tampung
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment buffer tampung
Interrupt 13h Service 03h
Kegunaan: Write Disk Sectors
Fungsi ini berguna untuk menulis sector ke disk. Bila terjadi kesalahan operasi akan terdapat
kode kesalahan di register AH yang artinya dapat Anda lihat pada service 01h.
Input: Output:
AH = 03h AH = Kode kesalahan
AL = Jumlah sector
BX = Offset data yang akan ditulis
CH = Track
Page 28 of 48
CL = Sector
DH = Side
DL = Drive
ES = Segment data yang akan ditulis
Interrupt 13h Service 04h
Kegunaan: Verify Disk Sectors
Fungsi ini berguna untuk mengecek kesalahan suatu sector dan disk. Kode kembali dan hasil
interrupt mi dapat Anda cocokan dengan daftar yang terdapat pada fungsi 0lh.
Input: Output:
AH = 04h AH = Kode kesalahan
AL = Jumlah sector
CH = Track
CL = Sector
DH = Side
DL = Drive
Interrupt iSh Service 05h
Kegunaan: Format Disk Track
Fungsi ini berguna untuk memformat disket secara per track.
Input: Output:
AH = 02h AH = Kode kesalahan
AL = Jumlah sector
BX = Offset dan CHRN
CH = Track
CL = Sector
DH = Side
DL = Drive
ES = Segment dan CHRN
Page 29 of 48
Interrupt 13h Service 06h & 07h
Kegunaan: Tidak ada
Interrupt 13h Service 08h
Kegunaan: Return Drive Parameters
Fungsi ini berguna untuk mengambil parameter hard disk. Karena kadang-kadang nomor track
lebih besar dan 1 byte data (255), maka 2 bit paling atas dan CL yang berisi sector akan
digunakan untuk 2 bit paling besar dan CH yang berisi track.
Nomor drive yang diberikan harus lebih besar atau sama dengan 80h.
Input: Output:
AR = 08h CH = Track
DL = Drive Hard Disk CL = Sector /Track
(80≤ ) DH = Side
DL = Banyak drive dalam 1 harddisk
Interrupt 13h Service 09h
Kegunaan: Initialize Fixed Disk Table
Fungsi ini hampir sama dengan fungsi 0 dan interrupt 13h. Perbedaannya, fungsi ini hanya
khusus untuk hard disk sehingga nomor drive yang diberikan paling kecil 80h.
Input: Output:
AH = OAh Tidak ada
DL = Drive (80h)
Interrupt 13h Service 0Ah
Kegunaan: Read Long Sectors
Fungsi mi berguna untuk membaca suatu sector dan hard disk, isi register DL harus lebih
besar dan 80h.
Input: Output:
AR = OAh AH = Kode Kesalahan
AL = Sector
BX = Offset buffer penampung
CH = Track
CL = Sector
DH = Side
DL = Drive ( 80h≤)
ES = Segment Buffer Penampung
Page 30 of 48
Interrupt 13h Service 0bh
Kegunaan: Write Long Sectors
Fungsi ini berguna untuk menulis suatu sector ke hard disk.
Input: Output:
AH = OBh AH = Kode kesalahan
AL = Sector
BX = Offset data
CH = Track
CL = Sector
DH = Side
DL = Drive ( 8Oh)
ES = Segment Data
Interrupt 13h Service 0Ch
Kegunaan: Seek Cylinder
Fungsi ini berguna untuk memindahkan head pembaca hard disk dan suatu track ke track lain.
Input: Output:
AH = OCh AH = Kode kesalahan
CH = Bagian bawah track
CL = Bagian atas track (bit 6 & 7)
DH = Head
DL = Drive ( 80h )
Interrupt 13h Service 0Dh
Kegunaan: Alternate Reset
Fungsi ini hampir sama dengan fungsi 0, namun fungsi ini digunakan untuk hard disk.
Input: Output:
AH = 0Dh AH = Kode kesalahan
DL = Drive (80h )
Page 31 of 48
Interrupt 14h
Kegunaan: Comunication
Fungsi ini berguna untuk memprogram port komunikasi.
Interrupt 14h Service Oh
Kegunaan: Initialize Communications Port
Fungsi ini berguna untuk melakukan inisialisasi suatu port komunikasi.
2. Interrupt DOS
definisi : Interrupt yang disediakan oleh DOS (int di atas 1Fh)
NO Service Fungsi
INT 20 - Menghentikan proses komputer terhadap suatu program
COM
INT 21 01 Membaca karakter dari keyboard dan
menampilkan di layar
Register input : AH=01h
Register output : AL=kode ASCII
02 Mencetak karakter ke layar
Register input : AH=02
05 Output ke printer
Register input : AH=05
Register output : DL
09 Mencetak string ke layar
Register input : AH=09
22h - Terminate Code
23h - Ctrl-Break Code
24h - Critical Error Handler
25h - Absolute Disk Read
26h - Absolute Disk Write
27h - Terminate But Stay Resident
Page 32 of 48
Mengenal Lebih Detail tentang Interrupt – Interrupt DOS
.Interrupt DOS yang paling bermanfaat adalah 21 heks, karena banyak sekali operasi yang
dapat dikerjakannya, tetapi kita harus meninjau interrupt-interrupt DOS lainnya.
Interrupt 20 Heks : Menghentikan program
Kita biasanya rnenghentikan program dengan interrupt DOS 20 heks untuk mudah-nya. Kita
hanya perlu memberikan perintah 2 byte ini:
INT 20h
dan kendali akan dialihkan pada DOS. Metode penghentian program ini hanya dapat
digunakan pada program-program COM, tidak untuk EXE. Namun ini bukan masalah sebab
kita umurnnya membuat program COM. Tentu saja saudara dapat mempelajari cara-cara
penghentian program EXE. Cobalah lihat interrupt 27 dan interrupt 21 fungsi 4C heks.
Interrupt 23 Heks : Menjebak Control-Break
Sering kali kita dapat menghentikan dan menjalankan suatu program dengan menekan
Ctrl-Break atau dengan Ctrl-C. Kombinasi tombol ini memang menyebabkan pembelokan
mula-mula ke interrupt 23 heks, lalu ke suatu rutin DOS untuk menghentikan program
tersebut. Tetapi, saudara dapat melarang pemakai untuk menghentikan program melalui cara
ini atau malah memperbaiki aksi ini dengan menampilkan pertolongan atau pertanyaan.
Caranya adalah dengan mengubah vektor interrupt 23 heks sehingga mengarah ke program
saudara. Lalu, jika pemakai menekan Ctrl-Break, kendali akan dialihkan pada rutin buatan
saudara sendiri. Saudara juga dapat menghentikan program dengan menjalankan instruksi
INT 23.
Kadang-kadang jika saudara mengubah suatu vektor interrupt, saudara ingin nilai-nilai barn
tersebut tetap ada hingga 1(omputer dirnatikan. Kadang-kadang pula saudara ingin
memulihkan nilai-nilai lama sebelum program berhenti. Dengan interrupt 23 heks, DOS
selalu memulihkan nilai-nilai awal begitu program selesai.
Interrupt 27 Heks : Program Tetap ada di memori
Kedua interrupt di atas sangat mudah digunakan karena selalu menjalankan tugas yang sama;
saudara cukup memberika instruksi dua-byte tersebut. Tetapi jika kita dapat mengubah aksi
suatu interrupt, maka kita harus menyediakan informasi tambahan dalam suatu register.
Page 33 of 48
Interrupt 27 hek adalah salah satu contohnya. Intruksi ini dipakai untuk memasang resident-
code, yaitu program yang tetap tinggal dalam memori hingga komputer dimatikan atau
di- reset. Biasanya resident code akan menjebak interrupt lain dan mengubah operasinya. Dapat
juga program itu menjalankan suatu peripheral. Device driver dan program yang menyediakan
RAM disk serta print spooler menggunakan interrupt ini.
Untuk menggunakan interrupt ini kita harus menjalankan program ganda. Salah satu bagian
meliputi instruksi pemasangan, dan lainnya adalah bagian yang resident. Kita
mengarahkan register DX pada akhir bagian resident program tersebut, lalu menjalankan
intruksi 27 heks. Bagian program pemasangan dihentikan, dan kendaH diaJihkan ke DOS.
Tetapi, DOS tidak membebaskan semua memori yang barn saja dipakai oleh program tadi.
DOS mengurangi ukuran memori uantuk kerja dengan menaikkan awal alamat untuk
menjalankan.program, untuk melindungi bagian resident yang barn saja dipasang. Memori
yang disisihkan untuk program resident ini tidak dapat dipakai lagi sampai komputer dirnatikan
atau di-reset.
Kita akan menggunakan interrupt ini nanti untuk menukar tombol-tombol papan-ketik,
mengganti karakter pencetak, dan memperkecil ukuran memori di bawah 512K byte (seperti
yang dikendaki sebagai program). Sekarang, marilah melihat fungsi-fungsi yang tersedia
pada interrupt 21 heks.
1. FUNGSI DOS
Kita telah meninjau beberapa interrupt DOS yang hanya melakukan layanan tunggal. Kita
sekarang akan melihat suatu layanan yang cukup rumit yang dapat menjalankan lusinan tugas
yang berbeda, yaitu interrupt 21 heks DOS. Operasi yang dikehendaki ditentukan dengan
nilai pada register AH. Register lain kadang-kadang juga harus diatur. Dengan inter- rupt ini
kita dapat membaca papan-ketik, menulis pada layar dan pencetak, serta menjalankan berbagai
operasi disk. Tampaknya, ada sepasang fungsi DOS yang menjalankan tugas yang sarna.
Tetapi sebenamya satu golongan dirancang untuk DOS versi 1 dan menggunakan konsep file
control block (FCB), sedangkan satunya dikembangkan untuk DOS versi 2 atau lebih tinggi,
yang menggunakan konsep file-handle. Kita hanya akan menggunakan metode yang kedua,
karena jauh lebih mudah. Karena itu fungsi-fungsi yang menggunakan FCB tidak dibahas
di sini. Daftar fungsi DOS yang dibahas ada pada Tabel 8.1 dan dibicarakan dengan rinci
pada bagian berikut.
Page 34 of 48
2. RINGKASAN SEBAGIAN FUNGSI INTERRUPT DOS 21 HEKS
Fungsi-fungsi DOS 21 heks yang digunakan dalam buku ini diuraikan dalarn bagian ini,
bersama-sarna dengan fungsi-fungsi hebat yang tidak digunakan dalarn buku ini. Untuk
menggunakan fungsi-fungsi ini, letakkan nomor fungsi dan register AH. Register lain hams
. diisi seperti yang diuraikan. Lalu perintah:
INT 21h
juga diberikan. Data mungkin tersedia dalarn satu register atau lebih sekembalinya dari
interrupt.
Fungsi 1: Membaca menampilkan karakter papan-ketik
Saat fungsi ini dijalankan, pemrosesan akan berhenti sarnpai ada tombol ditekan. Jadi fungsi
ini menunggu input. Jika karakter yang diketik adalah ASCII, maka ini ditampilkan pada
layar video. Karakter tab secara otomatis diperlebar dengan menarnbahkan spasi hingga ke akhir
bidang 8-kolom berikutnya. Menekan Ctrl-Break akan menghentikan operasi. Untuk
menggunakan fungsi ini, isi register AH dengan 1 dan jalankan interrupt 21 heks. Karakter
input dikembalikan pada register AL jika itu adalah ASCII. Jika tombol yang ditekan
sarna dengan sandi yang diperluas, maka register AL akan berisi O. Lalu fungsi ini harns
diulangi untuk mendapatkan sandi yang diperluas tersebut. Jika nilai kedua lebih kecil dari 84,
maka nilai ini mewakili sandi lacak tombol yang ditekan. Controlnya, nilai 30
menunjukkan bahwa tombol Alt dan huruf A ditekan, karena sandi lacak huruf A adalah 30.
Begitu pula, jika nilai kedua sarna dengan 81, ini menunjukkan bahwa tombol PgDn telah
ditekan, karen a ini adalah sandi lacak tombol ini. Contoh ketiga: nilai 59 menunjukkan
bahwa tombol Fl yang ditekan, karena itulah sandi lacaknya. Nilai di atas 83 lebih sukar
dicari. Misalnya, penekanan Shift dengan Fl menghasilkan 84, sedangkan Alt dengan 1
menghasilkan 120. Lihat fungsi 6, 7, dan 8 untuk operasi yang serupa. Saudara dapat
menentukan apakah suatu karakter papan-ketik sedang menunggu untuk dibaca dengan fungsi
B heks Input dapat dibaca dari piranti atau disk lain dengan penyaluran (redirection) dari
standar input.
Page 35 of 48
Fungsi 2: Menulis karakter ke layar video
Fungsi ini menampilkan karakter dalam register DL pada layar video. Ini bermanfaat untuk
menuliskan satu atau dua karakter di layar video (gunakan fungsi 9 untuk string yang lebih
panjang). Fungsi ini amat berguna untuk menampilkan tanda dolar, karena fungsi 9 tak bisa
melakukannya. Fungsi ini juga berpasangan dengan fungsi 8, yang membaca karakter dari
papan-ketik tetapi tidak menampilkannya. Karakter backspace menggerakkan kursor ke kiri,
tapi tidak mengganti (menghapus) karakter di sana. Output dapat dikirimkan ke piranti
lain atau berkas disk dengan menyalurkan (redirect) standar output dengan karakter >.
Page 36 of 48
Fungsi 3: Membaca dari port serial
Fungsi 3 membaca satu karakter dari standar auxiliary input, yang didefmisikan sebagai AUX
atau COMI. Tetapi, kita dapat mengubah port standard auxiliary ke COM2 dengan program
MODE. Fungsi ini akan menunggu hingga satu byte muncul. Letakkan nilai 3 dalam register
All dan jalankan interrupt 21 heks. Karakter yang dibaca dapat dilihat dalam register AL.
Fungsi 4: Menulis ke Port Serial
Fungsi 4 mengirirnkan byte dalam register DL ke port AUX atau COMI. lsi register All dengan
nilai 4, lalu jalankan interrupt 21. Port lain dapat digunakan dengan mengubahnya lebih dulu
dengan program MODE.
Fungsi 5: Menulis ke port pencetak
Gunakan fungsi ini untuk mengirirnkan karakter dalam register DL ke port pencetak
standard, PRN atau LPTI. Tetapi dapat juga LPT2 atau LPT3 digunakan, asal dipilih lebih
dulu dengan program MODE. Letakkan nilai 5 dalam AH dan jalankan interrupt 21.
Fungsi 6: Input papan-ketik dan output video langsung
Fungsi 6 dapat melakukan baik input ataupun output; dan juga dapat menentukan status input.
Berbeda dengan fungsi input lainnya, yang ini tidak menunggu hingga karkter
dimasukkan. Perhatikan pula bahwa karakter input tidak ditarnpilkan dan Ctrl-Break tidak
dapt menghentikan operasi ini.
Seperti biasa, DL berisikan karakter output dan AL menerima karakter yang masuk. Proses
input dimulai dengan menempatkan FF heks dalam DL. Letakkan nilai 6 dalam register
All dan jalankan interrupt 21 heks. Sekembalinya dari fungsi ini, zero flag akan dinyalakan
jika tak ada karakter yang masuk. Jika zero flag kosong, berarti karakter tersebut ada dalam
AL. Jika DL berisikan nilai lain selain FF Heks, maka karakter tersebut akan dikirirnkan
ke piranti output standard. Bandingkan pula dengan fungsi 7 dan 8.
Fungsi 7: Membaca karakter papan-ketik tanpa dpantulkan ataupun Break Detection
Untuk menggunakan fungsi 7, letakkan nilai 7 dalam AH dan jalankan interrupt 21 heks. Fungsi
ini, seperti fungsi 1, juga menunggu ketika karakter. Jika yang masuk adalah karakter ASCII,
maka nilai ASCII-nya dikembalikan dalam AL. Karakter grafik IDM dapat dimasukkan dengan
menekan tombol Alt dan mengetik nilai desimalnya pada tombol-tombol bilangan khusus
di bagian kiri papan ketik. Nomor akan muncul pada register AL. Tetapi jika karakter yang
Page 37 of 48
diperluas seperti tombol fungsi, tombol kursor atau kombinasi Alt dimasukkan, nilai nol
nampak pada register AL. Fungsi harus dipanggil dua kali untuk menentukan karakter. Tetapi
tidak seperti fungsi 1, fungsi ini tidak menampilkan karakter input. Lebih lanjut, Ctrl -Break
tidak menghentikan proses. Bandingkan juga dengan fungsi 6 dan 8.
Fungsi 8: Membaca karakter papan-ketik tanpa dipantulkan tetapi dengan Break
Detection
Fungsi 8 mirip dengan fungsi 1 karena sama-sama menunggu ketikan tombol dan berhenti jika
Ctrl-Break ditekan. Tetapi, karakter input tidak ditampilkan, dan karakter tab tidak
diperlebar. Isikan nilai 8 dalam AH dan jalankan interrupt 21 heks. Bandingkan pula dengan
fungsi 6 dan 7.
Fungsi 9: Menampilkan sederetan karakter
Fungsi ini amat berguna untuk menampilkan sederetan karakter pada layar. Telah kita Iihat
bahwa fungsi 2 dan 6 dapat menampilkan satu karakter, tetapi fungsi 9 lebih mudah
digunakan jika untuk menampilkan Iebih dari satu karaker. Tentu saja, karakter tak-tercetak
(misaInya carriage return, line feed, dan Esc) dapat disertakan dalam string ini.Untuk
menggunakan fungsi ini, letakkan string tersebut di suatu tempat dalam memori dan akhirilah
dengan tanda dolar (saudara tidak dapat menggunakan tanda dolar dalam string ini, gunaka,n
fungsi 2 untuk keperluan ini). Alamat string ini nantinya harus di-letakkan dalam register
DS:DX. lsi AH dengan 9 dan jalankan interrupt 21 heks.Nanti kita akan membuat suatu macro
yang akan mempermudah pemakaian fungsi ini. Selanjutnya, kita cukup menampilkan string
dengan ekspresi sederhana seperti ini
@mulai 'Contoh pemakaian @mulai'
Fungsi A heks: Input papan-ketik dengan buffer
Tadi telah kita lihat bahwa fungsi 1, 6, 7, dan 8 membaca karakter tunggal sekali setiap waktu.
Tetapi seringkali lebih mudah membaca sederetan karakter sekaligus, sehingga pemakai dapat
mengadakan pembetulan sebelum deretan terse but diterima komputer. Fungsi A heks
dirancang untuk maksud ini. Semua karakter yang diketik oleh pemakai akan melewati buffer
papan-ketik, Keampuhan tombol-tombol penyunting DOS, misalnya kursor ke kiri, ke kanan,
penyisipan dan penghapusan juga tersedia. Jika tombol Return ditekan, maka deretan karakter
tadi dimasukkan buffer input.
Page 38 of 48
Sebelum menggunakan fungsi ini, saudara harus menyiapkan buffer tadi dalam memori. Ada
dua byte pembantu yang terletak di awal buffer. Yang pertama men-definisikan panjang
maksimum teks yang dapat disimpan dalam buffer; sedangkan yang kedua menunjukkan
jumlah karakter yang dimasukkan oleh pemakai. anda yang mencntukan nilai byte pertama;
sedangkan DOS akan mengisi byte kedua setelah buffer dibaca. DOS juga menambahkan
karakter carriage return pada akhir string input. Tetapi, carriage return ini tidak ikut dihitung
dalam nilai kedua. Karenanya, saudara harus mengatur kapasitas maksimum buffer menjadi
satu byte lebih besar daripada yang saudara perlukan. Untuk menggunakan papan-ketik
dengan buffer, atur register DS:DX hingga sarna dengan byte pembantu pertama, yaitu byte
yang menentukan ukuran maksimum buffer. Letaknya. adalah dua byte sebelum teks. lsi
AH dengan A heks dan jalankan interrupt 21 heks.
Fungsi B heks: Status papan-ketik
Telah kita lihat bahwa fungsi 1, 7 dan 8 menunggu input papan-ketik. Jika tidak ada tombol
yang ditekan, komputer akan menunggu terus hingga ada tombol yang ditekan. Tetapi kita dapat
menghindari penungguan input ini dengan memeriksa status dengan fungsi B heks. lsi AH
dengan ~ heks dan jalankan interrupt 21 heks. Sekembalinya dari fungsi ini, AL akan berisi nol
jika tak ada tombol yang ditekan. Nilai lain yang terdapat pada AL menunjukkan bahwa ada
karakter yang sedang ditunggu. Fungsi ini tidak membaca karakter; gunakan fungsi 1, 7,
atau 8 untuk maksud tersebut.
Fungsi File Control Block
Kelompok fungsi berikut ini menggunakan operasi disk dengan file control block (FCB). Teknik
Ini sedemikian canggung sehingga kita tidak akan menggunakannya. Sebagai gantinya, kita
akan menggunakan sederetan fungsi sepadan yang merujuk suatu file handle. Akan saudara
lihat bahwa ada satu fungsi, yaitu 40 heks, yang bisa digunakan dengan 31 heks, suatu
fungsi FCB, atau 4C heks, suatu fungsi file-handle.
Fungsi 25 heks: Mengganti vektor interrupt
Telah kita ketahui bahwa bagian awal memori berisikan vektor-vektor interrupt, yaitu
alamat empat-byte yang mengarah pada rutin-rutin ROM BIOS dan DOS. Kita dapat mengubah
aksi rutin-rutin ini dengan mengganti vektor interruptnya. Contohnya, kita dapat mematikan
tombo] PrtSc dengan mengubah vektor interrupt 5 pada alamat 14 heks.
Pada prinsipnya, kita dapat mengubah suatu vektor interrupt cukup dengan me-nuliskan yang
Page 39 of 48
tak terduga jika interrupt itu dijalankan pada saat sedang diubah. karena itu, lebih arnan
menyuruh DOS mengubah vektor ini dengan fungsi 25 heks. Vektor 32-bit yang baru ini
ditempatkan pada rgister DS:DX, dan register AL diisi dengan nomor vektor. Isilah AH
dengan 25 heks dan jalankan interrupt 21 heks. Lihatlah fungsi 35 heks untuk operasi
pelengkapnya.
Fungsi 30 heks: Menear; nomor versi DOS
Banyak hal baru yang diperkenalkan pada DOS versi 2 atau lebih. Tetapi operasi-operasi ini tak
dapat digunakan pada versi-versi DOS sebelumnya. Karena itu, jika saudara
menggunakan fasiJitas barn ini, saudara pertama-tama harus menggunakan fungsi 30-heks untuk
melihat apakah DOS yang digunakan adalah versi 2 atau lebih baru. Jika nomor versinya
adalah 1, saudara harus menghentikan program dengan memberitahukan bahwa program
harus dijalankan dengan DOS versi 2 atau lebih.Untuk menggunakan fungsi ini, isi AH
dengan 30 heks dan jalankan interrupt 21 heks, Nomor versi "mayor" akan dihasilkan pada
AL, kecuali lebih kecil daripada 2. Jika hal ini yang terjadi maka hasilnya akan nol. Register
AH akan berisikan nomor versi "minor't-nya, yaitu yang terletak di belakang desimal. Jadi
versi 3.1 akan menghasilkan 3 pada AL dan 1 pada AH, sedangkan versi 1.1 hanya akan
menghasilkan 0 pada AL.
Fungsi 31 heks: Selesai tetapi tetap berada di memori
Telah kita lihat bahwa penggerak piranti dan pemegang interrupt dapat dipasang dengan
interrupt 27 heks DOS. Fungsi 31 heks menyediakan layanan yan sarna, tetapi dengan tambahan
fasilitas. Fungsi ini juga menghasilkan sandi kesalahan yang dapat diuji dengan perintah
ERRORLEVEL dalam berkas batch. kalau tidak, sandi kesalahan dapat diperoleh dengan
fungsi 4D heks.
Seperti dengan fungsi 27 heks, kita juga harus meletakkan offset akhir program resident tersebut
pada DX. Lalu kita isi register AH dengan 31 heks dan jalankan interrupt 21 heks,
Fungsi 35 heks: Mencari vektor interrupt
Telah kita lihat bahwa kita dapat mengubah operasi rutin DOS dan BIOS dengan
mengganti vektor-vektor interruptnya di bagian awal memori. Caranya adalah dengan menyalin
vektor-vektor asli ke dalam program kita sebelum mengubah suatu vektor hingga mengarah
pada program kita. Selanjutnya kita dapat meloncat dari program kita ke alamat asli. Contoh
Page 40 of 48
lain: kita ingin memulihkan suatu vektor interrupt dengan nilai aslinya pada suatu saat. Kita
harus menyalin vektor aslinya ke suatu daerah penyimpanan sebelum kita mengubahnya,
Segera sete'ah kita lakukan itu, kita dengan mudah me-rnulihkan yang asli dari temper
penyimpanan tadi.
Tempatkan nomor interrupt dalam register AL, isi AH dengan 35 heks dan jalankan
interrupt 21 heks. Sekembalinya dari interrupt, register ES:BX akan berisikan vektor yang
saudara inginkan. Lihatlah fungsi 25 heks untuk lawannya.
Berkas disk dan file handle
Fungsi-fungsi DOS berikutnya memanipulasi berkas dengan file handle. Ini hanya bisa
dilakukan dengan DOS versi 2 atau sesudahnya. Kita dapat menggunakan suatu handle untuk
mencipta, membaca menulis, mengganti nama, atau menghapus berkas disk.
Suatu nama berkas pada DOS versi 1 hanya terbatas pada satu disk drive, delapan karakter
nama utama, dan tiga karakter akhiran, misalnya:
C:SORTFAST.ASM
DOS versi 2 memperkenalkan konsep subdirectory. Sekarang, satu atau lebih nama subdirectory,
diakhiri dengan karakter backslash, juga dapat disertakan sebagai nama berkas. Jadi suatu
rujukan untuk berkas dengan DOS 2 akan tampak seperti ini :
C:\ASSEMBLER\sYSTEMS\sORTFAST.ASM
File handle diperkenalkan untuk menyederhanakan rujukan pada nama jalur yang sangat
panjang. Kita akhiri suatu namajalur dengan nol (ini disebut string ASCIIZ), lalu mengarahkan
register DS:DX ke awal nama berkas itu, isi register CX dengan atribut herkas (biasanya 0), lalu
jalankan fungsi yang sesuai. Setelah itu DOS akan menghasilkan (mengembalikan) handle yang
dimaksud atau suatu sandi kesalahan dalam register AX. Kita dapat membedakan antara
keduanya dengan flag carry - yang nyala jika ada kesalahan Atribut berkas dicantumkan pada
Tabel 8.2. Sandi kesalahan standard ada pada Tahel 8.3.
Page 41 of 48
Page 42 of 48
Jumlah maksimum file-handle yang dapat digunakan program awalnya adalah 8. Tetapi
saudara dapat meningkatkan jumlah ini menjadi 20 dengan perintah.
FILES = 20
Selain itu, DOS secara otomatis memasang lima handle (0-4) ke tiga piranti peripheral
CON, AUX, PRN (tiga handle digunakan CON). Tetapi program saudara hanya membutuhkan
3 handle. Dengan demikian sisanya adalah 5 handle, suatu bilangan yang dapat dinaikkan
hingga 17. pembagian handle DOS ditampilkan dalam TabeI8.4. Handle untuk berkas saudara
dimulai dari nomor 5.
Fungsi 3C heks: Buat berkas baru
Fungsi 3C heks menciptakan berkas barn sesuai dengan nama jalur yang ditentukan. Jika bekas
dengan nama yang sama sudah ada, maka berkas itu dihapus. Biasanya memang ini yang
diinginkan. Tetapi jika saudara ingin menghindari penghapusan tidak sengaja, saudara harns
memeriksa directory lebih dahulu.
Seperti yang kita lihat dalam bagian berikut, kita meletakkan nol pada akhir nama jalur dan
mengarahkan resister DS:DX ke awal nama jalur. Register CX berisi nol, yaitu atribut
berkasnya. Pada waktu membuat berkas barn, DOS tak peduli nilai CX, dan selalu mengisinya
dengan DOl. lsi AH dengan 3C heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah
apakah carry flag nyala, yang berarti ada kesalahan. karena sandi kesalahan adalah sama
untuk semua pemakaian file-handle, saudara dapat menciptakan rutin kesalahan standard
untuk semua rutin penanganan berkas. Jika tidak ada kesalahan, simpanlah file handle tersebut,
karena nanti ini harns digunakan sebagai rujukan pada berkas ini.
Fungsi 3D heks: Membuka berkas yang sudah ada
Jika kita ingin membaca berkas yang sudah ada, mula-mula kita harus membukanya dengan
fungsi 3D heks. Seperti tadi, kita tempatkan nol pada akhir nama jalur dan mengarahkan register
DS:DX ke awal nama jalur. Kita isikan salah satu mode akses seperti dalam Tabel 8.5 ke
dalam AL yang biasanya DOl. isi AH dengan 3D heks dan jalankan interrupt 21 heks.
Sekernbalinya, lihatlah apakah carry flag menyala, yang berarti ada kesalahan. Jika tidak ada
kesalahan, simpanlah file handle yang saudara dapatkan dalam register AX.
Page 43 of 48
Fungsi 3E heks: Menutup berkas disk
Setelah menciptakan berkas dengan fungsi 3C heks, dan menuliskan data padanya dengan fungsi
40 heks, kita harns menutup berkas, karena kalau tidak bisa rusak. Isikan file handle yang
bersangkutan pada register BX, lalu isi AH dengan 3E hex, dan jalankan interrupt 2J heks.
Sekembalinya, lihat apakah carry flag nyala; jika ya berarti ada kesalahan.
Fungsi 3F heks: Membaca berkas atau piranti
Setelah suatu berkas disk diciptakan, ditulis, dan ditutup, kita bisa mernbacanya Iagi.
Tentu saja, mula-mula kita harus membuka berkas tersebut dengan fungsi 3D heks untuk
mendapatkan file handle. Kita isikan handle pada BX dan tempatkan dalam ex jumlah byte
yang akan dibaca pada suatu saat. Jumlahnya bisa kita tentukan sendiri, namun lebih besar
lebih baik. Selain 'itu, jumlah tersebut harus merupakan kelipatan sektor- 512 atau 1024
supaya lebih cepat. Register DS:DX menunjuk lokasi pada memori tempat data akan disalin.
Page 44 of 48
lsi AH dengan 3F heks dan jalankan interrupt 21 heks. Sekembalinya dari proses tersebut,
lihatlah apakah carry hag nyala, tanda bahwa ada kesalahan. Jika tidak ada kesalahan, AX
akan berisikan jumlah byte yang terbaca dari disk. Jika jumlah ini lebih kecil daripada jumlah
dalam ex, berarti saudara telah mencapai akhir berkas. Kalau tidak, berarti masih ada data
lagi yang belum terbaca. karenanya, setelah mengolah data yang barn dibaca, jalankan sekali
lagi fungsi 3F heks. Saudara tidak perlu menutup suatu berkas jika yang saudara lakukan
hanya membacanya, meskipun dengan menutup berkas saudara akan membebaskan satu
handle yang tadi terpasang pada berkas tersebut.
Karena DOS secara otomatis memang handle ke peripheral, saudara dapat menggunakan fungsi
ini untuk membaca dari papan-ketik. Dalam hal ini, bile handle dalam BX adalah O.
Fungsi 40 heks: menulis berkas atau piranti
Setelah menciptakan berkas dengan fungsi 3C heks, kita dapat rnenuliskan data ke
dalamnya dengan fungsi 40 heks. Fungsi ini adalah pelengkap dari fungsi 3F heks. File
handle yang digunakan ditempatkan dalam BX, sedangkan register DS:DX rnengarah pada
lokasi data dalam memori, dan jumlah byte yang ditulis dari buffer memori ditempatkan
dalam CX. lsi AH dengan 40 heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah
apakah carry flag nyala, yaitu tanda adanya kesalahan. Jika tidak ada, AX akan berisikan
jumlah byte yang dituliskan ke disk. Jika bilangan ini lebih kecil daripada yang ada dalam
register CX, berarti saudara telah mencapai akhir berkas. kalau tidak berarti masih ada data
yang hams dituliskan. Jangan lupa menutup berkas dengan fungsi 3E.
Karena DOS secara otomatis rnemasang handle ke peripheral, saudara dapat rnenggunakan
fungsi ini untuk menulis ke video. Dalam hal ini, file handle dalam BX adalah 1.
Fungsi 41 heks: Menghapus berkas disk
Fungsi 41 heks dipakai untuk rnenghapus berkas yang sudah ada; sebenarnya yang dikerjakannya
hanya menandai catatan directory untuk menunjukkan bahwa berkas sudah dihapus. Karena
itu, mungkin bagi kita untuk memulihkan isi berkas yang tak sengaja terhapus. Kita perIu
menghapus suatu berkas yang sudah ada jika kita menciptakan berkas bam dengan nama sarna.
Fungsi 3C heks otomatis melakukan hal ini.
Untuk menggunakan 41 heks, kita letakkan nol pada akhir narna jalur dan arahkan register
DS:I)X ke awal nama jalur. Isikan 41 heks ke AH dan jalankan intenupt 21 heks. Setelah itu,
periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Saudara tidak bisa
menghapus berkas yang sedang terbuka atau yang berstatus baca-saja.
Page 45 of 48
Fungsi 43 heks: Atribut berkas
~G.tagunakan fungsi 43 heks untuk menentukan atau untuk mengubah atribut berkas. Kita
letakkan ncl pada akhir nama jalur dan arahkan register DS:DX ke awal nama jalur. Untuk
rnenentukan atribut, isi AL dengan nol, isi AH dengan 43 heks, dan jalankan interrupt.
Sekembalinya, periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Jika tidak
ada, atribut berkas dapat dilihat dalam register CX. Nilai FFFF heks dalam register AX
menandakan tidak ada kesalahan untuk hard disk.
Fungsi 4A heks: Mengubah ukuran memori
Jika suatu program dijalankan, maka semua memori yang tersisa akan disisihkan untuknya. Jika
kita melakukan hal itu, maka kita hams membebaskan semua memori yang disisihkan pada
program pertama untuk program kedua. Fungsi 4A heks digunakan untuk maksud
ini.Register ES merujuk pada blok yang akan diubah; untuk program-program kita ini sarna
dengan yang ada dalam CS. Register BX berisikan jumlah paragraf 16-byte yang tersisa
setelah kita menurunkan jumlah memori yang diperlukan program pertama hingga rruru-
mum. Saudara dapat menghitung nilai ini dengan membagi panjang program dengan 16 dan
menaikkan hasilnya. lsi AH dengan 4A heks dan jalankan interrupt 21 heks, Sekembalinya,
periksalah apakah carry flag nyala, yaitu tanda adanya kesalahan. Sekarang kita siap
menggunakan fungsi ini dengan fungsi 4B heks.
Fungsi 4B heks: Memuat dan menjalankan program
Fungsi 4B heks dapat melakukan dua hal yang berbeda dengan menyalin isi berkas disk ke
memori. Kita dapat memuat data dan menggunakannya, atau kita bisa menyalin program lain
ke memori dan menjalankannya. Namnn, sebelum kita bisa memuat program lain, kita harus
melepaskan sejumlah memori dengan fungsi di atas, yaitu 4A heks.
U ntuk memuat suatu program, kita meletakkan nol pada akhir nama jalur yang dimaksud dan
mengarahkan register DS:DX ke awal nama jalur itu. Register AL berisikan nilai nol jika yang
dimuat dan dijalankan adalah program barn, atau 3 jika yang dimuat adalah berkas dan tak
dijalankan:
Page 46 of 48
Register ES:BX akan mengarah ke suatu biok parameter yang berisikan infonnasi tentang
program barn itu. Tabel 8.6 adalah rincian biok parameter untuk pemuatan dan penjalanan
suatu program. Blok parameter berisikan 7 word (14 byte). Word pertama adalah alamat
Segment string lingkungan (environment string); nilainya terletak pada alamat 2C heks dalam
program. String ini menentukan drive yang berisikan Ietak modul COMMAND. Di situ juga
disertakan jalur pencarian yang sudah ditetapkan.
Tiga word ganda sisanya menunjukkan letak informasi yang harus disampaikan pada
program. Yang pertama adalah baris perintah, dua lainnya adalah FCB pertama dan kedua.
Kita dapat menggunakan baik baris perintah atau FCB untuk menyampaikan parameter ke
program barn. Jika ada subdirectory yang perlu disertakan dalam parameter tersebut, maka
kita hams menggunakan baris perintah. Kalau tidak kita dapat menggunakan FCB. Selanjutnya,
AH kita isi dengan 4B heks dan jalankan interrupt 21 heks. Sekembalinya, periksalah apakah
carry flag nyala, yaitu tanda adanya kesalahan.
Jika kita hanya ingin memuat suatu berkas disk ke memori tanpa menjalankannya, kita
menggunakan blok parameter lain, yang panjangnya hanya 2 word. W od pertama adalah
Segment tujuan pemuatan berkas tersebut, sedangkan yang kedua adalah faktor relokasi yang
diperlukan jika program .EXE yang dimuat. Ini akan menghasilkan penempatan relatif pro-
gram itu dalam Segment. Blok parameter pemuatan ditampilkan pada Tabel 8.7.
Page 47 of 48
Setelah program kedua dihentikan, kendall akan dikembalikan ke program semula Karena
program kedua bisa saja mengubah seluruh register, kita harus menyimpan nilai asal stack-
pointer dan register-register stack-segment sebelum menjalankan fungsi 4B heks. Sesudah
itu, kita pulihkan lagi isi register-register sekembalinya dari program kedua.
Fungsi 4C heks: Menghentikan program
Ada beberapa cara untuk menghentikan program dan kembali ke DOS. Kita biasanya
menggunakan interruppt 20 heks, tetapi fungsi ini hanya dapat digunakan dalam berkas
COM; tidak bisa untuk menghentikan program EXE. Metode umum untuk menghentikan
baik program COM atau EXE adalah dengan fungsi 4C heks.
Fungsi ini juga menyediakan suatu sandi kesalahan yang bisa diuji dengan perintah
ERRORLEVEL dalam berkas batch. Selain itu, suatu subprogram yang dimuat dengan
kesalahan ini diambil dengan fungsi 40 heks. lsi AH dengan 4C heks dan jalankan interrupt
21 heks. Fungsi ini juga menutup tiap berkas yang dibuka dengan fungsi-fungsi 3C heks dan
30 heks.
Fungsi 4D heks: Menentukan sandi kesalahan
Seperti yang kita lihat tadi, suatu sandi kesalahan dapat diperoleh saat subprogram
dihentikan baik dengan fungsi 31 atau 4C heks. Sandi ini ditentukan dengan memanggil
fungsi 40 heks dan ditampilkan dalam register AL. Register AH menunjukkan sebab
penghentian, seperti yang dicantumkan dalam Tabel 8.8. Nol berarti penghentian normal, 1
berarti Ctrl-Break ditekan, 2 karena ada kesalahan krisis piranti, dan 3 jika program dihentikan
dengan fungsi 31 heks.
Fungsi 56 heks: Mengubah nama berkas
Saudara dapat mengubah nama suatu berkas dengan fungsi 56 heks, tetapi nama baru tersebut
sebelumnya tidak boleh ada. Nama baru dan nama lama bisa terdapat dalam directory yang
berbeda pada disk yang sama, tetapi tidak boleh mengacu pada disk yang berbeda.Sebelum
menjalankan fungsi ini, letakkan nol biner pada akhir tiap nama. Ini akan mengarahkan register
DS:DX ke nama lama dan register ES:DI ke nama yang bam. lsi AH dengan 56 heks dan
jalankan interrupt 21 heks. Sekembalinya, periksa keadaan carry flag untuk mencari
kesalahan. Register AL akan berisi 3 jika kedua nama ada pada disk yang berbeda. Nilai
5 berarti nama bam sudah ada.
Page 48 of 48