Anda di halaman 1dari 12

DEBUG , STACK

Program Tanpa 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 :

TASM CETAK.ASM CETAK.OBJ

- 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

 Struktur Program Dalam TASM

Secara umum struktur penulisan suatu segment dapat dilukiskan sebagai berikut :

[nama segment] segment

ASSUME CS:[segment] DS:[segment] SS:[segment] ES:[segment]

Org 100H

[label] :

Program Assemblernya

[nama segment] ends

End [label]

Contohnya :

.MODEL SMALL

.CODE
ORG 100H

Start : Mov CX,05

Mov DL,41H

Label1 : Mov Ah,02H

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

• Pengurangan Dengan Satu

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

• Pengurangan Selain Satu

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 :

• Mengambil nilai register terlampir yang besarnya 16 bit. Contohnya : MUL BX

• Kemudian komputer mengambil isi register AX dan dikalikan dengan isi register BX

• Hasilnya dapat dilihat pada register OX

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 :

- Pembagian 8 Bit - Pembagian 16 Bit

Tata penulisan : Tata Penulisan:

DIV [Register 8 bit] DIV [Register 16 Bit]

Contoh : Contoh:

DIV BL DIV BX

Dibagi dengan AX Dibagi dengan

DX:AX

Hasil dilihat di AL Hasil dilihat di DX

Sisa dilihat di AH Sisa dilihat di AX

Contoh Programnya :

MOV BL,0A

MOV AX,0101

DIV BL

MOV AH,02

MOV DL,AL

INT 21

INT 20

MENCETAK STRING DAN MENGINPUT STRING

 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 yang dapat dimodifikasi isinya.

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 :

• DB (Define Byte), mendefinisikan variabel per byte

• DW (Define Word), mendefinisikan variabel per wprd

• DD (Define Double Word), mendefinisikan variabel per 2 word

Tata penulisan variabel jenis ini adalah dengan :

Label [DB/DW/DD] [Isi Variabel]

Contohnya :

Satu db ‘Ini Adalah Sebuah Variabel $’

- Variabel yang tidak dapat dimodifikasi isinya.

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 Service number Interupt ke register AH.

- 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

START : JMP MULAI

;Disini data dimulai

KATA DB ‘TEST KATA-KATA’,13,10

DB ‘SATU $’
MULAI : MOV AH,09H

MOV DX,OFFSET KATA ; ATAU LEA DX,KATA

INT 21H

INT 20H

END START

 Input Satu Karakter

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.

- Hasil input dari keyboard akan diletakan di register AL

Contoh Programnya :

.MODEL SMALL

.CODE

ORG 100H

START :JMP MULAI

TANYA DB ‘JAWAB SAJA PERTANYAAN INI : ‘,13,10

DB ‘MASUKAN SATU KARAKTER : $’,13,10

HASIL DB ‘KARAKTER ITU : $’

MULAI : MOV AH,09H

LEA DX,TANYA ;MENCETAK TANYA

INT 21H

MOV AH,01H ;SERVICE UNTUK INPUT 1 CHAR

INT 21H

MOV AH,09H

LEA DX,HASIL ;MENCETAK HASIL

INT 21H

MOV AH,02H

MOV DL,AL ;CETAK HASIL INPUT

INT 21H
INT 20H

END START

 Input Lebih Dari Satu Karakter (String)

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 :

[label] db nn,mm,nn dup(?)

dengan aturan tata penulisan tersebut adalah :

 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.

- DS:DX harus berisi segment dan offset awal variabel diatas.

Contoh Programnya :

.MODEL SMALL

.CODE

ORG 100H

START : JMP MULAI

TANYA DB ‘MASUKAN STRING : $’,13,10

TAMPUNG DB 11,?,11 DUP(?)

JAWAB DB ‘STRING TADI ADALAH : $’

MULAI : MOV AH,09H

MOV DX,OFFSET TANYA ;CETAK TANYA

INT 21H

MOV AH,0AH ;INPUT STRING

MOV DX,OFFSET TAMPUNG


PUSH DX ; ISI DX KE STACK

INT 21H

MOV BX,OFFSET TAMPUNG

INC BX ; BX = BX + 1

MOV DL,[BX] ; ISI DX DENGAN [BX]

XOR DH,DH ;DH = 0

INC BX

ADD BX,DX

MOV DL,’$’

MOV [BX],DL ;MASUKAN DL KE [BX]

MOV DX,OFFSET JAWAB ;CETAK JAWAB

MOV AH,09H

INT 21H

POP DX ;AMBIL DX DARI STACK

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

 Lompatan Tak Bersyarat

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 :

- Lompatan Dekat (Near Jump)

- Lompatan Jauh (Far Jump)

Adapun secara fisik perintah lompat dapat ditulis sebagai berikut :

JMP [lokasi memory]

Contoh :

JMP 200

Perintah ini adalah untuk melakukan lompatan kearah lokasi memory segment:0200

 Perbandingan Lompatan Bersyarat

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

Perintah ini digunakan untuk membandingkan AX dengan 0102

 Lompatan Bersyarat

- JE (Jump If Equal)

Perintah ini berlaku bila pada saat pembandingan kedua opearnd sama. Contohnya :

CMP AX,0102

JE 0102

- JNE (Jump If Not Equal)

Perintah ini berlaku bila pada saat perbandingan kedua operand tidak sama. Contohnya :

CMP AX,0102
JNE 0102

- JG (Jump If Greater Than)

Perintah ini berlaku bila pada saat perbandingan operand pertama menunjukan lebih besar dari
operand pertama. Kebalikannya adalah JNG (Jump If Not Greater)

- JGE (Jump If Greater Or Equal)

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.

PROCEDURE DAN MACRO

 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 :

[nama subroutine] PROC [NEAR/FAR]

Disini Letak Program Anda

RET

[nama subroutine] ENDP

Adapun maksud dari NEAR dan FAR adalah :

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

CALL [nama subroutine]

Adapun yang dilakukan komputer ketika memproses CALL adalah :

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

- Meloncat ke arah alamat tersebut.

Contoh Programnya :

.MODEL SMALL

.CODE

ORG 100H

START : JMP MULAI

KOLOM DB 00

BARIS DB 00

MULAI : CALL BERSIH

CALL POSISI

INT 20H

HAPUS PROC NEAR

MOV AH,06H

MOV CX,0000H

MOV AL,00H

MOV BH,07H

MOV DH,24

MOV DL,79

INT 10H

RET

CLS ENDP

POSISI PROC NEAR

MOV DH,BARIS

MOV DL,KOLOM

MOV AH,02H

MOV BH,00
INT 10H

RET

POSISI ENDP

END START

Anda mungkin juga menyukai