1. INTERRUPT
3.1. PENGERTIAN INTERRUPT
Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu.
Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya
dan melakukan apa yang diminta oleh yang menginterupsi.
Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi nomor 0
sampai 255. Nomor interupsi 0 sampai 1Fh disediakan oleh ROM BIOS, yaitu suatu IC didalam
komputer yang mengatur operasi dasar komputer. Jadi bila terjadi interupsi dengan nomor 0-1Fh,
maka secara default komputer akan beralih menuju ROM BIOS dan melaksanakan program yang
terdapat disana. Program yang melayani suatu interupsi dinamakan Interrupt Handler.
3.2. VEKTOR INTERUPSI
Setiap interrupt akan mengeksekusi interrupt handlernya masing-masing berdasarkan
nomornya. Sedangkan alamat dari masing- masing interupt handlertercatat di memori dalam
bentuk array yang besar elemennya masing-masing 4 byte. Keempat byte ini dibagi lagi yaitu 2
byte pertama berisi kode offset sedangkan 2 byte berikutnya berisi kode segmen dari alamat
interupt handler yang bersangkutan. Jadi besarnya array itu adalah 256 elemen dengan ukuran
elemen masing-masing 4 byte. Total keseluruhan memori yang dipakai adalah sebesar 1024 byte
(256 x 4 = 1024) atau 1 KB dan disimpan dalam lokasi memori absolut 0000h sampai 3FFh.
Array sebesar 1 KB ini disebut Interupt Vector Table (Table Vektor Interupsi). Nilai-nilai yang
terkandung pada Interupt Vector Table ini tidak akan sama di satu komputer dengan yang
lainnya.
1
2. Interupt yang berjumlah 256 buah ini dibagi lagi ke dalam 2 macam yaitu:
- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yang
menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamat
absolut 0000h-007Fh.
- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer yang
menggunakan sistem operasi DOS dan Interupt Handler-nya diload ke memori oleh DOS pada
saat DOS digunakan. Lokasi Interupt Vector Tablenya ada di alamat absolut 07Fh-3FFh.
Nomor Nama Nomor Nama
Interrupt Interrupt Interrupt Interrupt
*00h Divide By Zero 10h Video Service
*01h Single Step 11h Equipment Check
*02h Non MaskableInt(NMI) 12h Memory Size
*03h Break point 13h Disk Service
04h Arithmatic Overflow 14h Communication (RS-232)
05h Print Screen 15h Cassette Service
06h Reserved 16h Keyboard Service
07h Reserved 17h Printer Service
08h Clock Tick(Timer) 18h ROM Basic
09h Keyboard 19h Bootstrap Loader
0Ah I/O Channel Action 1Ah BIOS time & date
0Bh COM 1 (serial 1) 1Bh Control Break
2
3. 0Ch COM 2 (serial 2) 1Ch Timer Tick
0Dh Fixed Disk 1Dh Video Initialization
0Eh Diskette 1Eh Disk Parameters
0Fh LPT 1 (Parallel 1) 1Fh Graphics Char
Gambar 3.1. BIOS Interrupt
3
4. Interrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak boleh
dirubah oleh pemrogram seperti yang lainnya.
DEVIDE BY ZERO : Jika terjadi pembagian dengan nol maka proses akan segera
dihentikan.
SINGLE STEP : Untuk melaksanakan / mengeksekusi intruksi satu persatu.
NMI : Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak dapat
dicegah.
BREAK POINT : Jika suatu program menyebabkan overflow flag menjadi 1 maka
interrupt ini akan melayani pencegahannya dan memberi tanda error.
Nomor Nama
Interrupt Interrupt
20h Terminate Program
21h DOS Function Services
22h Terminate Code
23h Ctrl-Break Code
24h Critical Error Handler
25h Absolute Disk Read
26h Absolute Disk Write
27h Terminate But Stay Resident
Gambar 3.2. DOS Interrupt
4
5. Didalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakan
interupsi untuk menyelesaikan suatu tugas.
Kadang-kadang proses dalam CPU mengalami interrupsi untuk kejadian-kejadian
yangperlu segera mendapat respon, seperti pengetikan pada keyboard, proses I/O lainnya, dan
clock tick untuk mengupdate waktu system. Pada prinsipnya interrupt terbagi atas eksternal, dan
internal. Eksternal interruptdibangkitkan oleh proses diluar program seperti proses I/O, dan
clock, sedangkan prosesInternal interrupt dibangkitkan oleh proses program seperti devide for
zero error (Trapsinterrupt) dan Software interrupt (dibangkitkan dengan perintah INT).
Ketika suatu interrupt terjadi, processor akan menyelesaikan siklus memori saat ini,
danbercabang kepada rutin khusus menanggani interrupt tersebut, status dari program saat ini
akan disimpan dan rutin interrupt handle umumnya akan mengembalikan kendali keprogram
termasuk semua nilai register seakan-akan tidak pernah terjadi sesuatu (hanyakehilangan
beberapa siklus CPU), sedangkan Traps interrupt tidak akan kembali ke program dan
menghentikan program tersebut.
Catatan : Pada bagian ini kita akan lebih memfokuskan diri pada Software interrupt
Maskable Interrupt
Processor dapat mencegah interrupt dengan menggunakan mask bit khusus
interrupt.Mask bit ini adalah bagian dari flag register pada microprocessor 8086 yang dikenal
sebagai interrupt flag (IF), jika bit ini clear (IF=0), dan terjadi permintaan interrupt pada pin
Interrupt Request, maka permintaan tersebut akan diabaikan.
Non-Maskable Interrupt (NMI)
Ada beberapa interrupt yang mana tidak dapat di mask atau diabaikan oleh processor, hal
ini terkait dengan tugas-tugas prioritas tinggi yang tidak boleh diabaikan (seperti terjadi pariti
pada memori atau kegagalan BUS). NMI memiliki prioritas yang absolut, dan ketika itu terjadi,
processor menyelesaikan siklus memori saat ini, dan kemudian bercabang ke rutin khusus yang
ditulis untuk menangani permintaan interrupt.
5
6. Interrupt pada 8086
Adapun urutan dari proses interrupt pada microprocessor 8086 dapat dijelaskan sebagai
berikut:
1. Interface eksternal mengirim suatu sinyal interrupt ke pin Interrupt Request (INTR), atau suatu
internal interrupt terjadi.
2. CPU menyelesaikan instruksi yang berlangsung dan mengirim (untuk suatuhardware interrupt)
dan mengirim Interrupt Acknowledge (INTA) ke interface hardware.
Hendra, MT. & Hartono, M.Kom. 19 Pemrograman Bahasa Rakitan
3. Interrupt jenis N (masing-masing interrupt memiliki nomor) dikirim ke Central Processing
Unit (CPU) melalui data bus dari interface hardware.
4. Isi dari register flag didorong ke stack.
5. Flag interrupt (IF) dan trap (TF) di clear, hal ini akan mencegah pin INTR dan kemampuan
single-step untuk proses debugging (trap)
6. Isi dari register CS didorong ke Stack
7. Isi dari register IP didorong ke Stack
8. Isi dari vektor interrupt diambil, dari (4 x N) dan kemudian ditempatkan ke IP dan dari (4 x N
+ 2) ke CS, sehingga instruksi berikutnya yang akan dijalankan adalah procedure dari interrupt
service berdasarkan alamat pada interrupt vector.
9. Ketika kembali dari rutin interrupt-service oleh instruksi Interrupt Return (IRET),
nilai IP, CS dan register Flag akan ditarik dari Stack dan kembali ke kondisi
sebelum terjadinya interrupt.
6
7. Software Interrupt
Software interrupt merupakan fungsi-fungsi yang disediakan oleh BIOS maupun sistim
operasi, dimana fungsi-fungsi tersebut membuat tugas pemrograman menjadi lebih mudah, dari
pada menulisnya sendiri dari awal, anda cukup mengirimkan nilai input yang dibutuhkan melalui
register, kemudian memanggil rutin interrupt tersebut, dan selanjutnya rutin interrupt akan
melakukan fungsinya dan mengembalikan nilai hasil proses melalui register.
Fungsi yang tersedia dalam interrupt dapat terdiri dari layanan hardware seperti screen,
diskdrive, printer, serial port dan keyboard, maupun layanan secara software seperti directory
dan file.
Untuk melakukan panggilan terhadap rutin interrupt menggunakan perintah INT N
Dimana N merupakan nomor interrupt yang dapat bernilai 0 s/d 255, yang umumnya ditulis
secara hexadecimal 0 s/d FF Pada kenyataannya masing-masing interrupt terbagi lagi sub-sub
layanan, yang ditentukan pada nilai register AH, sebelum interrupt tersebut dipanggil, sehingga
kitadapat memiliki 256 x 256 = 65536 fungsi layanan. Hendra, MT. & Hartono, M.Kom. 20
Pemrograman Bahasa Rakitan
Pemakaian Interrupt
Seperti yang telah dijelaskan sebelumnya, salah satu parameter layanan fungsi
interruptadalah sub layanan yang ditentukan oleh nilai register AH, selain nilai register AH, kita
juga perlu mengisi nilai-nilai register lainnya sesuai dengan kebutuhan layanan interrupt tersebut.
Contoh:
INT 21,9 - Print String
AH = 09
DS:DX = menunjuk alat suatu striung yang diakhir dengan "$"
7
8. returns nothing
- outputs character string to STDOUT up to "$"
- backspace is treated as non-destructive
- if Ctrl-Break is detected, INT 23 is executed
Berdasarkan data tersebut diatas, maka untuk pemakaian interrupt $21, sub layanan
$9dengan fungsi “Print String”, maka perlu ditentukan nilai register AH=$9, dan kemudian nilai
register DS:DX menunjuk ke alamat suatu string yang diakhiri dengan '$'. Coba kita review
kembali program hello world sebelumnya. Dimana kita menggunakan INT $21 sub layanan
AH=$9 untuk mencetak tulisan yang berada dioffset DX=$102. Jadi dalam hal ini AH dan DX
merupakan parameter bagi INT $21.
0B11:0100 jmp 112
0B11:0102 db 'hello world !',0d,0a,'$'
0B11:0112 mov ah,9
0B11:0114 mov dx,102
0B11:0117 int 21
0B11:0119 mov ah,4c
0B11:011B int 21
Dalam hal ini kita tidak menentukan nilai DS, karena secara default pada program jenis
COM, nilai DS, ES, dan SS adalah sama dengan CS.
Pada contoh sebelumnya kita bekerja dengan rutin interrupt yang tidak mengembalikan
hasil, tetapi hanya proses mencetak string ke layar, berikut ini kita akan membahas rutin interrupt
yang mengembalikan hasil.
INT 21,8 - Console Input Without Echo
AH = 08
Hendra, MT. & Hartono, M.Kom. 21
Pemrograman Bahasa Rakitan
8
9. on return:
AL = character from STDIN
- returns 0 for extended keystroke, then function must be
called again to return scan code
- waits for character from STDIN and returns data in AL
- if Ctrl-Break is detected, INT 23 is executed
Berdasarkan data tersebut diatas, maka untuk menjalankan fungsi Int $21 “Console Input
Without Echo”, kita perlu ditentukan nilai register AH=$8, dan interrupt rutin akan menunggu
karakter dari STDIN, jika ada karakter yang diketik, maka akan disimpan di register AL.
Untuk kongkritnya mari kita lihat contoh berikut ini, dimana setelah mencetak
pesan“Ketik huruf A untuk selesai”, program akan menanti input dari keyboard dengan
menggunakan INT $21 sub layanan AH=$8, dan nilai ASCII dari input keyboard akan
dikembalikan di register AL. Selanjutnya program dapat membandingkan nilai register AL
dengan $41 (65 desimal).
0B11:0100 mov ah,9
0B11:0102 mov dx,113
0B11:0105 int 21
0B11:0107 mov ah,8 ;baca dari STDIN tanpa echo
0B11:0109 int 21 ;karakter dikembalikan ke AL
0B11:010B cmp al,41
0B11:010D jnz 100
0B11:010F mov ah,4c
0B11:0111 int 21
0B11:0113 db „Ketik huruf A untuk selesai‟,0d,0a,‟$‟
0B11:0131
9
10. Latihan
1. Misalkan diberikan suatu data interrupt sebagai berikut:
INT 21,39 - Create Subdirectory (mkdir)
AH = $39
DS:DX = pointer to ASCIIZ path name
on return:
CF = 0 if successful
= 1 if error
AX = error code (see DOS ERROR CODES)
Hendra, MT. & Hartono, M.Kom. 22
Pemrograman Bahasa Rakitan
- creates specified subdirectory
- returns error if directory already exists, element of the path
is not found, directory full or write protected disk
Catatan: ASCIIZ adalah suatu string yang diakhiri dengan null (0)
Buatlah sebuah program assembly yang dapat membuat directory di E:Hendra.
2. Misalkan diberikan suatu data interrupt sebagai berikut:
INT 21,3B - Change Current Directory (chdir)
AH = $3B
DS:DX = pointer to ASCIIZ path name
on return:
CF = 0 if successful
= 1 if error
AX = error code if CF set (see DOS ERROR CODES)
- changes the current directory to the directory specified
by pointer DS:DX
Buat program yang dapat mengaktifkan ke directory E:Hendra.
10
11. 3. Misalkan diberikan suatu data interrupt sebagai berikut:
INT 21,56 - Rename File
AH = $56
DS:DX = pointer to old ASCIIZ path/filename
ES:DI = pointer to new ASCIIZ path/filename
on return:
AX = error code if CF set (see DOS ERROR CODES)
- supports full pathnames and allows renaming files across
directories and in DOS 3.x allows renaming subdirectories
- does not support use of wildcards unless invoked from via
INT $21, $5D in which case error code $12 is returned
- unpredictable result may occur if an opened file is renamed
- see Bibliography reference to "Undocumented DOS"
Buatlah program yang dapat mengubah directori E:Hendra menjadi E:Susan
Hendra, MT. & Hartono, M.Kom. 23
Pemrograman Bahasa Rakitan
Quiz :
1. Jika anda diberi data sebagai berikut
INT 10h / AH = 2 – setting posisi cursor.
input:
DH = baris.
DL = kolom.
BH = nomor halaman (0..7).
Contoh:
mov dh, 10
mov dl, 20
mov bh, 0
mov ah, 2
int 10h
11
12. Buatlah program yang dapat mencetak tulisan “Hello World” pada lokasi 10,10.
2. Jika anda diberi data sebagai berikut
INT 10h / AH = 03h – mendapatkan posisi cursor dan ukuran.
input:
BH = page number.
return:
DH = row.
DL = column.
CH = cursor start line.
CL = cursor bottom line.
Untuk menyimpan nilai register 16-bit ke Stack anda dapat mengunakan perintah
PUSH, dan untuk mengambil kembali nilai dari Stack anda dapat menggunakan
POP.
Contoh:
Push DX
Pop DX
Buatlah program yang dapat mencetak tulisan “Hello World” pada lokasi 10,10
dan mengembalikan posisi cursor ke lokasi semula sebelum proses pencetakan.
Hendra, MT. & Hartono, M.Kom. 24
Pemrograman Bahasa Rakitan
12
13. 3. Jika anda diberi data sebagai berikut
INT 10h / AH = 06h – menggulung layar ke atas.
INT 10h / AH = 07h – menggulung layer ke bawah.
input:
AL = jumlah baris yang digulung (00h = membersihkan layar).
BH = attribute untuk baris kosong pada bagian bawah window.
CH, CL = row, column sisi kiri atas jendela.
DH, DL = row, column sisi kanan bawah jendela.
Atribut
HEX BIN COLOR
0 0000 black
1 0001 blue
2 0010 green
3 0011 cyan
4 0100 red
5 0101 magenta
6 0110 brown
7 0111 light gray
8 1000 dark gray
9 1001 light blue
A 1010 light green
B 1011 light cyan
C 1100 light red
D 1101 light magenta
E 1110 yellow
F 1111 white
Jika nilai BH = $07, berarti warna background adalah black (0), dan warna foreground adalah
light gray (7).
Jumlah Baris = 0 s/d 24
Jumlah Kolom = 0 s/d 79
13
14. Buatlah program yang mensimulasi perintah CLS pada DOS, dan mengeserkursor ke posisi
sudut kiri atas.
4. Jika anda diberi data berikut :
INT 16h / AH = 00h - ambil keystroke dari keyboard (no echo).
return:
AH = BIOS scan code.
Hendra, MT. & Hartono, M.Kom. 25
Pemrograman Bahasa Rakitan
AL = ASCII character.
(if a keystroke is present, it is removed from the keyboard buffer).
INT 10h / AH = 0Eh - teletype output.
input:
AL = karakter yang dicetak.
Fungsi ini menampilkan suatu karakter pada layer, memajukan cursor dan
mengulung layer bila perlu, pencetakan dilakukan pada halaman yang aktif.
Contoh:
mov al, 'a'
mov ah, 0eh
int 10h
Buatlah program yang mengambil satu ketukan dari keyboard dan mencetak
kelayar pada posisi cursor aktif.
14