Anda di halaman 1dari 12

HANDOUT PRAKTIKUM

SISTEM MIKROPROSESSOR
Topik 6 Interrupt
1. Tujuan
Mengenal interrupt dalam sistem mikroprosesor
Dapat menggunakan interrupt dalam program
2. Dasar Teori
A.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 dan setelah selesai akan kembali
ke program utamanya.Ada dua jenis interupsi yaitu interupsi software
dan hardware. Interupsi hardware adalah interupsi yang ditimbulkan oleh
perangkat keras lewat pin NMI dan INTR pada prosesor. Contoh interupsi
harware adalah interupsi timer, keyboar, I/O dsb. Sedangkan interupsi
software adalah lebih mirip sub rutin atau prosedur. Interupsi software
lebih banyak dipakai dalam kode program assembly secara langsung.
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.
B.Vector Interupsi
Setiap interrupt akan mengeksekusi interupt handlernya masingmasing berdasarkan nomornya. Sedangkan alamat dari masing- masing
interupt handler tercatat 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. Untuk
mencari alamat awal dari suatu nomor interupsi digunakan rumus:
Alamat Awal = 4 * Nomor-Interupsi
Sedangkan 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 0000h007Fh.
- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini
hanya ada pada komputer yang menggunakan sistem operasi DOS dan
Interupt Handler-nya di-load ke memori oleh DOS pada saat DOS
digunakan. Lokasi Interupt Vector Table-nya ada di alamat absolut 07Fh3FFh.

BIOS Interupt
Nomor
Nama Interupt
Interupt
*00h
Divide By Zero
*01h
Single Step
*02h
Non MaskableInt(NMI)
*03h
Break point
04h
Arithmatic Overflow
05h
Print Screen
06h
Reserved
07h
Reserved
08h
Clock Tick(Timer)
09h
Keyboard
0Ah
I/O Channel Action
0Bh
COM 1 (serial 1)
0Ch
COM 2 (serial 2)
0Dh
Fixed Disk
0Eh
Diskette
0Fh
LPT 1 (Parallel 1)

Nomor
Interupt
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh

Nama Interupt
Video Service
Equipment Check
Memory Size
Disk Service
Communication (RS-232)
Cassette Service
Keyboard Service
Printer Service
ROM Basic
Bootstrap Loader
BIOS time & date
Control Break
Timer Tick
Video Initialization
Disk Parameters
Graphics Char

* Interrupt ini telah dipastikan kegunaannya oleh sistem untuk


keperluan yang khusus , tidak boleh diubah 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.
DOS Interupt
Nomor Interupt
20h
21h
22h
23h
24h
25h
26h
27h

Nama Interupt
Terminate Program
DOS Function Services
Terminate Code
Ctrl-Break Code
Critical Error Handler
Absolute Disk Read
Absolute Disk Write
Terminate But Stay Resident

C.Mendapatkan Alamat Vector Interupsi


Untuk melihat isi dari alamat awal suatu vektor interupsi dapat
digunakan dua cara. Cara pertama, adalah dengan membaca secara
langsung keempat byte alamat awal yang mencatat alamat berturut-turut
Offset Lo, Offset Hi, Segment Lo dan Segment Hi dari interrupt handler.
Cara kedua adalah dengan menggunakan interupsi 21h service 35h.

