modul bahasa assembler

62
PENGENALAN DEBUG DALAM ASSEMBLER Register Untuk mempelajari bahasa assembler, anda harus menghafalkan semua register dan mengerti apa kegunaannya, karena anda akan selalu berhubungan dengan register – register tersebut. Register adalah sebagian kecil memory komputer yang dipakai untuk tempat penampungan data dengan ketentuan bahwa data yang terdapat dalam register dapat diproses dalam berbagai operasi dengan melihat berapa besar kemampuan menampung register tersebut. Secara umum register dapat dibagi dalam lima golongan yaitu : 1. General Purpose Register 1.1 Register AX Register AX merupakan register aritmatika karena register ini selalu dipakai dalam operasi pertambahan,pengurangan,perkalian dan pembagian 1.2 Register BX Register BX merupakan salah satu dari dua register base addressing mode, yang dapat mengambil atau menulis langsung dari/ke memory

Upload: aziz-sugianto

Post on 26-Jun-2015

2.550 views

Category:

Documents


4 download

DESCRIPTION

Assembly Language

TRANSCRIPT

Page 1: Modul Bahasa Assembler

PENGENALAN DEBUG DALAM ASSEMBLER

Register

Untuk mempelajari bahasa assembler, anda harus menghafalkan semua register dan mengerti apa kegunaannya, karena anda akan selalu berhubungan dengan register – register tersebut. Register adalah sebagian kecil memory komputer yang dipakai untuk tempat penampungan data dengan ketentuan bahwa data yang terdapat dalam register dapat diproses dalam berbagai operasi dengan melihat berapa besar kemampuan menampung register tersebut.

Secara umum register dapat dibagi dalam lima golongan yaitu :

1. General Purpose Register

1.1 Register AX

Register AX merupakan register aritmatika karena register ini

selalu dipakai dalam operasi pertambahan,pengurangan,perkalian

dan pembagian

1.2 Register BX

Register BX merupakan salah satu dari dua register base

addressing mode, yang dapat mengambil atau menulis langsung

dari/ke memory

1.3 Register CX

Register CX merupakan suatu counter untuk meletakan jumlah

lompatan pada loop-loop yang anda lakukan

2. Segment Register

2.1 Register CS : Code Segment Register

2.2 Register DS : Data Segment Register

2.3 Register SS : Stack Segment Register

2.4 Register ES : Extra Segment Register

Page 2: Modul Bahasa Assembler

3. Pointer Register

3.1 IP : Instruction Pointer Register

3.2 SP : Stack Pointer Register

3.3 BP: Base Pointer Register

4. Index Register

4.1 SI : Source Index Register

4.2 DI : Destination Index Register

5. Flag Register

Program Debug

Untuk menjalankan utility DEBUG, anda cukup mengetik DEBUG dari

prompt. Sedang bila ingin membuka sebuah file langsung untuk dioperasikan

DEBUG, anda cukup menambahkan nama file itu sebagai command tail.

Contohnya :

A> DEBUG AGUS.COM

1. Perintah Debug

a. Q (Quit)

Bila anda mengetikan huruf Q dan menekan enter, maka akan segera

kembali ke dos prompt.

b. H (Hexa)

Perintah Hexa adalah perintah yang melaksanakan penjumlahan dan

pengurangan terhadap dua bilangan Hexa. Bentuk umum instruksi

adalah H operand1,operand2

Page 3: Modul Bahasa Assembler

c. R (Register)

Perintah R digunakan untuk mengetahui isi masing-masing register

pada saat mengetik R dan menekan enter

d. A (Assembler)

Perintah Assembler berguna untuk tempat menulis program

Assembler.

-A100

0FD8:100

e. N (Name)

Perintah ini digunakan untuk memberi nama suatu program assembler

f. RCX (Register CX)

Perintah ini digunakan untuk mengetahui dan memperbaruhi isi

register CX yang merupakan tempat penampungan panjang program

yang sedan aktif

g. RIP (Register IP)

Perintah ini digunakan untuk memberitahu komputer untuk memulai

memproses program dari titik tertentu.

h. W (Write)

Perintah ini digunakan untuk menulis/ menyimpan program

i. G (Go)

Perintah ini digunakan untuk menjalankan suatu program

j. T (Trace)

Perintah ini digunakan untuk memproses sebaris program saja.

Page 4: Modul Bahasa Assembler

k. U (Unassemble)

