Program
Residence
Buka
Program Dosbox karna jika di jalankan di CMD printah rontok tidak akan
berjalan
Ketikan printah
a. mount
d d:\1ca\asm
b. d:
Maka
akan muncul program assembly, seperti gambar di bawah Buka lagi program cmd
yang ke dua untuk melakukan pemrograman
atau yang kita sebut coding, ketikan
perintah
a. cd \
b. d:
c. cd
1ca/asm
d. edit
atau
bisa dilihat di bawah ini :
Maka
akan muncul program assembly, seperti gambar di bawah ini :
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)
Buka
DOSBOX untuk menguji program yang telah kita buat tadi, dengan mengetikan
perintah :
a. TASM
(nama file) cth : TASM Res1.ASM -> untuk melihat apakah program yg kita buat
ada yang error dll.
b. tlink/t
Res1-> untuk membuat file objek ke bentuk file yang dapat di eksekusi
(EKTENSI .COM .EXE)
c. kemudian
untuk melihat karakter yang telah kira buat tinggal mengetikan nama file yang
kita buat tadi contoh (Res1) enter, maka
akan tampil karakter yg kita buat.
Seperti
di bawah ini :
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.
ConversionConversion EmoticonEmoticon