M9 Debug
M9 Debug
Selain kita bisa menggunakan DEBUG.COM dalam membuat program assembler kita juga bisa
membuat program assembler tanpa menggunakan DEBUG.COM, dimana untuk keperluan itu
diperlukan beberapa program yaitu :
- Text Editor
Text editor ini digunakan untuk membuat/menulis program assembler. Adapun contoh dari editor ini
adalah SideKick , Notepad, Norton Editor, dll.
- Compiler
Yang dimaksud dengan Compiler adalah suatu program yang menterjemahkan program assembler
dalam ASCII file ke bentuk file object, dalam assembler kita gunakan TASM. Contohnya :
- Linker
Yang dimaksud dengan Linker adalah suatu program yang menterjemahkan program object ke
bentuk file eksekusi (berextension .COM atau . EXE), dalam assembler kita gunakan TLINK.
Contohnya :
TLINK /T CETAK
Secara umum struktur penulisan suatu segment dapat dilukiskan sebagai berikut :
Org 100H
[label] :
Program Assemblernya
End [label]
Contohnya :
.MODEL SMALL
.CODE
ORG 100H
Mov DL,41H
Int 21H
Inc DL
Loop label1
Int 20H
End Start
Setelah program diatas dicompile dengan menggunakan TASM dan dilinker menggunkan TLINK /T ,
kemudian untuk menjalankan programnya kita tinggal mengetikan nama filenya saja. Contohnya :
CETAK
Operasi Aritmatika
Dalam Assembler operasi aritmatika yang dibahas adalah operasi pertambahan , pengurangan,
perkalian dan pembagian.
- Operasi Pertambahan
• Pertambahan dengan 1
Adapun perintah untuk pertambahan dengan 1 dalam assemblera adalah INC, dengan tata penulisan
perintah INC adalah :
INC [Register/Variable]
Contoh programnya :
MOV CX,05
MOV DL,41
# MOV AH,02
INT 21
INC DL
LOOP #
INT 20
• Pertambahan Selain 1
Perintah yang digunakan untk pertambahan selain 1 dalam assembler yaitu ADD, dengan tata
penulisan perintah ADD adalah:
ADD [operand1],[operand2]
- Operasi Pengurangan
Perintah yang digunakan untuk penguarangan satu ini adalah perintah DEC, jika kita tulis biasa sama
dengan A = A – 1. Tata penulisan dari perintah DEC adalah :
DEC [Variable/Register]
Contoh Program :
MOV CX,05
MOV DL,5A
# MOV AH,02
INT 21
DEC DL
LOOP #
INT 20
Bila dalam pertambahan kita gunakan ADD maka dalam pengurangan selain satu digunakan SUB
dengan tata penulisannya adalah :
SUB [operand1],[operand2]
- Perkalian
Operasi perkalian dalam assembler dapat menggunakan perintah MUL yang berarti perkalian.
Adapun tata penulisannya adalah :
MUL [Register]
Bila memerintahkan dengan perintah MUL, maka yang dilakukan komputer adalah :
• Mengambil nilai register terlampir pada perintah MUL. Contoh MUL BL, maka isi register BL yang
diambil
• Kemudian komputer mengambil isi register AL dan dikalikan dengan isi register BL
• Hasilnya dapat dilihat pada register AX. Langkah diatas adalah oprasi 8 bit, sedang untuk operasi 16
bit yang dilakukan komputer adalah :
• Kemudian komputer mengambil isi register AX dan dikalikan dengan isi register BX
Contoh programnya :
MOV AH,02
MOV BH,32
MOV AL,01
MUL BH
MOV DL,AL
INT 21
INY 20
- Pembagian
Seperti juga perkalian, pembagian pun membedakan cara kerja pembagian dengan 8 bit dan 16 bit.
Adapun cara kerja operasi pembagian adalah :
Contoh : Contoh:
DIV BL DIV BX
DX:AX
Contoh Programnya :
MOV BL,0A
MOV AX,0101
DIV BL
MOV AH,02
MOV DL,AL
INT 21
INT 20
Mencetak String
Sebelum kita mencetak sebuah string terlebih dahulu kita harus mendefinisikan variablenya.
Variabel dalam bahasa assembler dapat dibagi menjadi 2 jenis variabel, yaitu :
Variabel ini adalah variabel yang memakan tempat pada memory, besar memory yang dipakai
variabel ini ditentukan oleh besarnya variabel tersebut. Adapun besaran-besaran variabel tersebut
adalah :
Contohnya :
Jenis variabel ini tidak akan memakan memory pada komputer, jenis variabel ini hanya dapat dipakai
dalam assembler menggunakan compiler. Untuk mendefinisikan jenis variabel ini anda cukup
menggantikan besaran pada variabel yang dapat dimodifikasikan isinya menjadi kata equ.
Pada bagian ini akan dibahas bagaimana cara mencetak sebuah kalimat ke layar menggunakan Int 21
Hexa service number 09h. Adapun syarat-syarat untuk menggunakan Int 21 H service 09H ini adalah :
- Masukan segment dari variabel tempat menampung kata yang akan dicetak ke DS dan offset-nya
ke DX dan kata-kata yang dicetak tersebut harus diakhiri dengan tanda dollar ‘$’.
Contoh Programnya :
.MODEL SMALL
.CODE
ORG 100H
DB ‘SATU $’
MULAI : MOV AH,09H
INT 21H
INT 20H
END START
Untuk input 1 karakter dengan ECHO kita akan menggunakan Interrupt 21H dengan service number
01H. Adapun syarat-syarat menggunakan Interupt 21H service number 01H ini adalah :
- Pada saat sebelum dilakukan proses, register AH harus berisi service number dari interupt 21H
yaitu 01H
- Selama proses, proses dapat dihentikan dengan menekan tombol control dan tombol break atau C
secara bersamaan.
Contoh Programnya :
.MODEL SMALL
.CODE
ORG 100H
INT 21H
INT 21H
MOV AH,09H
INT 21H
MOV AH,02H
INT 21H
INT 20H
END START
Untuk melakukan input lebih dari satu karakter, digunakan Int 21H dengan service number 0AH yang
mempunyai syarat proses sebagai berikut :
- Register Ah harus berisikan service number dari interupt 21H tersebut 0AH
- Harus mendefinisikan sebuah variabel tempat menampung masukan dengan tata penulisan
variabel sebagai berikut :
nn adalah jumlah terbanyak karakter yang dapat dimasukan + 1, guna + 1 adalah untuk tempat 0D
Hexa
mm adalah indikator dari beberapa banyak karakter yang dimasukan . mm ini secara otomatis oleh
komputer setiap kali kita melakukan input, sehingga pada saat kita mendefinisikan variabel tempat
menampung mm ini dapat dikosongkan dengan menggunakan tanda tanya (?) yang artinya satu byte
memory yang tidak diisi. Jumlah maksimum mm adalah nn – 1.
Contoh Programnya :
.MODEL SMALL
.CODE
ORG 100H
INT 21H
INT 21H
INC BX ; BX = BX + 1
INC BX
ADD BX,DX
MOV DL,’$’
MOV AH,09H
INT 21H
INC DX
INC DX
MOV AH,09H
INT 21H
INT 20H
END START
String yang kita input tadi dengan nama variable TAMPUNG akan dimasukan kedalam register BX,
kemudian BX = BX + 1. Kemudian setelah mendapat indikator tersebut, taruh di register DL dan
mengosongkan register DH (XOR DH,DH). Gunakan tampilan dibawah ini untuk memperjelas posisi
BX terhadap variable tampung.
TAMPUNG db 11,I,?,?,?,?,?,?,?,?,?,?,?
Catatan : I = Indikator
Tambahkan satu supaya menunjuk kepada awal kata yang anda masukan dengan perintah INC BX.
TAMPUNG db 11,I,?,?,?,?,?,?,?,?,?,?,?
Catatan : I = Indikator
Setelah itu tambahkan BX dengan DX supaya menunjuk kepada huruf terakhir masukan. Ganti )D H
dengan ‘$’ supaya bisa dicetak menggunakan Int 21H dengan 09 H. Kemudian string input yang kita
masukan bisa dicetak.
KONDISI / LOMPAT
Secara fisik anda hanya dapat melihat bahwa lompatan tak bersyarat terdiri dari satu macam, tapi
bila dianalisis jumlah byte yang dipakai untuk lompatan tak bersyarat dapat dikelompokan menjadi 2
macam yaitu :
Contoh :
JMP 200
Perintah ini adalah untuk melakukan lompatan kearah lokasi memory segment:0200
Untuk lompatan bersyarat, terdapat beberapa jenis lompatan yang kegunaanya dapat disesuaikan
dengan keperluan yang dibutuhkan. Untuk perbandingan Operand dengan menggunakan perintah
perbandingan (Compare). Adapun tata penulisan perintah perbandingan adalah :
CMP [operand1],[operand2]
Contohnya :
CMP AX,0102
Lompatan Bersyarat
- JE (Jump If Equal)
Perintah ini berlaku bila pada saat pembandingan kedua opearnd sama. Contohnya :
CMP AX,0102
JE 0102
Perintah ini berlaku bila pada saat perbandingan kedua operand tidak sama. Contohnya :
CMP AX,0102
JNE 0102
Perintah ini berlaku bila pada saat perbandingan operand pertama menunjukan lebih besar dari
operand pertama. Kebalikannya adalah JNG (Jump If Not Greater)
Perintah ini berlaku bila pada saat perbandingan operand pertama menunjukan lebih besar atau
sama dengan dari operand pertama. Kebalikannya adalah JNGE (Jump If Not Greater)
• Masih banyak lagi perintah-perintah lompat bersyarat ini, perintah-perintah diatas hanya sebagian
kecil dari perintah-perintah lompat bersyarat.
Subroutine/Procedure
Bila anda mempunyai masalah anda harus menulis suatu perintah berulang-ulang, maka dengan
operasi subroutine anda dapat menyingkat kerja yang ada diprogram tersebut hingga setelah
program. Struktur dari subroutine/procedure bisa anda lihat dibawah ini :
RET
- NEAR
Berarti subroutine tersebut bersifat dekat atau subroutine itu hanya akan dipanggil paling jauh satu
segment.
- FAR
Berarti subroutine ini dapat dioperasikan antar segment karena untuk memanggil subroutine dapat
dilakukan lebih jauh dai 1 segment.
Untuk memanggil subroutine, digunakan perintah CALL yang dapat didefinisikan dengan :
- Memasukan alamat pemanggil ke Stack dengan besar 2 byte bila subroutine tersebut NEAR dan 4
byte bila subroutine tersebut FAR.
- Mencari alamat subrotine yang dipanggil dan siap melakukan perintah yang diperintahkan oleh
subroutine.
Perintah RET berarti komputer akan mengembalikan penunjuk program (IP) ke program pemanggil.
Adapun yang dilakukan komputer ketika menerima instruksi RET adalah :
- Mengambil alamat pemanggil dari STACK dengan besar 2 byte bila subroutine NEAR dan 4 byte bila
subroutine FAR.
Contoh Programnya :
.MODEL SMALL
.CODE
ORG 100H
KOLOM DB 00
BARIS DB 00
CALL POSISI
INT 20H
MOV AH,06H
MOV CX,0000H
MOV AL,00H
MOV BH,07H
MOV DH,24
MOV DL,79
INT 10H
RET
CLS ENDP
MOV DH,BARIS
MOV DL,KOLOM
MOV AH,02H
MOV BH,00
INT 10H
RET
POSISI ENDP
END START