Cara kedua lebih mudah untuk digunakan, oleh sebab itu akan kita
gunakan pada program-program selanjutnya.
Untuk menggunakan fungsi ke 35h ini, isilah AH dengan 35h
dan AL dengan nomor vektor interupsi sebelum dilaksanakan
interupsi 21h. Hasil dari interupsi ini akan disimpan pada pasangan
register ES:BX. Dimana ES mencatat alamat segment dan BX mencatat
alamat offset vektor interupsi dari nomor interupsi yang dimasukkan pada
AL.
Ambil_Vec MACRO NoInt,Alamat
MOV AH,35h
;Servis untuk mencari vektor
MOV AL,NoInt
;No interupsi
INT 21h
;Laksanakan
MOV Alamat,BX
;Offset
MOV Alamat[2],ES
;Segment
ENDM
Untuk menggunakan macro ini anda bisa menyediakan suatu
varibel 2 word untuk menampung alamat hasil dari interupsi ini, seperti:
Alamat DW ?,?.
D.
Merubah Vector Interupsi
Secara default, nomor interupsi 00h-1Fh akan menjalankan
program yang terdapat ROM BIOS, dan nomor interupsi 20h-FFh akan
menjalankan program yang disediakan oleh DOS. Interrupt Handler yang
disediakan oleh BIOS ini tidak bisa dihapus secara SoftWare dan selalu
tersedia pada setiap komputer. Sedangkan Interrupt Handler yang
disediakan oleh DOS akan tersedia pada saat sistem operasi DOS telah
masuk kedalam memory komputer.
Suatu interrupt handler bisa saja diganti, misalkan kita
menginginkan penekanan tombol PrtScr tidak mencetak isi layar tetapi
mem-BOOT komputer sama halnya dengan penekanan tombol
Ctrl+Alt+Del. Karena Interrupt handler yang asli, baik dari BIOS maupun
DOS tidak bisa dihapus maka cara yang digunakan untuk merubah
interrupt handler adalah dengan mengganti isi dari Interrupt Vektor
Table.
Untuk mengganti atau mengarahkan suatu nomor interupsi dapat
secara langsung atau menggunakan fungsi 25h dari interupsi 21h.
Untuk menggunakan fungsi ini, isilah AH dengan 25h, AL dengan
nomor interupsi yang akan diganti vektornya, pasangan DS:DX
berisi alamat yang akan dituju pada saat terjadi interupsi tersebut
Arah_Vec MACRO NoInt,Alamat
MOV AX,Alamat[2]
MOV DS,AX
;DS = segment
MOV DX,Alamat ;DX = offset
MOV AH,25h
;Servis untuk merubah vektor
MOV AL,NoInt
;No interupsi
INT 21h
ENDM
Sama seperti macro untuk mendapatkan alamat vektor interupsi,
untuk menggunakan macro ini anda harus menyediakan suatu varibael 2
word yang digunakan sebagai penampung alamat yang akan dituju dari
suatu interupsi, seperti: Alamat DW ?,?.
E. Program Residen
Pada waktu kita menyalakan komputer, ia mencari sistem operasi
di drive A: ataupun C: ,kemudian memasukkannya kedalam memori
bawah. Selanjutnya sistem akan terus berada disitu dan apabila kita

menjalankan program aplikasi misalnya game maka program tersebut


akan disimpan di atas sistem operasi, sehingga sistem operasi tetap ada
walaupun kita sedang menjalankan game tersebut. Inilah yang disebut
residen, yaitu program yang tetap tinggal di memori
Program residen adalah program yang akan menetap di memory
seperti halnya DOS dan program residen ini akan berada tepat diatas
Operating System. Program residen akan dianggap sebagai bagian dari
Operating System sehingga bila dijalankan program aplikasi maka
program aplikasi tersebut akan ditaruh diatas program residen sehingga
program residen kita tetap utuh.
Dalam pembuatan program residen, kita dapat membaginya dalam
2 bagian pokok,yaitu :
- Initialize section, yaitu bagian dari program yang bertugas
meresidenkan residen section. Bagian ini sendiri tidak residen, dan pada
bagian inilah suatu vektor interupsi diubah.
- Residen section, yaitu bagian program yang akan menetap
pada memory. Program ini akan tetap tinggal pada memory sampai
dihilangkan, atau sampai komputer direset.
Untuk membuat program residen, dapat digunakan bentuk
program seperti berikut:
.MODEL SMALL
.CODE
ORG 100h
TData : JMP ResidenKan
+----------------------+
| Tempat untuk
|
| mendefinisikan |
| DATA
|
+----------------------+
Bag_Res PROC
PUSH AX ;
PUSH BX ;
PUSH CX ;
PUSH DX ;
PUSH ES ; Simpan isi semua register
PUSH DI ;
PUSH DS ;
PUSH SI ;
+---------------------+
| Tempat handler |
| interupsi yang
|
| baru
|
+---------------------+
POP SI ;
POP DS ;
POP DI ;
POP ES ;
POP DX ;
Kembalikan isi semua register
POP CX ;
POP BX ;
POP AX ;
IRET ;
Akhir dari interupt handler
Bag_Res ENDP
ResidenKan :
+---------------------+