Perintah ini digunakan untuk melihat listing program yang sedang

aktif.

2. Perintah Dasar Assembler

a. MOV

Perintah MOV adalah perintah untuk mengisi, memindahkan,

memperbaruhi isi suatu register, variable ataupun lokasi memory

Adapun tata penulisan perintah MOV adalah :

MOV [operand A], [Operand B]

Contoh :

MOV AH,02

Operand A adalah Register AH

Operand B adalah bilangan 02

Hal yang dilakukan oleh komputer untuk perintah diatas adalah

memasukan 02 ke register AH.

b. INT (Interrupt)

Bila anda pernah belajar BASIC, maka pasti anda tidak asing lagi

dengan perintah GOSUB. Perintah INT juga mempunyai cara kerja

yang sama dengan GOSUB, hanya saja subroutine yang dipanggil

telah disediakan oleh memory komputer yang terdiri 2 jenis yaitu :

Page 5: Modul Bahasa Assembler

- Bios Interrupt ( interput yang disediakan oleh BIOS (INT 0 – INT

1F))

- Dos Interrupt ( Interrupt yang disediakan oleh DOS (INT 1F –

keatas))

Contoh Program Sederhana

- A100

0FD8:0100 MOV AH,02

0FD8:0102 MOV DL,41

0FD8:0104 INT 21

0FD8:0106 INT 20

0FD8:0108

- Jika sudah Ketikan perintah G ( Go ) maka akan tampil huruf A

- Cara menyimpan program :

- RIP

IP 102

: 100 - diisi

- RCX

CX 0000

: 8 --> diisi ( panjangnya program)

- N Coba.Com memberi nama program

- W Menulis program

Page 6: Modul Bahasa Assembler

LOOPING DAN STACK

Looping

Dalam Assembler perintah untuk melakukan perulangan digunakan

perintah LOOP. Yang mempunyai tata penulisan sebagai berikut :

Loop [lokasi memory]

Adapun syarat lain untuk operasi Loop adalah harus mengisi register CX

untuk setiap kali pengulangan. Coba anda lihat contoh program looping

dibawah ini :

MOV CX,05

:0103 MOV AH,02

MOV DL,41

INT 21

LOOP 0103

INT 20

Jika program diatas dijalankan maka akan terjadi perulangan sebanyak

lima kali. Hal ini karena isi dari register CX adalah 5 dan program akan

looping ke memory segment 0103 yaitu tempat yang berisikan perintah MOV

AH,02

Page 7: Modul Bahasa Assembler

Untuk setiap kali looping komputer akan mengurangi isi register CX satu

sampai dengan CX menunjukan nol dan komputer akan melanjutkan ke baris

berikutnya dibawah loop. Jika anda meletakan Loop ke tempat MOV CX,05

maka hasil running program tidak akan berhenti.

Stack

Secara umum stack adalah tempat peletakan sementara isi register. Stack pada

file.COM terdapat di akhir segment dan ketika pertama kali dijalankan program

penunjuk stack (SP) akan langsung ke byte terakhir dari segment.

Operasi Stack mempunyai dua fungsi yaitu fungsi untuk memasukan isi suatu

register/variable ke dalam stack dan mengeluarkan isi register / variable dari

Stack. Adapun perintah untuk memasukan isi register pada stack adalah perintah

PUSH dengan tata penulisannya adalah :

PUSH [operand 16 bit]

Perintah lain untuk operasi stack adalah perintah yang berguna untuk

mengeluarkan isi dari register/variable dari stack digunakan perintah POP dengan

tata penulisannya adalah :

POP [operand 16 bit]

Untuk lebih jelasnya bisa anda perhatika program dibawah ini :

MOV CX,009

MOV DL,31

MOV AH,02

INT 21

PUSH DX

Page 8: Modul Bahasa Assembler

PUSH CX

MOV CX,001A

MOV DL,61

INT 21

INC DL

LOOP 0110

MOV DL,0D

INT 21

MOV DL,0A

INT 21

POP CX

POP DX

INC DL

LOOP 0107

INT 20

Page 9: Modul Bahasa Assembler

Pada baris kelima dan keenam terlihat bahwa anda melakukan operasi penyimpanan register ke stack dan pada baris keenambelas anda mengambil isi stack menggunakan perintah POP. Bila anda menggambarkan stack pada akhir segment. Anda dapat menunjukan bahwa ketika anda melakukan push terhadap register DX yang seandainya berisikan bilanagan 0021 H maka pada stack akan terlihat :

0000

0100

Penunjuk(SP)

FFFD

FFFF

Pada saat perintah PUSH CX dengan register CX berisikan angka 0009, maka akan terlihat di Stack :

0000

0100

Penunjuk(SP) FFFB

FFFD

FFFF

Pada saat perintah POP CX, keadaan stack akan kembali lagi pada saat

tampilan stack yang pertama. Dari pembayangan diatas dapat disimpulkan bahwa

pada operasi stack yang pertama masuk ke stack adalah yang terakhir keluar dari

stack dan yang terakhir masuk ke stack, maka pertama yang keluar dari stack

( LIFO).

PSP

PROGRAM

21 0000 00

PSP

PROGRAM

09 0022 0000 00

Page 10: Modul Bahasa Assembler

PENGENALAN TASM DAN OPERASI ARITMATIKA

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]

Page 11: Modul Bahasa Assembler

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

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

Page 12: Modul Bahasa Assembler

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 :

Page 13: Modul Bahasa Assembler

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]

Page 14: Modul Bahasa Assembler

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

Page 15: Modul Bahasa Assembler

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

Page 16: Modul Bahasa Assembler

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

Page 17: Modul Bahasa Assembler

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

Page 18: Modul Bahasa Assembler

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

Page 19: Modul Bahasa Assembler

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

Page 20: Modul Bahasa Assembler

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)

Page 21: Modul Bahasa Assembler

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 :

Page 22: Modul Bahasa Assembler

- 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

Page 23: Modul Bahasa Assembler

CLS ENDP

POSISI PROC NEAR

MOV DH,BARIS

MOV DL,KOLOM

MOV AH,02H

MOV BH,00

INT 10H

RET

POSISI ENDP

END START

Page 24: Modul Bahasa Assembler

SOAL – SOAL PRAKTIKUM

I. Minggu Pertama

1. Apa yang anda ketahui tentang register secara umum dan sebutkan

beberapa golongan secara umum ?

2. Jelaskan fungsi-fungsi perintah dibawah ini yang terdapat dalam

Debug :

- A

- N

- RCX

- RIP

- W

- G

3. Jelaskan fungsi dari perintah-perintah di bawah ini :

- mov

- int

- push

- pop

4. Buatlah program sederhana dengan menggunakan Debug.com

untuk menampilkan :

a. GuNadaRma

b. 1a2b3c4d5e

Page 25: Modul Bahasa Assembler

I. Minggu Pertama

1. Register adalah sebagian kecil emori komputer yang dipakai untuk tempat

penampungan data dengan ketentuan bahwa data yang ada dalm komputer

tersebut dapat diproses dalam berbagai. Secara umum register dapat dibagi

dalam lima golongan, antara lain :

- General Purpose Register (ax,bx,cx,dx).

- Segment Register (cs,ds,ss,es).

- Pointer Register (ip,sp,bp).

- Flag Register.

2. Fungsi-fungsi dari perintah dibawah ini dalam debug.com adalah

- A : perintah assembler yang berguna untuk tempat menulis

program ASM

- N : memberi nama suatu program

- RCX : perintah untuk mengetahui dan memperbaharui isi dari

register cx yang merupakan tempat paenampungan panjang

program yang sedang aktif sebelum program dijalankan.

- RIP : perintah yang memberitahu komputer untk memulai proses

program pada titik tertentu.

- W : perintah untuk menulis atau menyimpan program.

- G : perintah untuk menjalankan program.

3. Fungsi dari perintah-perintah :

- mov : perintah untuk mengisi, memindahkan, memperbaharui isi

suatu register variabel atau suatu lokasi memori.

- int : perintah untuk memanggil suatu subroutin yang berada

ataupun suatu lokasi memori.

- push : perintah untuk memasukkan isi register kedalam stack

- pop : perintah untuk mengeluarkan isi register dari stack

Page 26: Modul Bahasa Assembler

4. Program

a. GuNadaRma

-debug

a100

mov ah,02

mov dl,47

int 21

mov dl,75

int 21

mov dl,4e

int 21

mov dl,61

int 21

mov dl,64

int 21

mov dl,52

int 21

mov dl,4d

int 21

mov dl,61

int 21

int 20

Page 27: Modul Bahasa Assembler

b. a2b3c4d5e

- debug

a100

mov ah,02

mov cx,05

mov bx,3161

* mov dl,bh

int 21

mov dl,bl

int 21

inc bh

inc bl

loop *

int 20

catt : * alamat offsed

segmen : offsed

Page 28: Modul Bahasa Assembler

II. Minggu Kedua

1. Apa yang dimaksud dengan compiler dan lingking dalam assembler dan

jelaskan sintaks dari compiler dan lingker assembler tersebut ?

2. Tuliskan structure proram assembler dalam TASM ?

3. Sebutkan dan jelaskan macam-macam perintah dalam assembler dibawah

ini :

a. Penambahan

b. Pengurangan

c. Perkalian

d. Pembagian

4. Buatlah program operasi aritmatika untuk menampilkan :

a. 2 + 3 = 5

b. 3 * 3 = 9

Page 29: Modul Bahasa Assembler

II. Minggu Kedua

1. Compiler adalah suatu program yang menterjemahkan program assembler

dalam ASCI file ke bentuk object.

Sintaks : TASM namafile.asm namafile.obj

Linker adalah suatu program yang menterjemahkan program-program

object ke suatu program yang bisa dieksekusi.

Sintaks : TLINK/T namafile.obj

2. Structure Program assembler :

[nama segment] segment

assume cs : [segment] dc: [segment] ss: [segment] es : [segment]

org 100h

[label]

program assemblernya

[nama segment] ends

end [label]

3. a. Operasi pertambahan

- pertambahan dengan 1 kita gunakan INC [register/variabel]

- pertambahan selain 1 kita gunakan ADD [operand1],[operand2]

b. Operasi pengurangan

- pengurangan dengan 1 kita gunakan DEC [register/variabel]

- pengerangan selain 1 kita gunakan SUB [operand1],[operand2]

c. Operasi perkalian

Mengguanakan MUL [register]

- mengambil nilai register yang terlampir pada perintah MUL

- komputer mengambil isi register AL, kemudian dikalikan dengan

nilai register tadi

Page 30: Modul Bahasa Assembler

- hasilnya dilihat ada register AX

d. Oprasi pembagian

- menggunakan DIV [register]

- hasil pembagi ada diregister AL dan sisanya di AH

4. Program

a. 3 + 4 = 7

.model small

.code

org 100h

start : mov ax,03h

int 10h

mov ah,02h

mov bh,33h

mov bl,34h

mov dl,bh

int 21h

mov dl,2b

int 21h

mov dl,bl

int 21h

mov dl,3d

int 21h

sub bl,30h

add bh,bl

mov dl,bh

int 21h

int 20h

end start

Page 31: Modul Bahasa Assembler

b. 3 x 3 = 9

.model small

.code

org 100h

start : mov ax,03h

int 10h

mov ah,02h

mov bh,33h

mov bl,33h

mov dl,bh

int 21h

mov dl,78h

int 21h

mov dl,bl

int 21h

mov dl,3dh

int 21h

sub bh,30h

mov al,03h

mul bh

add al,30h

mov dl,al

mov ah,02h

int 21h

int 20h

end start

Page 32: Modul Bahasa Assembler

IV. Minggu Keempat

1. Sebutkan dan jelaskan 2 macam lompatan dalam assembler ?

2. Apa fungsi dari :

a. JMP

b. CMP

c. JE

d. JNE

3. a. Buatlah Program assembler dengan TASM dengan tampilan :

Masukkan angka [1..3] : <input>

Ket : jika kita masukan :

1, maka akan muncul Saya Laki-laki

2, maka akan muncul Saya Perempuan

selain itu maka akan muncul Saya Bukan Keduanya

Gunakan CMP, JE, JNE

b. Buatlah program menu dengan tampilan

** MENU UTAMA**

<<Restaurant Sea Food>>

-----*************-----

1. Sarapan Apgi

2. Makan Siang

3. Makan Malam

4. Exit

------------------------------

Tentukan Pilihan Anda [1..4] :<input>

Page 33: Modul Bahasa Assembler

Jika :

1, akan tampil : Nasi Goreng

Udang Goreng

Teh Manis

2, akan tampil : Nasi Putih

Cumi Rebus

Ikan Bakar

Air Putih

3, akan tampil : Nasi putih

Kerang Rebus

Kepiting Panggang

Air Putih

4, Exit

Page 34: Modul Bahasa Assembler

IV. Minggu Keempat

1. Dua jenis lompatan dalam assembler adalah

a. lompatan tak bersyarat

yaitu kondisi akan melompat ke suatu alamat memori tanpa syarat

b. lompatan bersyarat

yaitu kondisi akan melompat ke suatu alamat memori dengan suatu

syarat

2. Fungsi dari perintah-perintah :

a. JMP

Perintah ini adalah untuk melakukan lompatan kearah lokasi

memori segment

b. CMP

Perintah ini digunakan untuk membandingkan kedua operand

c. JE

Perintah ini untuk melakukan lompatan kearah lokasi memori

segment jika perbandingan kedua operand sama

d. JNE

Perintah ini untuk melakukan lompatan kearah lokasi memori

segment jika perbandingan kedua operand tidak sama

Page 35: Modul Bahasa Assembler

3. a. Program

.model small

.code

org 100h

start : jmp mulai

kt1 db “Masukkan Angka [1..3] : $”,13,10

kt2 db “Saya Laki-laki $”,13,10

kt3 db “Saya Perempuan $”,13,10

kt4 db “Saya Bukan Keduanya $”,13,10

mulai : mov ax,03h

int 10h

mov ah,09h

lea dx,kt1

int 21h

mov ah,01h

cmp al,’1’

je laki

cmp al,’2’

je wanita

cmp al,’3’

je bukan

laki : mov ah,09h

lea dx,kt2

int 21h

jmp selesai

wanita : mov ah,09h

lea dx,kt3

int 21h

jmp selesai

Page 36: Modul Bahasa Assembler

bukan : mov ah,09h

lea dx,kt4

int 21h

jmp selesai

selesai : int 20h

end start

b. program

.model small

.code

org 100h

start : jmp mulai

menu db “** MENU UTAMA **”13,10

db “<<Restoran Sea Food>>”,13,10

db “********************”,13,10

db “1. Sarapan Pagi “,13,10

db “2. Makan Siang”,13,10

db “3. Makan Malam”,13,10

db “4. Exit”,13,10

db “------------------------------“,13,10

db “Tentukan Pilihan Anda [1..4] : $”

jwb1 db “1. Nasi Goreng”,13,10

db “2. Udang Goreng”,13,10

db “3. The Manis $”

jwb2 db “1. Nasi Putih”,13,10

db “2. Cumi Rebus”,13,10

db “3. Ikan Bakar”,13,10

Page 37: Modul Bahasa Assembler

db “4. Air Putih $”

jwb 3 db “1. Nasi Putih”,13,10

db “2. Kerang Rebus”,13,10

db “3. Kepiting Panggang:,13,10

db “4. Air Putih $”

mulai : mov ax,03h

int 10h

mov ah,02h

lea dx,menu

int 21h

mov ah,01h

cmp al,’1’

je pil1

cmp al,’2’

je pil2

cmp al,’3’

je pil3

jmp selesai

pil1 : mov ah,09h

lea dx,jwb1

int 21h

jmp selesai

pil2 : mov ah,09h

lea dx,jwb2

int 21h

jmp selesai

pil3 : mov ah,09h

lea dx,jwb3

jmp selesai

selesai : int 20h

Page 38: Modul Bahasa Assembler

end start

V. Minggu Kelima

1. Tuliskan structure dari subroutine/procedure ?

2. Buatlah program dengan menggunakan macro untuk mencetak string

denga tampilan sebagai berikut :

a. Selamat Datang

Di Lab SI

Univ Gunadarma

b. Masukkan Kata : < DARMA >

AMRAD

AMRA

AMR

AM

A

3. Buatlah program dengan menggunakan procedure dengan tampilan

sebagai berikut :

Masukkan suatu kalimat : Yudhi

Yudhi

Yudh

Yud

Yu

Y

Page 39: Modul Bahasa Assembler

V. Minggu Kelima

1. Struktur subroutine/procedure :

[nama subroutine] proc [near/far]

isi program

ret

[nama subroutine] endp

2. a. Cetak makro kalimat

mov ah,09h

mov dx,offset kalimat

int 21h

endm

.model small

.code

.org 100h

start : jmp mulai

kt1 db “Selamat Datang $”

kt2 db 13,10, “Di Lab SI $”

kt3 db 13,10, “Univ Gunadarma $”

mulai : cetak kt1

cetak kt2

cetak kt3

int 20h

end start

Page 40: Modul Bahasa Assembler

b. Cetak makro kalimat

mov ah,09h

mov dx,offset kalimat

int 21h

endm

.model small

.code

org 100h

mulai : jmp proses

kt1 db “ Masukkan Nama Anda : $”

jwb db 11,?,11 dup(?)

proses : mov ax,03h

int 10h

cetak kat1

mov ah,0ah

lea dx,jwb

int 21h

push dx

lea bx,jwb

inc bx

mov dl,[bx]

xor dh,dh

mov dl,bx

movsi,bx

mov cx,dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

Page 41: Modul Bahasa Assembler

int 21h

B : push cx

mov cx,si

A : dec bx

mov ah,02h

mov dl,[bx]

int 21h

loop A

mov dl,0dh

int 21h

mov dl,0ah

int 21h

sub bx,31

dec si

pop cx

loop B

int 20h

end mulai

Page 42: Modul Bahasa Assembler

3. Program

.model small

.code

org 100h

mulai : jmp proses

kt1 db “Masukkan Nama Anda : $”

jwb db 11,?,11 dup(?)

proses : mov ax,03

int 10h

mov ah,09h

lea dx,kt1

int 21h

mov ah,0ah

lea dx,jwb

int 21h

push dx

lea bx,jwb

inc bx

mov dl,[bx]

xor dh,dh

mov dl,bx

mov si,bx

mov cx,dx

call bawah

B : push cx

mov cx,si

Page 43: Modul Bahasa Assembler

A : inc bx

mov ah,02h

mov dl,[bx]

int 21h

loop A

call bawah

sub bx,si

dec si

popcx

loop b

int 20h

end mulai

bawah proc near

mov ah,02h

mov dl,0ah

int 21h

mov dl,0dh

int 21h

ret

bawah endp

Page 44: Modul Bahasa Assembler

III. Minggu Ketiga

1. Jelaskan fungsi berikut ini :

a. int 21h service number 09h

b. int 21h service number 01h

c. int 21h service number 0ah

2. Buatlah program dengan tampilan sebagai berikut :

a. ***SELAMAT DATANG ***

*DI LAB SISTEM INFORMASI*

**GUNADARMA**

b. Masukkan var ke-1 : 4 <input karakter>

Masukkan var ke-2 : 3 <input karakter>

Jumlah var tersebut adalah : 7

3. Buatlah proran dengan tampilan seperti dibawah ini :

Masukkan Nama Anda : Yudhi <input string>

Nama Anda adalah : Yudhi

Page 45: Modul Bahasa Assembler

III. Minggu Ketiga

1. Fungsi dari INT 21

- service number 09H : digunakan untuk mencetak string

- service number 01H : digunakan untuk menginput karakter

- service number 0AH : digunakan untuk menginput string

2. a. Program

.model small

.code

org 100h

start : jmp mulai

kt1 db “Selamat Datang $”

kt2 db 13,10, “Di Lab Sistem Informasi $”

kt3 db 13,10, “ Gunadarma $”

mulai : mov ah,09h

lea dx,kt1

int 21h

lea dx,kt2

int 21h

lea dx,kt3

int 21h

int 20h

end start

b. program

.model small

.code

org 100h

start : jmp mulai

kt1 db “Masukkan var ke-1 : $”,13,10

kt2 db “Masukkan var ke-1 : $”,13,10

kt3 db “Penjumlahan 2 var : $”,13,10

Page 46: Modul Bahasa Assembler

mulai : mov ah,09h

lea dx,kt1

int 21h

mov ah,01h

sub al,30h

mov bl,al

xor al,al

mov ah,09h

lea dx,kt2

int 21h

mov ah,01h

int 21h

mov al,30h

mov bh,al

add bh,al

mov ah,09h

lea dx,kt3

int 21h

mov ah,02h

add dl,30h

mov dl,bh

int 21h

int 20h

end start

Page 47: Modul Bahasa Assembler

3. Program

.model small

.code

org 100h

start : jmp mulai

kt1 db “Masukkan Nama Anda :$”

kt2 db 13,10, “Nama Anda Adalah : $”

var db 11,?,11 dup(?)

mulai : mov ax,03h

int 10h

mov ah,09h

lea dx,kt1

int 21h

mov ah,0ah

lea dx,var

int 21h

mov ah,09h

lea dx,kt2

int 21h

lea bx,var

mov dl,[bx]

xor dh,dh

mov cx,dx

A : inc bx

mov ah,02h

mov dl,[bx+1]

int 21h

loop A

int 20h

end start

Page 48: Modul Bahasa Assembler