Kuliah 3: 3.1. Debugging dan TASM 3.2. Interrupt
Bahasa Rakitan
1
3.1.1. Debugging • Proses Pembuatan Program Terdapat 5 langkah: 1. 1. Desain Desain Algoritma: Algoritma: –– –– ––
Penetapan Penetapan masalah masalah Pengusulan Pengusulan solusi solusi yang yang terbaik terbaik Pembuatan Pembuatan diagram diagram skematik skematik yang yang digunakan digunakan agar agar usulan usulan solusi solusi lebih lebih baik baik Æflowchart Æflowchart
2. 2. Pengkodean Pengkodean algoritma algoritma ––
Penulisan Penulisan program program dalam dalam bahasa bahasa pemrograman pemrograman tertentu tertentu
3. 3. Penerjemaahan Penerjemaahan ke ke bahasa bahasa mesin mesin ––
Pembuatan Pembuatan program program obyek, obyek, atau atau dgn dgn kata kata lain, lain, program program ditulis ditulis dalam dalam suatu suatu deret/urutan deret/urutan 00 dan dan 11 yang yang dapat dapat diinterpretasi diinterpretasi oleh oleh prosessor prosessor
4. 4. Test Test program program Eksekusi Eksekusi program program pada pada mesin mesin komputer komputer
5. 5. Mengeliminasi Mengeliminasi kesalahan kesalahan yang yang terdeteksi terdeteksi ––
Koreksi Koreksi kesalahan kesalahan umumnya umumnya memerlukan memerlukan pengulangan pengulangan seluruh seluruh langkah-2 langkah-2 dari dari langkah langkah 11 atau atau 22
Untuk membuat program dlm bahasa rakitan tersedia dua option: 1. 1. Mengunakan Mengunakan Turbo Turbo Assembler Assembler (TASM, (TASM, Borland) Borland) 2. 2. Debugger Debugger Bahasa Rakitan
2
3.1.1. Debugging (cont’d) •
Debug: ––
Hanya Hanya dapat dapat membuat membuat program program dgn dgn extension extension *.COM *.COM Æ Æ karena karena karakteristik karakteristik sifat sifat program program ini ini Æ Æ 1. 1. 2. 2.
––
––
•
program program tidak tidak lebih lebih besar besar 64 64 KK dan dan Program Program harus harus dimulai dimulai dgn dgn displacment, displacment, offset, offset, atau atau 0100H 0100H memory memory direction direction didalam didalam segment segment tertentu tertentu (spesific) (spesific)
Kumpulan Kumpulan perintah perintah debug: debug:
A: A: merakit merakit intruksi intruksi simbolik simbolik Æ Æ kode kode mesin mesin D: D: menampilkan menampilkan isi isi suatu suatu daerah daerah memori memori E: E: memasukan memasukan data data ke ke memori, memori, dimulai dimulai pada pada lokasi lokasi
Q: Q: quit quit R: R: menampilkan menampilkan isi isi satu satu atau atau lebih lebih registers registers T: T: trace trace isi isi sebuah sebuah instruksi instruksi U: U: unassembled unassembled kode kode mesin mesin ke ke kode kode simbolik simbolik W: W: menulis menulis program program ke ke disk disk
tertentu tertentu G: G: run run executable executable program program ke ke memori memori N: N: menamai menamai program program P: P: ekskusi ekskusi sekumpulan sekumpulan instruksi instruksi yang yang terkait terkait
Dengan Dengan debug debug Æ Æ visualisasi visualisasi nilai nilai registers registers internal internal dari dari CPU CPU
Memulai debug: C:/>debug[enter] C:/>debug[enter]
Bahasa Rakitan
3
3.1.1. Debugging (cont’d) -r[enter] AX=0000 AX=0000 BX=0000 BX=0000 CX=0000 CX=0000 DX=0000 DX=0000 SP=FFEE SP=FFEE BP=0000 BP=0000 SI=0000 SI=0000 DI=0000 DI=0000 DS=0D62 DS=0D62 ES=0D62 ES=0D62 SS=0D62 SS=0D62 CS=0D62 CS=0D62 IP=0100 IP=0100 NV NV EI EI PL PL NZ NZ NA NA PO PO NC NC 0D62:0100 0D62:0100 2E 2E CS:0D62:0101 CS:0D62:0101 803ED3DF00 803ED3DF00 CMP CMP BYTE BYTE PTR PTR [DFD3],00 [DFD3],00 CS:DFD3=03 CS:DFD3=03
Æ Æ Seluruh Seluruh isi isi registers registers internal internal ditampilkan ditampilkan Atau Atau dgn dgn menggunakan menggunakan parameter parameter nama nama register,mis: register,mis:
-rbx
BX BX 0000 0000 ::
Æ Æ akan akan ditampikan ditampikan isi isi register register BX BX dan dan indikator indikator debug debug berubah berubah dari dari “-” “-” Æ Æ “:” “:” (ini (ini berarti berarti kita kita dapat dapat mengisi mengisi nilai nilai baru baru dari dari register register BX BX (masukan (masukan nilai nilai + + enter), enter), atau atau kita kita tetap tetap mempertahankan mempertahankan nilai nilai lama lama (tekan (tekan langsung langsung enter enter tanpa tanpa mengetik mengetik nilai) nilai)
• Pembuatan program assembler dasar 1. Menginisialisai Debug, yaitu mengetik debug[enter] pada prompt OS 2. Assemble suatu program dgn perintah “a” yaitu aa parameter[enter] parameter[enter] •• ••
Parameter Parameter Æ Æ alamat alamat awal awal proses proses perakitan perakitan Jika Jika tanpa tanpa parameter parameter Æ Æ diinisialisasi diinisialisasi pada pada posisi posisi (locality) (locality) yang yang dispesifikasikan dispesifikasikan oleh oleh CS:IP CS:IP (biasanya (biasanya 100h 100h yaitu yaitu locality locality dimana dimana sebuah sebuah program program dgn dgn extension *.CON diinisialisasi ) extension *.CON diinisialisasi )
Bahasa Rakitan
4
3.1.1. Debugging (cont’d) •• Rekomendasi: Rekomendasi: lebih lebih baik baik alamat alamat awal awal ditulis ditulis u/ u/ menghindari menghindari masalah-2 masalah-2 yang yang terjadi terjadi segera segera setelah setelah register register CS:IP CS:IP digunakan digunakan Æ Æ dgn dgn demikian demikian kita kita ketikan: ketikan: aa 100[enter] 100[enter] mov mov ax,0002[enter] ax,0002[enter] mov mov bx,0004[enter] bx,0004[enter] add add ax,bx[enter] ax,bx[enter] nop[enter][enter] nop[enter][enter]
• Keterangan:
–– move move nilai nilai 0002 0002 ke ke AX, AX, –– move move nilai nilai 0004 0004 ke ke BX, BX, –– tambahkan tambahkan nilai nilai bx bx ke ke ax, ax, –– Intruksi Intruksi nop nop Æ Æ finish finish the the program program
• Kemudian: C:\>debug C:\>debug -a -a 100 100 0D62:0100 0D62:0100 0D62:0103 0D62:0103 0D62:0106 0D62:0106 0D62:0108 0D62:0108 0D62:0109 0D62:0109
mov mov mov mov add add nop nop
ax,0002 ax,0002 bx,0004 bx,0004 ax,bx ax,bx
-t -t (execute (execute setiap setiap instruksi instruksi dari dari program) program)
AX=0002 AX=0002 BX=0000 BX=0000 CX=0000 CX=0000 DX=0000 DX=0000 SP=FFEE SP=FFEE BP=0000 BP=0000 SI=0000 SI=0000 DI=0000 DI=0000 DS=0D62 DS=0D62 ES=0D62 ES=0D62 SS=0D62 SS=0D62 CS=0D62 CS=0D62 IP=0103 IP=0103 NV NV EI EI PL PL NZ NZ NA NA PO PO NC NC 0D62:0103 0D62:0103 BB0400 BB0400 MOV MOV BX,0004 BX,0004
Bahasa Rakitan
5
3.1.1. Debugging (cont’d) -t -t AX=0002 AX=0002 BX=0004 BX=0004 CX=0000 CX=0000 DX=0000 DX=0000 SP=FFEE SP=FFEE BP=0000 BP=0000 SI=0000 SI=0000 DI=0000 DI=0000 DS=0D62 DS=0D62 ES=0D62 ES=0D62 SS=0D62 SS=0D62 CS=0D62 CS=0D62 IP=0106 IP=0106 NV NV EI EI PL PL NZ NZ NA NA PO PO NC NC 0D62:0106 0D62:0106 01D8 01D8 ADD ADD AX,BX AX,BX
-t -t AX=0006 AX=0006 SI=0000 SI=0000 IP=0108 IP=0108
BX=0004 BX=0004 CX=0000 CX=0000 DX=0000 DX=0000 SP=FFEE SP=FFEE BP=0000 BP=0000 DI=0000 DI=0000 DS=0D62 DS=0D62 ES=0D62 ES=0D62 SS=0D62 SS=0D62 CS=0D62 CS=0D62 NV NV EI EI PL PL NZ NZ NA NA PE PE NC NC 0D62:0108 0D62:0108 90 90 NOP NOP
• Menyimpan program 1. 1. Cek Cek panjang panjang prorgram prorgram dgn dgn perintah perintah “h” “h” -h -h 10a 10a 100 100 (alamat (alamat akhir akhir 10a) 10a) 020a 020a 000a 000a 2. 2. Menamai Menamai prorgram prorgram -n -n test.com test.com 3. 3. Gunakan Gunakan perintah perintah “rcx” “rcx” untuk untuk mengubah mengubah nilai nilai registes registes CX CX dgn dgn nilai nilai yg yg diperoleh diperoleh dari dari ukuran ukuran file file Æ Æ 000a 000a -rcx -rcx CX CX 0000 0000 :000a :000a 4. 4. Terakhir, Terakhir, gunakan gunakan perintah perintah “w” “w” u/ u/ menyimpan menyimpan -w -w Writing Writing 000A 000A bytes bytes
Bahasa Rakitan
6
3.1.1. Debugging (cont’d) • Meload program 1. 1. 2. 2. -n -n -l -l -u -u
Berikan Berikan nama nama file file yang yang akan akan diload diload Load Load dgn dgn perintah perintah “l” “l” test.com test.com 100 100 109 109
0C3D:0100 0C3D:0100 0C3D:0103 0C3D:0103 0C3D:0106 0C3D:0106 0C3D:0108 0C3D:0108
B80200 B80200 MOV MOV AX,0002 AX,0002 BB0400 BB0400 MOV MOV BX,0004 BX,0004 01D8 01D8 ADD ADD AX,BX AX,BX CD20 CD20 INT INT 20 20
¾ ¾ Perintah Perintah “u” “u” digunakan digunakan u/ u/
memverifikasikan memverifikasikan bhw bhw program program telah telah diloaded diloaded ke ke memori. memori. Ini Ini berarti berarti dgn dgn perintah perintah ini: ini: kode kode di di unassemble, unassemble, kemudian kemudian meanmpilakn meanmpilakn hasil hasil unassemble unassemble Parameter Parameter mengindikasi mengindikasi Debug Debug dari dari mana mana dan dan disassamble disassamble ke ke mana. mana.
¾ ¾ Debug Debug selalu selalu meload meload program program ke ke memori memori pada pada alamat alamat 100h, 100h, kecuali kecuali digunakan digunakan paramater paramater lain. lain.
Bahasa Rakitan
7
3.1.2. TASM • Membangun Program Assembler – Software yang diperlukan 1. 1. Editor Editor Æ Æ pembuatan pembuatan source source program program 2. 2. Compiler Compiler Æ Æ menerjemahkan menerjemahkan source source program program ke ke program program obyek obyek (Æ (Æ TASM) TASM) 3. 3. Linker Linker Æ Æ menggenerasi menggenerasi executable executable program program dari dari program program obyek obyek (Æ (Æ TLINK) TLINK)
• Pemrograman dgn TASM – Directives berikut penting untuk dimasukan 1. 1. .Model .Model SMALL SMALL Æ Æ mendefinisikan mendefinisikan model model memori memori yg yg digunakan digunakan dlm dlm prog. prog. 2. 2. .CODE .CODE Æ Æ mendefinisikan mendefinisikan instruksi instruksi prog. prog. 3. 3. .STACK .STACK Æ Æ reserves reserves suatu suatu ruang ruang memori memori bagi bagi instruksi-2 instruksi-2 prog. prog. ke ke stack stack 4. 4. END END Æ Æ finishes finishes prog. prog.
¾ Langkah-langkah 1. 1. Gunakan Gunakan prog. prog. Editor Editor u/ u/ membuat membuat source source prog. prog. Contoh: Contoh: ..MODEL MODEL
.STACK .STACK .CODE .CODE
Bahasa Rakitan
SMALL SMALL
;memory ;memory model model ;memory ;memory space space for for program program ;instructions ;instructions in in the the stack stack ;the ;the following following lines lines are are ;program ;program instructions instructions
8
3.1.2. TASM (cont’d) mov mov ah,1h ah,1h mov mov cx,07h cx,07h int int 10h 10h mov mov ah,4ch ah,4ch int int 21h 21h END END
;moves ;moves the the value value 1h 1h to to ;register ;register ah ah ;moves ;moves the the value value 07h 07h to to ;register ;register cx cx ;10h ;10h interruption interruption ;moves ;moves the the value value 44 ch ch to to ;register ;register ah ah ;21h ;21h interruption interruption ;finishes ;finishes the the program program code code
2. 2. Save Save program, program, misal misal contoh1.asm contoh1.asm (disave (disave dalam dalam ASCII ASCII format format !!) !!) 3. 3. Gunakan Gunakan TASM TASM u/ u/ membuat membuat prog. prog. Obyek Obyek C:\>tasm C:\>tasm contoh1.asm contoh1.asm
4. 4. Gunakan Gunakan TLINK TLINK u/ u/ membangun membangun excutable excutable prog. prog. C:\>tlink C:\>tlink contoh1.obj contoh1.obj
5. 5. Eksekusi Eksekusi executable executable prog. prog. C:\>contoh1[enter] C:\>contoh1[enter]
¾ ¾ Proses Proses assembly assembly Æ Æ manajemen manajemen segmen segmen dan dan perbandingan perbandingan dgn dgn tabel tabel simbol simbol (dalam (dalam hal hal tokentokentoken token dari dari instruksi) instruksi)
Bahasa Rakitan
9
3.1.2. TASM (cont’d) – Contoh lain: (contoh2.asm) .model .model small small .stack .stack .code .code mov mov ah,2h ah,2h ;moves ;moves the the value value 2h 2h to to register register ah ah mov mov dl,2ah dl,2ah ;moves ;moves de de value value 2ah 2ah to to register register ;dl ;dl ;(Its ;(Its the the asterisk asterisk value value in in ;ASCII ;ASCII ;format) ;format) int ;21h int 21h 21h ;21h interruption interruption mov mov ah,4ch ah,4ch ;4ch ;4ch function, function, goes goes to to operating operating ;system ;system int ;21h int 21h 21h ;21h interruption interruption end ;finishes end ;finishes the the program program code code
¾ ¾ Dengan Dengan proses proses yang yang sama sama seperti seperti contoh contoh sebelumnya, sebelumnya, program program akan akan menghasilkan menghasilkan karakter karakter asterik asterik “*” “*” pada pada layar layar monitor monitor
Bahasa Rakitan
10
3.2 Interrupts • Jenis-Jenis Interrupts 1. Internal HW interruptions ¾ ¾ Ditimbulkan/digenerasi Ditimbulkan/digenerasi oleh oleh peristiwa peristiwa tertentu tertentu yang yang terjadi terjadi pada pada waktu/selama waktu/selama eksekusi eksekusi program program ¾ ¾ Diatur Diatur oleh oleh HW HW dan dan tidak tidak mungkin mungkin diubah diubah ¾ ¾ Contoh: Contoh: tipe tipe interrupt interrupt u/ u/ counter counter clock clock internal; internal; HW HW call call interrupt interrupt ini ini u/ u/ memaintance memaintance “time “time to to date” date”
2. External HW interupstions 9 9 Ditimbulkan/digenerasi Ditimbulkan/digenerasi oleh oleh devais devais peripheral, peripheral, mis mis keyboard, keyboard, printers, printers, dsb. dsb. 9 9 Biasa Biasa juga juga ditimbulkan/digenerasi ditimbulkan/digenerasi oleh oleh CoCoprosessor prosessor 9 9 Tidak Tidak mungkin mungkin mendeaktivekan mendeaktivekan 9 9 Tidak Tidak dikirim dikirim langsung langsung ke ke CPU, CPU, melainkan melainkan ke ke IC IC yang yang memiliki memiliki fungsi fungsi u/ u/ menghandle menghandle secara secara eksklusive eksklusive interrupts interrupts ini. ini. (IC (IC Æ Æ PIC8259A, PIC8259A, yg yg dikontrol dikontrol oleh oleh CPU CPU dgn dgn menggunakan menggunakan urutan urutan komunikasi komunikasi Æ Æ PATH PATH Control Control
3. Software interruptions •• Diaktifkan Diaktifkan langsung langsung oleh oleh assembler assembler melalui melalui sejumlah sejumlah interuosi interuosi yg yg diharapkan diharapkan dgn dgn instruksi instruksi INT INT Bahasa Rakitan
11
3.2 Interrupts (cont’d) •• Terdapat Terdapat dua dua jenis: jenis: 1. 1. DOS DOS interruptions interruptions 2. 2. BIOS BIOS interupstions interupstions
¾ ¾ Perbedaannya: Perbedaannya: Æ Æ DOS DOS int. int. lebih lebih mudah mudah digunakan, digunakan, namun namun lebih lebih lambat, lambat, karena karena int. int. jenis jenis ini ini menggunakan menggunakan BIOS BIOS Æ Æ BIOS BIOS int. int. lebih lebih cepat, cepat, namun namun banyak banyak kerugiannay kerugiannay karena karena BIOS BIOS bagian bagian HW HW dan dan HWHWspecific specific
• Pemilihan interupts tergantung pada karakteristik yang akan kita berikan pada program: SPEED Æ BIOS int; PORTABILITY Æ DOS int.
• Interrupts yang sering digunakan • Int 21H (DOS interruption) Multiple class to DIS functions • Int 10H (BIOS) Video I/O. • Int 16H (BIOS) Keyboard I/O • Int 17H (BIOS) Printer I/O
Bahasa Rakitan
12