| Tempat untuk
|
| memanipulasi
|
| vektor interupsi
|
+---------------------+
LEA DX,ResidenKan
INT 27h
END TData
Pada akhir program residen, kembalikanlah nilai semua register
yang disimpan, disertai perintah IRET(Interrupt Return). Perintah IRET
akan mengambil alamat CS dan IP serta nilai Flag pada stack untuk
kembali menuju program yang diselanya. CS, IP dan nilai flag disimpan
pada stack pada saat terjadi interupsi, inilah rahasianya mengapa
program dapat berjalan normal kembali setelah mendapat interupsi.
3. Contoh Program
Berikut contoh-contoh program yang penting(PELAJARI YA!!!)
1. contoh prosedur untuk mengambil waktu.
GETTIME PROC NEAR
mov ax,0
mov ds,ax ;ds=0000h
mov bx,046eh
;bx=046eh
mov ax,[bx]
mov J,ax
;simpan nilai jam dalam biner
dec bx
dec bx ;bx=bx-2
mov ax,[bx]
mov dx,0
mov cx,1092
div cx
mov M,ax
;simpan nilai menit dalam biner
mov ax,dx
mov dx,0
mov cx,18
div cx
mov D,ax
;simpan nilai detik dalam biner
RET
;diperoleh jam:menit:detik dalam biner
ENDP
2. Contoh makro untuk cetak desimal
ctkdes macro angka
LOCAL ULANG,CETAK
MOV AX,angka ; AX = angka yang akan dicetak
MOV BX,10 ; BX = penyebut
XOR CX,CX ; CX = 0
Ulang :
XOR DX,DX ; Cegah sisa bagi menjadi pembilang !
DIV BX ; Bagi angka yang akan dicetak dengan 10
PUSH DX ; Simpan sisa bagi dalam stack
INC CX ; CX ditambah 1
CMP AX,0 ; Apakah hasil bagi sudah habis ?
JNE Ulang ; Jika belum, ulangi lagi !
Cetak :
POP DX ; Ambil 1 angka yang disimpan
ADD DL,'0' ; Ubah angka tersebut dalam kode ASCII
MOV AH,02 ;
INT 21h ; Cetak angka tersebut
LOOP Cetak ; ulangi

ENDM
3. Contoh makro untuk gotoxy
gotoxy
macro x1,y1
mov ah,2 ;servis no 2
mov bh,0 ;halaman =0
mov dh,y1 ;posisi Y
mov dl,x1 ;posisi X
int 10h ;interrupt no 10h
endm
4. Contoh prosedur untuk clearscreen
clear proc far
mov ax,0 ;al=0menggulung semua baris
mov ah,7 ;ah=7no7(gulung jendela ke bwh)
mov cx,0
;koorsinat kiri atas (CH,CL)
mov dh,18h
mov dl,4fh ;koordinat kanan bawah(DH.DL)
mov bh,7
int 10h
;interrupt no 10h
ret
clear endp
5. Contoh program untuk mencetak sebuah karakter dengan int
10h :
.MODEL SMALL
.CODE
ORG 100h
Proses :
MOV AH,09h ; Nilai servis untuk mencetak karakter
MOV AL,'A'
; AL = Karakter yang akan dicetak
MOV BH,00h ; Nomor Halaman layar
MOV BL,93h ; Warna atau atribut dari karakter
MOV CX,03h ; Banyaknya karakter yang ingin dicetak
INT 10h
; Laksanakan !!!
INT 20h
; Selesai ! kembali ke DOS
END Proses
6. Contoh program untuk mencetak kalimat dengan int 10h :
.MODEL SMALL
.CODE
ORG 100h
TData : JMP Proses
Kal0 DB ' Menulis kalimat dengan Atributnya '
Proses:
MOV AX,1300h
; Servis 13h subfungsi 00
MOV BL,10010101b
; Atribut tulisan*
MOV BH,00
; Halaman tampilan 0
MOV DL,20
; Posisi X
MOV DH,12
; Posisi Y
MOV CX,35
; Banyaknya karakter dalam string
LEA BP,Kal0
; ES:BP alamat string
INT 10h
; Cetak kalimat !
INT 20h
; Selesai, kembali ke DOS
END TData
*) Atributnya adalah sebagai berikut
Warna Dasar
+--+--+

