TUTORIAL MEMBUAT PROGRAM RESIDEN PADA ASSEMBLE
1.BUKALAH PROGRAM ASSEMBLE LALU MASUKKLAH KE MENU EDIT
KEMUDIAN KETIKKAN PERINTAH BERIKUT
2.KEMUDIAN SIMPAN PROGRAM DAN JALANKAN DENGAN TASM DAN TLINK
Bila program dijalankan, maka tombol PrtScr sudah tidak akan
berfungsi lagi. Setiap kali tombol PrtScr ditekan, pada posisi 20,12 akan
ditampilkan pesan:
Interupsi 5<PrtScr> telah di belokkan !!
ANALISA PROGRAM RESIDEN
Perhatikanlah, bahwa pada program ini terdapat
2 bagian pokok, yaitu bagian yang residen dan bagian yang meresidenkan. Bagian
yang meresidenkan hanya dijalankan sekali, sedangkan bagian yang residen akan
dijalankan setiap kali terjadi penekanan tombol PrtScr. Bagian yang
meresidenkan adalah:
Res_Kan :
MOV AH,25h ;
MOV AL,NoInt ; Untuk merubah vektor interupsi
LEA DX,Bag_Res ; 05 menuju 'Bag_Res'
INT 21h ;
LEA DX,Res_Kan ;
INT 27h ; Untuk meresidenkan bagian
END TData ; "Bag_Res"
Bagian ini tugasnya meresidenkan bagian
Bag_Res. Sebelum bagian Bag_Res diresidenkan, vektor interupsi PrtScr(05)
diubah menuju progam Bag_Res. Bila anda hanya merubah interupsi PrtScr menuju
program Bag_Res tanpa diresidenkan, maka akan menyebabkan komputer anda menjadi
hang, mengapa? Walaupun vektor interupsi tetap menunjuk pada lokasi atau alamat
yang sama, tetapi tempat yang digunakan program kita telah diserahkan kepada
Dos untuk digunakan oleh aplikasi lain.
Bag_Res PROC
PUSH AX ;
PUSH BX ;
PUSH CX ;
PUSH DX ;
PUSH ES ; Simpan isi semua register
PUSH DI ;
PUSH DS ;
PUSH SI ;
Ini adalah awal dari bagian yang residen.
Simpanlah semua nilai register pada awal program residen untuk mencegah
terganggunya program lain yang sedang berjalan pada saat tombol PrtScr ditekan.
MOV AX,1300h ;
MOV BL,01001111b ;
MOV BH,00 ;
MOV DL,20 ;
MOV DH,12 ; Program interupt handler PrtScr
MOV CX,44 ; yang baru.
PUSH CS ;
POP ES ;
LEA BP,Pesan ;
INT 10h ;
Bagian ini dapat dikatakan sebagai handler baru
bagi interupsi PrtScr. Tombol PrtScr yang biasanya mencetak tampilan layar pada
printer akan berubah menjadi mencetak pesan pada layar. dengan demikian anda
bisa membuat handler baru yang akan melakukan sesuatu setiap kali terjadi
penekanan tombol PrtScr.
Perhatikanlah! :
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. Masalah ini akan
kita bicarakan lebih lanjut nantinya.
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
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.
Tidak ada komentar:
Posting Komentar