APA ITU 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 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

Sebagai contoh disini kita akan membuat Program residen yang membelokkan intrupsi 05 atau interupsi PrtScr menuju program buatan sendiri.


Pertama-tama, buka terlebih dahulu Command Prompt pada PC anda. Lalu masuk ke menu edit layar biru, ketikkan program dibawah ini pada layar tersebut, lalu save sesuai dengan keinginan anda.


.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"


Jalankan program tersebut dengan di compile terlebih dahulu menggunakan TASM spasi nama file, kemudian cetak program dengan menggunakan TLINK/t seperti biasa.

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 ;

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.

Leave a Reply