Interupsi dapat dipandang sebagai jumlah fungsi. Fungsi-fungsi ini memudahkan pemrograman, bahkan untuk menulis kode mencetak karakter. Anda dapat dengan mudah memanggil interupsi yang bersesuaian dan melakukan fungsi pada interupsi tersebut untuk Anda. Ada juga fungsi interupsi yang bekerja pada disk drive atau hardware lainnya. Pada saat Anda memanggil suatu fungsi maka hal itu dinamakan software interrupts. Interupsi yang dipicu oleh hardware lainnya disebut hardware interrupts.
Saat ini kita akan membahas pada software interupsi, untuk membuat software interrupt pada suatu instruksi yaitu INT, syntaksnya adalah:
INT value
Dimana value berupa angka antara 0 – 255 (0h – FFh), umumnya kita menggunakan angka heksadesimal. Anda mungkin berfikir hanya ada 256 fungsi, tapi sebenarnya kurang tepat. Tiap interupsi masih memiliki subfunction. Untuk menentukan suatu subfunction, register AH harus di set sebelum memanggil interupsi. Setiap interupsi hampir memiliki 256 sub fungsi, sehingga total subfungsi yang dimiliki adalah 256 * 256 = 65536. Secara umum register AH yang digunakan, tapi suatu saat register lain juga dipakai. Pada umumnya register lain digunakan untuk mengirim parameter dan data ke subfunction.
Contoh berikut ini menggunakan INT 10h, subfunction 0Eh untuk mencetak pesan “Hello!”. Fungsi ini menampilkan karakter ke layar. Compile dan emulator lalu eksekusikan program:
#MAKE_COM# ;instruct complier to make COM File ORG 100h ;the sub-function that we are using ;does not modify the AH register on ;return, so we may set it only once MOV AH,0EH ;select sub-function ;INT 10h/ 0Eh sub-function ;receives an ASCII code of ;the character that willbe ;printed in AL register... MOV AL,'H' ;ASCII code: 72 INT 10H ;print it MOV AL,'e' ;ASCII code:101 INT 10H ;print it MOV AL,'l' ;ASCII code:108 INT 10H ;print it MOV AL,'l' ;ASCII code:108 INT 10H ;print it MOV AL,'o' ;ASCII code:111 INT 10H ;print it MOV AL,'!' ;ASCII code:33 INT 10H ;print it RET ;returns to operating system
Sehingga jika di eksekusi akan menghasilkan tampilan berikut:
Cek memori:
Kegiatan 1: Buatlah program pada emulator sesuai dengan listing program di bawah ini
#MAKE_COM$ org 100h MOV AH,00h INT 16h MOV AH,00h INT 16h MOV a[1],AL MOV AH,00h ;INT 16h merupakan INT 16h ;instruksi untuk memasukkan inputan dari keyboard MOV a[2],AL MOV AH,00h INT 16h MOV a[3],AL MOV AH,00h INT 16h MOV a[4],AL MOV AH,00h INT 16h MOV a[5],AL MOV AH,00h INT 16h MOV a[6],AL MOV AH,00h INT 16h MOV a[7],AL MOV AH,00h INT 16h MOV a[8],AL MOV AH,00h INT 16h MOV a[9],AL MOV AH,00h INT 16h MOV a[10],AL MOV AH,00h INT 16h MOV a[11],AL MOV AH,00h INT 16h MOV AH,0Eh INT 10h MOV AL,a[11] INT 10h ;cetak output Array a indeks ke 11 MOV AL,a[10] INT 10h MOV AL,a[9] INT 10h MOV AL,a[8] INT 10h MOV AL,a[7] INT 10h MOV AL,a[6] INT 10h MOV AL,a[5] INT 10h MOV AL,a[4] INT 10h MOV AL,a[3] INT 10h MOV AL,a[2] INT 10h MOV AL,a[1] INT 10h MOV AL,a[0] INT 10h RET a DB 82,67,68,69,70,71,72,73,74,75,76,77 ;definisi array a dalam Define Byte (DB) ;dan dimasukkan nilai Byte yang dapat dibaca ;terhadap inputan yang dimasukkan
Emulate program tersebut, jika terdapat kesalahan, silahkan diperbaiki namun tidak boleh mengubah nilai variabel-nya
Pada saat program di RUN akan muncul suatu jendela, kemudian ketikkan pada keyboard huruf R,O,S,E,S,O,R,P,O,R,K,I,M secara berurutan.
Hal-hal yang harus dianalisis!
1. Amati isi memori pada alamat program dan variabel yang disimpan (keadaan memori setelah program diemulasi)
2. Amati perubahan register pada saat program dieksekusi (setiap single step instruksi) (Keadaan register setelah dan sebelum INT 16h dan INT 10h pada program dieksekusi)
3. Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi (Catat tampilan pada “Emulator Screen” saat program selesai di RUN)
4. Amati perubahan isi memori pada alamat variabel disimpan (Keadaan memori setelah semua instruksi dijalankan)
5. Jelaskan tentang program di atas
– Apa fungsi register AH, AL dan variabel a pada program di atas? – Apa fungsi dari INT 10h dan INT 16h pada program diatas?
– Kenapa register AH selalu diset 0 saat INT16h dijalakan sedangkan register AH hanya diset 0Eh satu kali saja?
Kegiatan 2:
- Ketiklah listing dibawah ini
MOV AH,2 MOV DH,0 MOV DL,0 INT 10H MOV DL,069 INT 21H MOV DH,2 MOV DL,2 INT 10H MOV DL,076 INT 21H MOV DH,4 MOV DL,4 INT 10H MOV DL,073 INT 21H MOV DH,6 MOV DL,6 INT 10H MOV DL,078 INT 21H MOV DH,8 MOV DL.8 INT 10H MOV DL,083 INT 21H RET
- Emulate program
- Amati isi memori sebelum intruksi dieksekusi
(Keadaan memori segmen kode)
- Amati perubahan register pada saat program dieksekusi (setiap single step instruksi)
(Keadaan register setelah dan sebelum INT 10h dan INT 21h pada program dieksekusi)
- Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi?
(Catat tampilan “Emulator Screen” saat program selesai di RUN)
- Jelaskan tentang program di atas Edit listing 1 dengan:
- Ganti instruksi pada baris 7, 11, 16, 21 dan 26 dengan instruksi berikut berturut-turut:
7 MOV DL,77 12 MOV DL,73 17 MOV DL,75 22 MOV DL,82 27 MOV DL,79
- Print Screen jendela “Emulator Screen” yang muncul setelah program di RUN
- Jelaskan tentang program di atas
- Jelaskan kegunaan khsusus dari register DL, DH, AL dan AH pada program di atas
- Kenapa setelah instruksi INT 10 dieksekusi, terjadi perubahan isi register CS = F400 dan IP = 190
- Sub fungsi berapa yang dikerjakan pada kedua interupsi INT 10h dan INT
21h yang terdapat pada program di atas? Jelaskan fungsinya
- Berapa kapasitas memori yang diperlukan untuk menyimpan program?
- Buatlah program yang sama dengan menyimpan karakter yang ditampilkan pada variable
Kegiatan 3:
- Ketiklah tulisan berikut pada notepad, dan simpan dengan nama bukanfilee.txt!
ini adalah kalimat yang diambil dari bukanfilee.txt
simpan pada direktori c:\emu8086\myBuild
Ketiklah listing dibawah ini:
MOV AL,2 LEA DX.bukanfile MOV AH,3Dh INT 21H MOV handle,AX MOV BX,handle MOV CX,30 LEA DX,data MOV AH,3FH INT 21H MOV AH,9 INT 21H RET bukanfile db "bukanfilee.txt", 0 handle dw ? data db "coba baca karakter dari file! $"
- Emulate program
- Amati perubahan isi memori sebelum intruksi dieksekusi
(Keadaan memori segmen kode)
- Amati perubahan register pada saat program dieksekusi (setiap single step instruksi)
(Keadaan register setelah dan sebelum INT 21h pada program dieksekusi)
- Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi?
(Catat tampilan “Emulator Screen” saat program selesai di RUN)
- Jelaskan tentang apa program di atas o Apa fungsi dari program diatas? o Berapa banyak instruksi yang digunakan pada program di atas?
- Pada saat intruksi bari ke 6 dieksekusi, terjadi perubahan nilai register AX, apa penyebabnya?
- Sub function berapa yang digunakan untuk membaca data dari file?
Pada alamat berapa data tersebut disimpan? o Apa fungsi variable handle pada program diatas?
TUGAS
Modifikasi program pada kegiatan 3 agar dapat mengganti nama file “bukanfilee.txt” menjadi “INIADALAHFILE.txt”
(CLUE: Gunakan interupsi 21h sub fuction 56h untuk mengganti nama file dan sub function 3Eh untuk menutup file)
Kurang mengerti dimana itu dicopykan. Hehe
Dimana dicopykan itu?
Dimana dicopykan itu??