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.
Dalam contoh kita ini bila game
tadi telah selesai maka ia akan lenyap dari memori dan bila kita menjalankan
program aplikasi lainnya, misalnya WS maka tempat memori yang digunakan oleh
game kita akan digunakan oleh WS. Ini adalah contoh dari program yang tidak
residen karena ia hanya sementara waktu berada di memori. Contoh program
residen yang terkenal misalnya SideKick, Print(dos) dan Doskey.
+------------------+ +------------------+
|
(USER AREA RAM) | | (USER
AREA RAM) |
| | | |
|
PROGRAM | |
PROGRAM |
|
APLIKASI 1 | |
APLIKASI 2 |
|
GAME | | WS
|
+------------------+ +------------------+
|
OPERATING SYSTEM | | OPERATING
SYSTEM |
+------------------+
+------------------+
Program residen adalah program
yang akan menetap dimemory 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.
+------------------+
+------------------+
|
(USER AREA RAM) | | (USER
AREA RAM) |
|
|
| |
|
PROGRAM | |
PROGRAM |
|
APLIKASI 1 | |
APLIKASI 2 |
|
GAME | |
WS |
+------------------+
+------------------+
|
RESIDENT SECTION | | RESIDENT
SECTION |
+------------------+ +------------------+
|
OPERATING SYSTEM | | OPERATING
SYSTEM |
+------------------+
+------------------+
Program residen adalah suatu bentuk program
yang menarik. Karena program residen menetap pada memory, maka semakin banyak
program residen dijalankan, memory akan semakin berkurang untuk digunakan oleh
program aplikasi. Program residen, haruslah dibuat sekecil mungkin untuk
menghindari pemakaian memory yang terlalu banyak. Hanya dengan Assembler-lah,
sebuah program dapat dibuat sekecil mungkin! Bayangkan, program untuk menghapus
layar, dengan bahasa tingkat tinggi seperti pada pascal dan C digunakan sekitar
3232 byte, sedangkan pada assembler sekitar 7 byte.
MODEL
PROGRAM RESIDEN
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.
Pada
program sebelumnya, kita selalu mengakhiri program dengan interupsi 20h yang
akan mengembalikan kontrol program sepenuhnya pada DOS. Pada program residen,
program akan selalu kita akhiri dengan interupsi 27h ataupun
interupsi 21h fungsi 31h. Untuk menggunakan
interupsi 27h, kita tinggal mengisi pasangan register DS:DX dengan batas memory
yang akan diresidenkan.
+------------------+
| |
| |
| USER AREA RAM |
| |
| |
+------------------+<--DS:DX
| RESIDENT
SECTION |
+------------------+
| OPERATING
SYSTEM |
+------------------+
Untuk membuat program residen, anda bisa menggunakan
bentuk program seperti gambar berikut.
----------------------------------------------------------------
.MODEL
SMALL
.CODE
ORG
100h
TData
: JMP Res_kan
+------------------+
|
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
Res_Kan
:
+------------------+
| Tempat untuk |
| memanipulasi |
| vektor
interupsi |
+------------------+
LEA
DX,Res_Kan
INT
27h
END
TData
--------------------------------------------------------------
PROGRAM RESIDEN PERTAMA
Pada program berikut akan kita lihat bagaimana
membelokkan merubah vektor interupsi PrtScr menuju program kita. Dengan cara
yang sama anda bisa membelokkan vektor interupsi yang lain, dan membuat suatu
handler yang baru untuknya.
;/======================================================\;
;
Program : RES1.ASM ;
;
Author : S’to ;
; Fungsi : Program residen yang membelokkan ;
;
intrupsi 05 atau interupsi PrtScr ;
;
menuju program buatan sendiri ;
;\======================================================/;
.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"
Membuat Program Residen
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 !!
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 ;
159
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.
Buka notepad, lalu ketikan program tersebut.
Kemudian simpan, jalankan program tersebut menggunakan TASM dan cetak menggunakan Tlink. Setelah program dijalankan maka hasilnya seperti berikut.
Jika telah selesai, buka kembali file Rontok.asm yang telah kita buat sebelumnya .
Pada saat menjalankan program rontok tersebut ketika kita menekan Pause Break maka program tersebut tidak akan berhenti tetapi ketika kita menekan Ctrl+Prtsc maka program tersebut akan berhenti.
Selesai..............................................
Untuk mendownload klik disini DOWNLOAD
Tidak ada komentar:
Posting Komentar