Warna Tulisan

+--+--+

Bit-ke 7 6 5 4 3 2 1 0
_ ___ _ ___
BL R G B I R G B
Catatan:
BL = Blink atau berkedip R = Merah
G = Hijau
B = Biru
I = Intensitas warna

Mengapa kita mencetak karakter dengan int 10h,bukan dengan int


21h seperti biasanya?? Pada program residen untuk mencetak pesan
pada layar digunakan interupsi 10h, dan bukannya interupsi Dos fungsi 09
yang biasanya kita gunakan. Mengapa demikian ? Sebagian besar
Interupsi Dos tidak bisa digunakan pada program residen, karena sifat
dari Dos yang tidak reentrant.
4. Tugas
praktikum kali ini akan dicoba sebuah interupt yang memanfaatkan
pemanggilan secara otomatis. Sebenarnya terdapat sebuah interupt
yang dipanggil sebanyak 18.2 kali tiap detik yaitu int 08h. Nah, counter
inilah yang akan kita gunakan sebagai interupt pada praktikum kali ini.
Kita akan membelokkan interupt ini ke sebuah interupt baru yang kita
buat sendiri, misal untuk menghitung waktu atau yang lainnya.
Cobalah dan analisalah program dibawah ini:
.MODEL SMALL
.CODE
ORG 100h
Data :
jmp Proses
nilai dw 0
counter dw 0
c1 dw 0
c2 dw 0
oldint1c LABEL DWORD ;BUAT APA INI?
oldint1c_dua dw ?,?
;BUAT APA INI?
clear proc far
mov ax,0
mov ah,7
mov cx,0
mov dh,18h
mov dl,4fh
mov bh,7
int 10h
ret
clear endp
gotoxy

macro x1,y1
mov ah,2
mov bh,0
mov dh,y1
mov dl,x1
int 10h

endm
detik proc near
inc nilai
xor ax,ax

mov ax,nilai
mov bx,10
xor cx,cx
ulangd :
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
jne ulangd
cmp cx,1
je cetakd
cmp cx,2
je ulangd2
gotoxy 33,15
pop dx
add dl,'0'
mov ah,0Ah
mov al,dl
mov bh,00
push cx
mov cx,1
int 10h
pop cx
dec cx
ulangd2 :
gotoxy 34,15
pop dx
add dl,'0'
mov ah,0Ah
mov al,dl
mov bh,00
push cx
mov cx,1
int 10h
;BUAT APA INI? INT 10H???????
pop cx
dec cx
cetakd :
gotoxy 35,15
pop dx
add dl,'0'
mov ah,0Ah
mov al,dl
mov bh,00
push cx
mov cx,1
int 10h
;BUAT APA INI? INT 10H???????
pop cx
loop cetakd
ret
detik endp
newint1c proc near
push ax
push bx
push cx

;BUAT APA INI?

push dx
push es
push di
push ds
push si
pushf
call oldint1c
inc counter
cmp counter,18
jb exit1c
mov counter,0
call detik
exit1c:
pop
pop
pop
pop
pop
pop
pop
pop
iret

si
ds
di
es
dx
cx
bx
ax

endp
in_int proc far
;BUAT APA INI?
push ax
push bx
push cx
push dx
push es
push di
push ds
push si
mov ax,351ch
int 21h
mov dx,bx
mov cx,es
mov bx,offset oldint1c_dua
mov word ptr [bx],dx
mov word ptr [bx+2],cx
push cs
pop ds
mov dx,offset newint1c
mov ax,251ch
int 21h
pop si
pop ds
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret
in_int endp

