Skip to content


Interupsi pada Mikroprosesor Emu8086

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:

  1. 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
  1. Emulate program
  2. Amati isi memori sebelum intruksi dieksekusi

(Keadaan memori segmen kode)

  1. Amati perubahan register pada saat program dieksekusi (setiap single step instruksi)

(Keadaan register setelah dan sebelum INT 10h dan INT 21h  pada program dieksekusi)

  1. Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi?

(Catat tampilan “Emulator Screen” saat program selesai di RUN)

  1. 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
  1. 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:

  1. 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! $"
  1. Emulate program
  2. Amati perubahan isi memori sebelum intruksi dieksekusi

(Keadaan memori segmen kode)

  1. Amati perubahan register pada saat program dieksekusi (setiap single step instruksi)

(Keadaan register setelah dan sebelum INT 21h pada program dieksekusi)

  1. Amati perubahan yang terjadi pada jendela “Emulator Screen” pada saat program dieksekusi?

(Catat tampilan “Emulator Screen” saat program selesai di RUN)

  1. 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)

Posted in Computer and Electronics, Depan.

Tagged with , , , .


3 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Risdiyan says

    Kurang mengerti dimana itu dicopykan. Hehe

  2. Risdiyan says

    Dimana dicopykan itu?

  3. Risdiyan says

    Dimana dicopykan itu??



Some HTML is OK

or, reply to this post via trackback.