2. Jika sudah, sekarang kita akan memulai membuat program tulisan rontok ke samping kiri.
3. Bukalah tampilan command prompt terlebih dahulu dengan cara klik start -> run -> cmd. Maka tampilan akan keluar seperti ini.
4. Sekarang kita akan masuk ke dalam folder tasm, tlink, dan rtm yang telah kita buat tadi. Lalu kita akan masuk kedalam tampilan menu edit pada command prompt. Caranya sebagai berikut.
5. Lalu tekan enter setelah tulisan edit. Maka akan tampil seperti ini.
6. Selanjutnya kita akan menginput tulisan program residence merubah vektor interupsi tersebut pada menu edit ini. Caranya sebagai berikut.
Berikut kode program residence
.MODEL
SMALL
.CODE
ORG
100h
TData
: JMP Res_kan
Pesan
DB ' Interupsi 5<PrtScr> telah di belokkan !! '
NoInt
EQU 05h
Bag_Res
PROC
PUSH
AX ;
PUSH
BX ;
PUSH
CX ;
PUSH
DX ;
PUSH
ES ; Simpan isi semua register
PUSH
DI ;
PUSH
DS ;
PUSH
SI ;
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 ;
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
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"
Sesudah
memasukan kode program atau coding, save as file nya dengan format (.ASM)
Bila program 24.2. 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 !!
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.Inilah tutorial bagaimana cara mencetak program residence.
Tidak ada komentar:
Posting Komentar