out_int

out_int

proc far
;BUAT APA INI?
push ax
push bx
push cx
push dx
push es
push di
push ds
push si
mov bx,offset oldint1c_dua
mov dx,[bx]
mov cx,[bx+2]
push cx
pop ds
mov ax,251ch
int 21h
pop si
pop ds
pop di
pop es
pop dx
pop cx
pop bx
pop ax
ret
endp

proses :
call clear
call in_int ;BUAT APA INI?
mov ah,08h
int 21h
call out_int ;BUAT APA INI?
exit :
int 20h
END Data
5. Penutup
Tugas dikumpulkan pada jam praktikum masing-masing dengan
disertai juga print screen dari program yang dianalisa diatas(jadi
harus mencoba dan di print ya)
Pelajarilah juga contoh contoh program,prosedur dan makro diatas dan
ada beberapa ringkasan penggunaan int21h dan int 10h yang dipakai
saat praktikum pada Lampiran
Interrupt tidaklah sulit,kita hanya harus tau cara penggunaanya secara
tepat.
Masih banyak lagi interrupt pada mikroprosesor yang bisa kita
manfaatkan.
Sekian
Selamat Praktikum
Tuhan Memberkati
Good Luck & God Bless You

Thanx 2 Nopex Wu & Sto Assembly

Lampiran
INTERRUPT 21h - Service 35h Get Interrupt Vektor
Fungsi : Untuk mendapatkan alamat vektor interupsi dari suatu nomor
interupsi.
Register Input : AH = 35h,
AL = Nomor Interupsi
Register Output : ES:BX = Alamat vektor interupsi
INTERRUPT 21h - Service 25h Set Interrupt Vektor
Fungsi : Untuk merubah vektor interupsi ke suatu lokasi dengan merubah
alamat awal vektor interupsi.
Register Input :
AH = 25h AL = Nomor Interupsi
DS:DX = Lokasi baru
INTERRUPT 10h - Service 13h Write String
Fungsi : Mencetak string ke Layar
Register Input :
AH = 13h
AL = 00h
BH = nomor halaman BL = atribut untuk string
CX = jumlah karakter pada string
DH,DL = koordinat untuk memulai pencetakan
ES:BP = alamat string yang akan dicetak
Register Output : Tidak Ada.
Penjelasan : Memperlakukan karakter kontrol sesuai fungsinya.
INTERRUPT 10h - Service 0Ah Write Character At Cursor Position
Fungsi : Mencetak karakter pada posisi kursor.
Register Input :
AH = 0Ah
AL = kode ASCII karakter
BH = nomor halaman
CX = jumlah pengulangan pencetakan
Register Output : Tidak Ada.
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa, atribut yang
digunakan akan sama dengan atribut yang lama.
INTERRUPT 10h - Service 09h Write Character And Attribute At Cursor Position
Fungsi : Mencetak karakter dan atribut pada posisi kursor.
Register Input :
AH = 09h
AL = kode ASCII karakter
BH = nomor halaman BL = atribut karakter
CX = jumlah pengulangan pencetakan
Register Output : Tidak Ada.
Penjelasan : Karakter kontrol akan dicetak sebagai karakter biasa.
INTERRUPT 10h - Service 07h Scroll Down Window
Fungsi : Menggulung jendela ke bawah.
Register Input :
AH = 07h
AL = jumlah baris untuk digulung
BH = atribut untuk baris kosong
CH,CL = koordinat kiri atas jendela
DH,DL = koordinat kanan bawah jendela
Penjelasan : AL diisi 00 akan mengosongkan keseluruhan jendela.

INTERRUPT 10h - Service 02h Set Cursor Position


Fungsi : Meletakkan kursor pada posisi tertentu
Register Input :
AH = 02h
BH = nomor halaman tampilan
DH = nomor baris (dimulai 00)
DL = nomor kolom (dimulai 00)
Register Output : Tidak Ada.

Anda mungkin juga menyukai