Senin, 08 Desember 2014

Bahasa Rakitan: Membuat Program Residen



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: