Interrupt

9,184 views
8,979 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,184
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
293
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Interrupt

  1. 1. INTERRUPT3.1. PENGERTIAN INTERRUPT Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu.Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannyadan melakukan apa yang diminta oleh yang menginterupsi. Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi nomor 0sampai 255. Nomor interupsi 0 sampai 1Fh disediakan oleh ROM BIOS, yaitu suatu IC didalamkomputer yang mengatur operasi dasar komputer. Jadi bila terjadi interupsi dengan nomor 0-1Fh,maka secara default komputer akan beralih menuju ROM BIOS dan melaksanakan program yangterdapat disana. Program yang melayani suatu interupsi dinamakan Interrupt Handler.3.2. VEKTOR INTERUPSI Setiap interrupt akan mengeksekusi interrupt handlernya masing-masing berdasarkannomornya. Sedangkan alamat dari masing- masing interupt handlertercatat di memori dalambentuk array yang besar elemennya masing-masing 4 byte. Keempat byte ini dibagi lagi yaitu 2byte pertama berisi kode offset sedangkan 2 byte berikutnya berisi kode segmen dari alamatinterupt handler yang bersangkutan. Jadi besarnya array itu adalah 256 elemen dengan ukuranelemen masing-masing 4 byte. Total keseluruhan memori yang dipakai adalah sebesar 1024 byte(256 x 4 = 1024) atau 1 KB dan disimpan dalam lokasi memori absolut 0000h sampai 3FFh.Array sebesar 1 KB ini disebut Interupt Vector Table (Table Vektor Interupsi). Nilai-nilai yangterkandung pada Interupt Vector Table ini tidak akan sama di satu komputer dengan yanglainnya. 1
  2. 2. Interupt yang berjumlah 256 buah ini dibagi lagi ke dalam 2 macam yaitu:- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yangmenggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamatabsolut 0000h-007Fh.- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer yangmenggunakan sistem operasi DOS dan Interupt Handler-nya diload ke memori oleh DOS padasaat DOS digunakan. Lokasi Interupt Vector Tablenya ada di alamat absolut 07Fh-3FFh. Nomor Nama Nomor Nama Interrupt Interrupt Interrupt Interrupt *00h Divide By Zero 10h Video Service *01h Single Step 11h Equipment Check *02h Non MaskableInt(NMI) 12h Memory Size *03h Break point 13h Disk Service 04h Arithmatic Overflow 14h Communication (RS-232) 05h Print Screen 15h Cassette Service 06h Reserved 16h Keyboard Service 07h Reserved 17h Printer Service 08h Clock Tick(Timer) 18h ROM Basic 09h Keyboard 19h Bootstrap Loader 0Ah I/O Channel Action 1Ah BIOS time & date 0Bh COM 1 (serial 1) 1Bh Control Break 2
  3. 3. 0Ch COM 2 (serial 2) 1Ch Timer Tick0Dh Fixed Disk 1Dh Video Initialization0Eh Diskette 1Eh Disk Parameters0Fh LPT 1 (Parallel 1) 1Fh Graphics Char Gambar 3.1. BIOS Interrupt 3
  4. 4. Interrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak bolehdirubah oleh pemrogram seperti yang lainnya. DEVIDE BY ZERO : Jika terjadi pembagian dengan nol maka proses akan segera dihentikan. SINGLE STEP : Untuk melaksanakan / mengeksekusi intruksi satu persatu. NMI : Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak dapat dicegah. BREAK POINT : Jika suatu program menyebabkan overflow flag menjadi 1 maka interrupt ini akan melayani pencegahannya dan memberi tanda error. Nomor Nama Interrupt Interrupt 20h Terminate Program 21h DOS Function Services 22h Terminate Code 23h Ctrl-Break Code 24h Critical Error Handler 25h Absolute Disk Read 26h Absolute Disk Write 27h Terminate But Stay Resident Gambar 3.2. DOS Interrupt 4
  5. 5. Didalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakaninterupsi untuk menyelesaikan suatu tugas. Kadang-kadang proses dalam CPU mengalami interrupsi untuk kejadian-kejadianyangperlu segera mendapat respon, seperti pengetikan pada keyboard, proses I/O lainnya, danclock tick untuk mengupdate waktu system. Pada prinsipnya interrupt terbagi atas eksternal, daninternal. Eksternal interruptdibangkitkan oleh proses diluar program seperti proses I/O, danclock, sedangkan prosesInternal interrupt dibangkitkan oleh proses program seperti devide forzero error (Trapsinterrupt) dan Software interrupt (dibangkitkan dengan perintah INT). Ketika suatu interrupt terjadi, processor akan menyelesaikan siklus memori saat ini,danbercabang kepada rutin khusus menanggani interrupt tersebut, status dari program saat iniakan disimpan dan rutin interrupt handle umumnya akan mengembalikan kendali keprogramtermasuk semua nilai register seakan-akan tidak pernah terjadi sesuatu (hanyakehilanganbeberapa siklus CPU), sedangkan Traps interrupt tidak akan kembali ke program danmenghentikan program tersebut.Catatan : Pada bagian ini kita akan lebih memfokuskan diri pada Software interruptMaskable Interrupt Processor dapat mencegah interrupt dengan menggunakan mask bit khususinterrupt.Mask bit ini adalah bagian dari flag register pada microprocessor 8086 yang dikenalsebagai interrupt flag (IF), jika bit ini clear (IF=0), dan terjadi permintaan interrupt pada pinInterrupt Request, maka permintaan tersebut akan diabaikan.Non-Maskable Interrupt (NMI) Ada beberapa interrupt yang mana tidak dapat di mask atau diabaikan oleh processor, halini terkait dengan tugas-tugas prioritas tinggi yang tidak boleh diabaikan (seperti terjadi paritipada memori atau kegagalan BUS). NMI memiliki prioritas yang absolut, dan ketika itu terjadi,processor menyelesaikan siklus memori saat ini, dan kemudian bercabang ke rutin khusus yangditulis untuk menangani permintaan interrupt. 5
  6. 6. Interrupt pada 8086Adapun urutan dari proses interrupt pada microprocessor 8086 dapat dijelaskan sebagaiberikut:1. Interface eksternal mengirim suatu sinyal interrupt ke pin Interrupt Request (INTR), atau suatuinternal interrupt terjadi.2. CPU menyelesaikan instruksi yang berlangsung dan mengirim (untuk suatuhardware interrupt)dan mengirim Interrupt Acknowledge (INTA) ke interface hardware.Hendra, MT. & Hartono, M.Kom. 19 Pemrograman Bahasa Rakitan3. Interrupt jenis N (masing-masing interrupt memiliki nomor) dikirim ke Central ProcessingUnit (CPU) melalui data bus dari interface hardware.4. Isi dari register flag didorong ke stack.5. Flag interrupt (IF) dan trap (TF) di clear, hal ini akan mencegah pin INTR dan kemampuansingle-step untuk proses debugging (trap)6. Isi dari register CS didorong ke Stack7. Isi dari register IP didorong ke Stack8. Isi dari vektor interrupt diambil, dari (4 x N) dan kemudian ditempatkan ke IP dan dari (4 x N+ 2) ke CS, sehingga instruksi berikutnya yang akan dijalankan adalah procedure dari interruptservice berdasarkan alamat pada interrupt vector.9. Ketika kembali dari rutin interrupt-service oleh instruksi Interrupt Return (IRET),nilai IP, CS dan register Flag akan ditarik dari Stack dan kembali ke kondisisebelum terjadinya interrupt. 6
  7. 7. Software Interrupt Software interrupt merupakan fungsi-fungsi yang disediakan oleh BIOS maupun sistimoperasi, dimana fungsi-fungsi tersebut membuat tugas pemrograman menjadi lebih mudah, daripada menulisnya sendiri dari awal, anda cukup mengirimkan nilai input yang dibutuhkan melaluiregister, kemudian memanggil rutin interrupt tersebut, dan selanjutnya rutin interrupt akanmelakukan fungsinya dan mengembalikan nilai hasil proses melalui register. Fungsi yang tersedia dalam interrupt dapat terdiri dari layanan hardware seperti screen,diskdrive, printer, serial port dan keyboard, maupun layanan secara software seperti directorydan file. Untuk melakukan panggilan terhadap rutin interrupt menggunakan perintah INT NDimana N merupakan nomor interrupt yang dapat bernilai 0 s/d 255, yang umumnya ditulissecara hexadecimal 0 s/d FF Pada kenyataannya masing-masing interrupt terbagi lagi sub-sublayanan, yang ditentukan pada nilai register AH, sebelum interrupt tersebut dipanggil, sehinggakitadapat memiliki 256 x 256 = 65536 fungsi layanan. Hendra, MT. & Hartono, M.Kom. 20Pemrograman Bahasa RakitanPemakaian Interrupt Seperti yang telah dijelaskan sebelumnya, salah satu parameter layanan fungsiinterruptadalah sub layanan yang ditentukan oleh nilai register AH, selain nilai register AH, kitajuga perlu mengisi nilai-nilai register lainnya sesuai dengan kebutuhan layanan interrupt tersebut.Contoh:INT 21,9 - Print StringAH = 09DS:DX = menunjuk alat suatu striung yang diakhir dengan "$" 7
  8. 8. returns nothing- outputs character string to STDOUT up to "$"- backspace is treated as non-destructive- if Ctrl-Break is detected, INT 23 is executed Berdasarkan data tersebut diatas, maka untuk pemakaian interrupt $21, sub layanan$9dengan fungsi “Print String”, maka perlu ditentukan nilai register AH=$9, dan kemudian nilairegister DS:DX menunjuk ke alamat suatu string yang diakhiri dengan $. Coba kita reviewkembali program hello world sebelumnya. Dimana kita menggunakan INT $21 sub layananAH=$9 untuk mencetak tulisan yang berada dioffset DX=$102. Jadi dalam hal ini AH dan DXmerupakan parameter bagi INT $21.0B11:0100 jmp 1120B11:0102 db hello world !,0d,0a,$0B11:0112 mov ah,90B11:0114 mov dx,1020B11:0117 int 210B11:0119 mov ah,4c0B11:011B int 21 Dalam hal ini kita tidak menentukan nilai DS, karena secara default pada program jenisCOM, nilai DS, ES, dan SS adalah sama dengan CS. Pada contoh sebelumnya kita bekerja dengan rutin interrupt yang tidak mengembalikanhasil, tetapi hanya proses mencetak string ke layar, berikut ini kita akan membahas rutin interruptyang mengembalikan hasil.INT 21,8 - Console Input Without EchoAH = 08Hendra, MT. & Hartono, M.Kom. 21Pemrograman Bahasa Rakitan 8
  9. 9. on return:AL = character from STDIN- returns 0 for extended keystroke, then function must becalled again to return scan code- waits for character from STDIN and returns data in AL- if Ctrl-Break is detected, INT 23 is executed Berdasarkan data tersebut diatas, maka untuk menjalankan fungsi Int $21 “Console InputWithout Echo”, kita perlu ditentukan nilai register AH=$8, dan interrupt rutin akan menunggukarakter dari STDIN, jika ada karakter yang diketik, maka akan disimpan di register AL. Untuk kongkritnya mari kita lihat contoh berikut ini, dimana setelah mencetakpesan“Ketik huruf A untuk selesai”, program akan menanti input dari keyboard denganmenggunakan INT $21 sub layanan AH=$8, dan nilai ASCII dari input keyboard akandikembalikan di register AL. Selanjutnya program dapat membandingkan nilai register ALdengan $41 (65 desimal).0B11:0100 mov ah,90B11:0102 mov dx,1130B11:0105 int 210B11:0107 mov ah,8 ;baca dari STDIN tanpa echo0B11:0109 int 21 ;karakter dikembalikan ke AL0B11:010B cmp al,410B11:010D jnz 1000B11:010F mov ah,4c0B11:0111 int 210B11:0113 db „Ketik huruf A untuk selesai‟,0d,0a,‟$‟0B11:0131 9
  10. 10. Latihan1. Misalkan diberikan suatu data interrupt sebagai berikut:INT 21,39 - Create Subdirectory (mkdir)AH = $39DS:DX = pointer to ASCIIZ path nameon return:CF = 0 if successful= 1 if errorAX = error code (see DOS ERROR CODES)Hendra, MT. & Hartono, M.Kom. 22Pemrograman Bahasa Rakitan- creates specified subdirectory- returns error if directory already exists, element of the pathis not found, directory full or write protected diskCatatan: ASCIIZ adalah suatu string yang diakhiri dengan null (0)Buatlah sebuah program assembly yang dapat membuat directory di E:Hendra.2. Misalkan diberikan suatu data interrupt sebagai berikut:INT 21,3B - Change Current Directory (chdir)AH = $3BDS:DX = pointer to ASCIIZ path nameon return:CF = 0 if successful= 1 if errorAX = error code if CF set (see DOS ERROR CODES)- changes the current directory to the directory specifiedby pointer DS:DXBuat program yang dapat mengaktifkan ke directory E:Hendra. 10
  11. 11. 3. Misalkan diberikan suatu data interrupt sebagai berikut:INT 21,56 - Rename FileAH = $56DS:DX = pointer to old ASCIIZ path/filenameES:DI = pointer to new ASCIIZ path/filenameon return:AX = error code if CF set (see DOS ERROR CODES)- supports full pathnames and allows renaming files acrossdirectories and in DOS 3.x allows renaming subdirectories- does not support use of wildcards unless invoked from viaINT $21, $5D in which case error code $12 is returned- unpredictable result may occur if an opened file is renamed- see Bibliography reference to "Undocumented DOS"Buatlah program yang dapat mengubah directori E:Hendra menjadi E:SusanHendra, MT. & Hartono, M.Kom. 23Pemrograman Bahasa RakitanQuiz :1. Jika anda diberi data sebagai berikutINT 10h / AH = 2 – setting posisi cursor.input:DH = baris.DL = kolom.BH = nomor halaman (0..7).Contoh:mov dh, 10mov dl, 20mov bh, 0mov ah, 2int 10h 11
  12. 12. Buatlah program yang dapat mencetak tulisan “Hello World” pada lokasi 10,10.2. Jika anda diberi data sebagai berikutINT 10h / AH = 03h – mendapatkan posisi cursor dan ukuran.input:BH = page number.return:DH = row.DL = column.CH = cursor start line.CL = cursor bottom line.Untuk menyimpan nilai register 16-bit ke Stack anda dapat mengunakan perintahPUSH, dan untuk mengambil kembali nilai dari Stack anda dapat menggunakanPOP.Contoh:Push DXPop DXBuatlah program yang dapat mencetak tulisan “Hello World” pada lokasi 10,10dan mengembalikan posisi cursor ke lokasi semula sebelum proses pencetakan.Hendra, MT. & Hartono, M.Kom. 24Pemrograman Bahasa Rakitan 12
  13. 13. 3. Jika anda diberi data sebagai berikutINT 10h / AH = 06h – menggulung layar ke atas.INT 10h / AH = 07h – menggulung layer ke bawah.input:AL = jumlah baris yang digulung (00h = membersihkan layar).BH = attribute untuk baris kosong pada bagian bawah window.CH, CL = row, column sisi kiri atas jendela.DH, DL = row, column sisi kanan bawah jendela.AtributHEX BIN COLOR0 0000 black1 0001 blue2 0010 green3 0011 cyan4 0100 red5 0101 magenta6 0110 brown7 0111 light gray8 1000 dark gray9 1001 light blueA 1010 light greenB 1011 light cyanC 1100 light redD 1101 light magentaE 1110 yellowF 1111 whiteJika nilai BH = $07, berarti warna background adalah black (0), dan warna foreground adalahlight gray (7).Jumlah Baris = 0 s/d 24Jumlah Kolom = 0 s/d 79 13
  14. 14. Buatlah program yang mensimulasi perintah CLS pada DOS, dan mengeserkursor ke posisisudut kiri atas.4. Jika anda diberi data berikut :INT 16h / AH = 00h - ambil keystroke dari keyboard (no echo).return:AH = BIOS scan code.Hendra, MT. & Hartono, M.Kom. 25Pemrograman Bahasa RakitanAL = ASCII character.(if a keystroke is present, it is removed from the keyboard buffer).INT 10h / AH = 0Eh - teletype output.input:AL = karakter yang dicetak.Fungsi ini menampilkan suatu karakter pada layer, memajukan cursor danmengulung layer bila perlu, pencetakan dilakukan pada halaman yang aktif.Contoh:mov al, amov ah, 0ehint 10hBuatlah program yang mengambil satu ketukan dari keyboard dan mencetakkelayar pada posisi cursor aktif. 14

×