• Tidak ada hasil yang ditemukan

Daftar Isi. Daftar Isi Pertemuan 3: Pengenalan TASM P3.1. Teori Pengenalan Turbo Assembler Struktur Program...

N/A
N/A
Protected

Academic year: 2021

Membagikan "Daftar Isi. Daftar Isi Pertemuan 3: Pengenalan TASM P3.1. Teori Pengenalan Turbo Assembler Struktur Program..."

Copied!
25
0
0

Teks penuh

(1)

[Type text] Page 1

Daftar Isi

Daftar Isi ... 1

Pertemuan 3: Pengenalan TASM ... 2

P3.1. Teori ... 3

Pengenalan Turbo Assembler ... 3

Struktur Program ... 4

Membuat Program Menggunakan TASM ... 6

Variabel ... 8

Addressing Modes ... 11

P3.2. Studi Kasus ... 23

P3.3. Latihan ... 25

(2)

[Type text] Page 2

Pertemuan 3

Pengenalan Turbo Assembler & Addressing

Mode

Objektif:

1. Mahasiswa mengetahui Turbo Assembler

2. Mahasiswa mengetahui perintah-perintah dasar Turbo Assembler

3. Mahasiswa dapat membuat program assembler sederhana menggunakan TASM

(3)

[Type text] Page 3

P3.1Teori

PENGENALAN TURBO ASSEMBLER Text Editor

Penulisan program bahasa rakitan dengan TASM dapat menggunakan text editor seperti

Edit (DOS), SideKick (SK), WordStar, atau word processor yang mempunyai fasilitas

pembuatan ASCII file seperti Word Perfect, SPRINT dan lain sebagainya. Selain itu, dapat menggunakan editor Turbo Pascal atau Turbo C namun simpan ekstension file yang disimpan harus diakhiri .ASM bukan .PAS atau .C

Compiler

Yang dimaksud dengan Compiler adalah suatu program yang menerjemahkan program Assembler dalam ASCII file (berekstension .ASM) ke bentuk file Object (berekstension .OBJ) dan menerjemahkan program object ke bentuk program exsekusi (berekstension .COM atau .EXE).

Untuk mengompile source file, misalnya file COBA.ASM menjadi file object dengan extensi .OBJ atau ke bentuk program ekstensi .COM atau .EXE dapat menggunakan file TASM.EXE dengan mengetikkan:

C:\>tasm coba

Turbo Assembler version 2.0 Copyright © 1988, 1990 Borland International

Assembling file : coba.ASM

Error messages : None

Warning messages : None

Passes : 1

Remaining memory : 370k

C:\>dir coba.*

Volume in drive C is S’to Directory of C:\

COBA OBJ 128 08-08-11 10:42p

COBA ASM 128 08-08-11 10:41p

2 file(s) 246 bytes

(4)

[Type text] Page 4 STRUKTUR PROGRAM

Untuk program .COM harus menambahkan Org 100h pada baris ketiga dari struktur

program. Hal ini dilakukan karena harus menyisihkan ruang sebesar 100h untuk PSP (Program Segment Prefix), karena program .COM hanya terdiri dari satu segment sedangkan untuk program .EXE harus dapat membuat beberapa segment dan tidak perlu menyediakan baris ketiga dari struktur data seperti contoh di bawah ini:

.MODEL SMALL .CODE

ORG 100H

Label1 : JMP Label2

Tempat program ditulis Label2 :

Tempat program ditulis INT 20H

END Label1

Penjelasan struktur program adalah sebagai berikut:

MODEL SMALL

Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory yang digunakan oleh program. Supaya lebih jelas model-model yang bisa digunakan adalah :

TINY

Jika program anda hanya menggunakan 1 segment seperti program COM. Model ini disediakan khusus untuk program COM.

SMALL

Jika data dan code yang digunakan oleh program kurang dari ukuran 1 segment atau 64 KB.

MEDIUM

Jika data yang digunakan oleh program kurang dari 64 KB tetapi code yang digunakan bisa lebih dari 64 KB.

(5)

[Type text] Page 5 Jika data yang digunakan bisa lebih besar dari 64 KB tetapi codenya kurang dari 64 KB.

LARGE

Jika data dan code yang dipakai oleh program bisa lebih dari 64 KB.

HUGE

Jika data, code maupun array yang digunakan bisa lebih dari 64 KB. Mungkin ada yang bertanya-tanya mengapa pada program COM yang dibuat digunakan model SMALL dan bukannya TINY ? Hal ini disebabkan karena banyak dari compiler bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan model TINY, sehingga kita menggunakan model SMALL sebagai pemecahannya.

CODE

Tanda directive ini digunakan untuk memberitahukan kepada assembler bahwa kita akan mulai menggunakan Code Segment-nya disini. Code segment ini digunakan untuk menyimpan program yang nantinya akan dijalankan.

ORG 100h

Pada program COM perintah ini akan selalu digunakan. Perintah ini digunakan untuk memberitahukan assembler supaya program pada saat dijalankan (diload ke memory) diletakkan mulai pada offset ke 100h(256) byte. Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong pada saat program dijalankan. 100h byte kosong ini nantinya akan ditempati oleh PSP (Program Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk mengontrol jalannya program tersebut.

JMP

Perintah JMP (JUMP) ini digunakan untuk melompat menuju tempat yang ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah:

JUMP Tujuan

Dimana tujuannya dapat berupa label seperti yang digunakan pada bagan diatas. Perintah JUMP yang digunakan pada bagan diatas dimaksudkan agar melewati tempat data program,

(6)

[Type text] Page 6 karena jika tidak ada perintah JUMP ini maka data program akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda menjadi Hang.

INT 20h

Perintah INT adalah suatu perintah untuk menghasilkan suatu interupsi:

INT NoInt

Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali sepenuhnya kepada DOS. Pada program COM cara ini bukanlah satu-satunya tetapi cara inilah yang paling efektif untuk digunakan. Jika program tidak diakhiri atau perintah untuk mengakhiri program tidak dicantumkan maka hal ini akan menyebabkan komputer menjadi hang.

MEMBUAT PROGRAM MENGGUNAKAN TASM

Program yang sudah dibuat di compile ke bentuk file object yang akan dibuat menjadi

.COM ataupun .EXE file. Aturan pemakaian compiler Turbo Assembler adalah sebagai berikut: Contoh:

TASM CETAK.ASM CETAK.OBJ

Maka compiler akan meng-compile file CETAK.ASM dari .ASM file ke format .OBJ file.

Linking

File object yang telah terbentuk dengan TASM, belum dapat dieksekusi secara langsung. Untuk membuat file object ke bentuk file yang dapat dieksekusi (ektensi .COM atau .EXE) bisa menggunakan file TLINK.EXE.

Untuk membuat source program dalam bentuk EXE maka untuk membentuk file dengan ektensi EXE adalah dengan cara sebagai berikut:

C:\>tlink coba

Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

Bila source program yang dibuat adalah file COM, maka dapat dibuat dengan cara: C:\>tlink/t coba

(7)

[Type text] Page 7 Turbo Link Version 3.0 Copyright (c) 1987,

1990 Borland International

Label

Label didefinisikan dengan ketentuan meletakkan tanda titik dua (:) diakhir nama label

tersebut. Ketentuan pemberian nama label adalah sebagai berikut:

 Huruf, terdiri dari A-Z (Huruf besar dan kecil tidak dibedakan)

 Angka, terdiri dari 0, 1, 2, 3, 4, 5, 6, 7, 8 , 9

 Karakter Khusus, yaitu @ . _ $

 Panjang Maksimal Nama Label adalah 31 karakter

 Tidak diperbolehkan menggunakan spasi

 Bukan Keywords Assembler

 Label hanya dapat didefinisikan satu kali dalam program

Contoh penulisan label yang benar adalah: mulai: MOV CX, 5

Komentar

Komentar adalah suatu kalimat yang tidak akan diproses oleh compiler dan akan dibiarkan sebagai keterangan atau dokumentasi pada file .ASM. Simbol yang digunakan untuk

menandakan komentar adalah titik-koma (;). Apapun yang dtuliskan dibelakang tanda ';' akan

dianggap sebagai komentar. Contoh :

mulai: MOV BX,7 ; berikan nilai 7 pada BX

Perintah MOV

Perintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu register, variabel atau memory. Adapun syntax untuk perintah MOV ini adalah :

MOV Tujuan, Asal Sebagai contohnya :

(8)

[Type text] Page 8 MOV AL,9 ; masukkan nilai 9 pada AL.

MOV AH,AL ; nilai AL=9 dan AH=9

MOV AX,9 ; AX=AH+AL hingga AH=0 dan AL:=9

Penjelasan:

- MOV AL, 9 berfungsi memberikan nilai 9 pada register AL.

- MOV AH, AL nilai register AL dicopykan ke register AH.

- Setelah operasi ini register AL akan tetap bernilai 9,

- Register AH akan sama nilainya dengan AL yaitu 9.

- Pada baris ketiga MOV AX,9; register AX diberikan nilai 9.

Karena AX terdiri atas AH dan AL, maka register AH akan bernilai 0, sedangkan AL akan bernilai 9. Perintah MOV akan mengcopykan nilai pada sumber untuk dimasukan ke Tujuan, nilai sumber tidaklah berubah. Inilah sebabnya MOV(E) akan diterjemahkan disini dengan mengcopy, dan bukan memindahkan.

Perintah INT

Untuk menghasilkan suatu interupsi digunakan perintah INT dengan syntax:

INT NoInt

Dengan NoInt adalah nomor interupsi yang ingin dihasilkan. Sebagai contoh, untuk menghasilkan interupsi 21h, caranya adalah sebagai berikut:

INT 21h

maka computer akan menghasilkan perintah int 21h.

VARIABEL

Variable dalam bahasa assembler dapat dibagi menjadi 2 jenis, yaitu:

1. Variabel yang dapat dimodifikasi isinya

(9)

[Type text] Page 9 Variable yang Dapat Dimodifikasi Isinya

Variable ini adalah variable yang memakan tempat pada memory, besar memori yang dipakai variable ini ditentukan oleh besarnya variable tersebut. Variable ini dapat didefinisikan dengan DEBUG ataupun menggunakan compiler. Besaran variabel-variabel tersebut adalah:

- DB (Define Byte), mendefinisikan variable per byte

- DW (Define Word), mendefinisikan variable per word (2 byte)

- DD (Define Double Word), mendefinisikan variable per 2 word

Variabel yang Tidak Dapat Dimodifikasi Isinya

Jenis variable ini tidak akan memakan memory pada computer dan hanya dapat digunakan dalam assembler menggunakan compiler. Untuk mendefinisikan jenis variabel ini, dapat dilihat bentuk umumnya seperti di bawah ini:

Satu equ 2190h Dua equ 2323h

Tata Cara Penulisan Variabel

Untuk menulis variable caranya adalah sebagai berikut: Label (DB/DW/DD) [Isi Variabel]

Contohnya:

Satu db ‘Ini adalah sebuah variable $’

Mencetak Sebuah Kalimat

Untuk mencetak sebuah kalimat ke layar digunakan Interrupt 21 hexa service 09h. Aturan penggunaan Int 21 hexa Service 09 hexa adalah sebagai berikut:

(10)

[Type text] Page 10

- Masukkan segment dari variabel tempat menampung kata-kata yang dicetak ke register

DS dan offset-nya ke register DX dan kata-kata yang dicetak tersebut diakhiri dengan tanda dollar ‘$’.

Contoh penerapan interrupt 21 hexa service 09h: CODE_SEG SEGMENT

ASSUME CS:CODE_SEG ORG 100H

START : JMP MULAI ;data dimulai

KATA db ‘Kata-kata ini adalah kata-kata yang dicetak’ , 13, 10

db ‘menggunakan Interrupt 21 hexa service 09 hexa’, 13, 10

db ‘$’

mulai : MOV DX, OFFSET KATA ;mengisi DX dengan OFFSET DATA

MOV AH, 09H ;mengisi AH dengan SERVICE NUMBER

INT 21H

INT 20H ;pemberhentian program

CODE_SEG ENDS END START

(11)

[Type text] Page 11 ADDRESSING MODES

Ada 7 (tujuh) macam cara untuk menduplikasikan nilai pada suatu register, variabel ataupun lokasi memory, yaitu:

Tabel 3.1 Addressing Mode

ADDRESSING MODE FORMAT SEGMENT REGISTER

Immediate Data Tidak Ada

Register Register Tidak Ada

Direct Displacement Label DS DS Register Indirect [BX] [BP] [SI] [DI] DS SS DS DS Base Relative [BX] + Displacement [BP] + Displacement DS SS Direct Indexed [DI] + Displacement [SI] + Displacement DS DS Base Indexed [BX] [SI] + Displacement [BX] [DI] + Displacement [BP] [SI] + Displacement [BP] [DI] + Displacement DS DS SS SS

(12)

[Type text] Page 12 Penduplikasian atau pengcopian yang tidak diijinkan adalah:

1. Pengcopyan data antar segment register, seperti:

MOV DS,ES

Untuk memecahkan hal ini, anda bisa menggunakan register general purpose sebagai perantara, seperti:

MOV AX,ES MOV DS,AX

Selain dengan cara di atas, anda bisa juga menggunakan stack sebagai perantara, seperti: PUSH ES

POP DS

2. Pemberian nilai untuk segment register(DS, ES, CS, SS) secara langsung, seperti:

MOV ES,0B800h

Untuk memecahkan hal ini, anda bisa menggunakan register general purpose sebagai perantara, seperti:

MOV AX,0B800h MOV ES,AX

3. Pengcopyan data langsung antar memory, seperti:

MOV MemB,MemA

Untuk memecahkan hal ini, anda bisa menggunakan register general purpose sebagai perantara, seperti:

MOV AX,MemA MOV MemB,AX

Pengcopyan data antar register yang berbeda tipenya (8 bit dengan 16 bit) tanpa menggunakan pointer, seperti:

(13)

[Type text] Page 13 Immediate Addressing

Pengcopyan data yang tercepat ialah yang dinamakan dengan Immediate Addressing dan Register Addressing. Immediate Addressing adalah suatu pengcopyan data untuk suatu register 8,16 atau 32 bit (80386) langsung dari suatu angka. Contohnya:

MOV AX,50h

MOV EAX,11223344h <80386>

Immediate Addressing dapat juga mendapatkan nilainya melalui suatu constanta yang telah didefinisikan dengan perintah EQU, seperti :

A EQU 67h ;

;

MOV AX,A

Perintah di atas akan mengcopykan nilai 67h untuk register AX.

Register Addressing

Register Addressing adalah suatu proses pengcopyan data antar register. Pengcopyan antar register ini harus digunakan register yang berukuran sama, seperti AL dengan BH, CX dengan AX. Contah perintahnya:

MOV AX,CX

Register Addressing dapat juga dapat juga hanya terdiri atas sebuah register seperti pada perintah:

INC CX.

Berikut contoh program perkalian yang menggunakan prosesor 80386: .MODEL SMALL

.386 ; Untuk prosesor 80386

(14)

[Type text] Page 14 ORG 100h

Proses :

MOV EAX,12345678h ; Immediate Addressing

MOV EDX,33112244h ; Immediate Addressing

MOV EBX,EDX ; Register Addressing

MUL EBX ; Register Addressing

END Proses

Aturan perkalian pada pada 80386 ini sama dengan perkalian yang telah kita bicarakan didepan. Pada prosesor 80386 digunakan register-register 32 bit, seperti EAX ,EBX dan EDX seperti program di atas. Untuk menggunakan kelebihan pada komputer 80386 ini harus

menambahkan directive .386.

Direct Addressing

Secara umum Direct Addressing ialah suatu pengcopyan data pada suatu register dan simbol.

Contoh:

TData : JMP Proses A DB 12h B DB 59h

Proses : MOV AL,A ; Direct Addressing

MOV AH,B ; Direct Addressing

Perintah diatas akan mengcopykan data variabel A dan B pada register AL dan AH.

Register Indirect Addressing

Register Indirect Addressing digunakan untuk mengakses suatu data yang banyak dengan mengambil alamat efektif dari data tersebut. Register-register yang dapat digunakan pada addressing ini adalah BX,BP,SI dan DI. Tetapi bila membuat program pada prosesor 80386 (dengan menambahkan directive .386) maka semua register general purpose bisa dipakai. Untuk

(15)

[Type text] Page 15 mendapatkan alamat efektif dari suatu data dapat menggunakan perintah LEA (Load Effective Addres) dengan syntax :

LEA Reg,Data

Untuk mengakses data yang ditunjukkan oleh register Reg, setelah didapatkannya alamat

efektif harus menggunakan tanda kurung siku [ ].

Jika pada perintah pengaksesannya tidak disebutkan segmennya, maka yang digunakan adalah segment default. Seperti bila menggunakan register BX sebagai penunjuk offset, maka segment DS yang digunakan. Sebaliknya, bila menggunakan register BP sebagai penunjuk offset, maka segment SS yang digunakan. Berikut contoh program yang menggunakan register inderict addressing dengan mengakses data melalui alamat Efektif:

.MODEL SMALL .CODE ORG 100h TData : JMP Proses Kal DB 'ABCDEF' Proses:

LEA BX,Kal ; Ambil Offset Kal

MOV CX,2 Ulang:

MOV DL,[BX] ; kode ASCII yang ingin dicetak

MOV AH,02h ; Nilai servis ntuk mencetak karakter

INT 21h ; Mencetak karakter

ADD BX,2 ; BX:=BX+2

LOOP Ulang ; Lompat ke Ulang

INT 20h END TData

(16)

[Type text] Page 16 Program di atas akan menghasilkan output seperti berikut:

AC

Pertama-tama kita mendefinisikan data untuk variabel 'Kal', dimana data ini nantinya akan disimpan pada memory, seperti berikut:

A B C D E F

Alamat Offset: 103 104 105 106 107 108

Pada perintah LEA BX, Kal, maka register BX akan menunjuk pada alamat efektif dari

variabel Kal, sebagai berikut :

BX=103 _

A B C D E F

Alamat Offset: 103 104 105 106 107 108

Pada perintah MOV CX,2, nilai 2 diberikan kepada register CX untuk digunakan sebagai

counter pada saat LOOP. Kemudian, mengambil nilai yang ditunjukkan oleh register BX yaitu

'A' dengan perintah MOV DL,[BX]. Tanda kurung siku menyatakan bahwa yang diambil adalah

nilai yang ditunjuk oleh register BX BUKAN mengambil nilai BX. Setelah itu kita mencetak karakter tersebut dengan interupsi 21h servis 02 dimana kode ASCII dari karakter yang ingin dicetak telah dimasukkan pada register DL.

Pada perintah ADD BX, 2 artinya menambahkan nilai 2 pada BX sehingga kini BX akan

berjalan sebanyak 2 byte dan menunjuk pada data 'C' sebagai berikut : BX=103

_

A B C D E F

(17)

[Type text] Page 17 Kini BX telah menunjuk pada alamat tempat data 'C' berada, sehingga pada pencetakan karakter selanjutnya, yang tercetak adalah karakter 'C'.

Catatan:

satu karakter menggunakan satu byte memory.

Base Relative Addressing

Jenis addressing ini digunakan untuk mengakses suatu tabel dengan mengambil alamat efektifnya. Alamat efektif dari tabel tersebut nanti akan digunakan sebagai patokan untuk mengakses data lain pada tabel tersebut. Register yang digunakan sebagai penunjuk alamat efektif ini adalah register BX,BP,SI dan DI.

Berikut contoh program mengakses data menggunakan Base Relative Addressing: .MODEL SMALL .CODE ORG 100h TData : JMP Proses Tabel DW 11h,50h,0Ah,14h,5Ah Proses: LEA BX,Tabel MOV AX,Tabel ADD AX,[BX]+2 ADD AX,[BX]+4 ADD AX,[BX+6] ADD AX,[BX+8] INT 20h END TData

Pertama-tama program mendefinisikan suatu tabel yang berisi data 11h,50h,0Ah,14h dan 5Ah. Data ini akan disimpan dalam memory sebagai berikut:

(18)

[Type text] Page 18 0011 0050 000A 0014 005A

Alamat Offset: 103 105 107 109 10A

Setelah itu alamat efektifnya diambil dengan menggunakan register BX dengan perintah LEA BX, Tabel sehingga BX akan menunjuk pada alamat data yang pertama.

BX=103 _

0011 0050 000A 0014 005A

Alamat Offset: 103 105 107 109 10A

Dengan perintah MOV AX, Tabel maka AX akan berisi nilai pada word pertama

variabel 'Tabel', yaitu 11. Dengan BX yang telah menunjuk pada data pertama (0011) maka dapat dijadikan sebagai patokan untuk mengakses data yang lain.

BX BX+2 BX+4 BX+6 BX+8

_ _ _ _ _

0011 0050 000A 0014 005A

Alamat Offset: 103 105 107 109 10A

Yang perlu diperhatikan adalah bahwa kita mengakses data yang lain terhadap BX tanpa merubah posisi dari penunjuk BX, jadi BX tetap menunjuk pada offset Tabel. Register BX ditambah dengan 2 karena data terdefinisi sebagai word (2 byte). Terlihat bahwa menambah BX di dalam dan di luar kurung siku adalah sama.

Direct Indexed Addressing

Direct Indexed Addressing digunakan untuk mengambil alamat efektif dari suatu data dan mengakses data dengan menggunakan register DI atau SI. Sebagai contoh tanggal dikeluarkannya ROM BIOS oleh komputer.

(19)

[Type text] Page 19 Tanggal dikeluarkannya ROM BIOS pada setiap komputer terdapat pada alamat mulai F000h:FFF5h sampai F000h:FFFCh. Pada daerah ini akan terdapat 8 byte (8 huruf) yang berisi tanggal dikeluarkannya ROM BIOS. Tanggal yang tercantum menggunakan format penulisan tanggal Amerika, misalnya 04/03/90 artinya 14 Maret 1990.

Program ini adalah contoh melihat tanggal versi BIOS Komputer: .MODEL SMALL

.CODE ORG 100h Proses :

MOV AX,0F000h ; Masukkan nilai F000 pada AX

MOV ES,AX ; Copykan nilai AX ke ES

MOV BX,0FFF5h ; Penunjuk Offset

XOR SI,SI ; Jadikan SI=0

MOV CX,8 ; Counter untuk LOOP

Ulang:

MOV DL,ES:[BX][SI] ; Ambil isi alamat ES:BX+SI

MOV AH,02h ; Nilai servis mencetak karakter

INT 21h ; cetak karakter

INC SI ; SI:=SI+1

LOOP Ulang ; Lompat ke Ulang sampai CX=0

INT 20h ; Selesai ! kembali ke DOS

END Proses

Bila program dijalankan, maka akan ditampilkan: 18/08/94 <tiap komputer hasilnya dapat berbeda>

Karena tidak dapat mengisikan sebuah nilai secara langsung kepada segment register, oleh karena itu digunakan register AX sebagai perantara sebagai berikut:

MOV AX,0F000h MOV ES,AX

(20)

[Type text] Page 20 Setelah itu register BX yang kita gunakan sebagai penunjuk offset, diisi dengan nilai FFF5, sedangkan SI yang nantinya digunakan sebagai displacement (perpindahan) kita jadikan nol. Register CX yang digunakan sebagai counter diisi dengan 8, sesuai dengan jumlah LOOP yang dinginkan:

MOV BX,0FFF5h XOR SI,SI

MOV CX,8

Dengan segment register ES dan offset pada register BX+SI data pada alamat F000:FFF5 dapat diambil. Segment register ES ini harus dituliskan, karena bila tidak dituliskan maka segment yang digunakan adalah segment default atau segment register DS. Register SI

digunakan sebagai perpindahan terhadap register BX, [BX][SI] artinya register BX+SI.

MOV DL,ES:[BX][SI] MOV AH,02h

INT 21h INC SI LOOP Ulang

Proses diulangi sampai 8 karakter tanggal dikeluarkannya ROM BIOS tercetak semua.

Based Indexed Addressing

Jenis addressing ini biasanya digunakan untuk mengakses suatu record atau suatu array 2 dimensi. Contoh program mengakses array dengan base indexed addressing dapat dilihat di bawah ini: .MODEL SMALL .CODE ORG 100h TData : JMP Proses Mahasiswa STRUC

(21)

[Type text] Page 21

Nim DW 0 ; 2 byte

Tinggi DB 0 ; 1 byte

Nilai DB 0,0,0,0 ; 4 byte

Mahasiswa ENDS

Absen Mahasiswa 10 DUP (<>) Proses:

LEA BX,Absen ; BX Menunjuk Offset Absen

ADD BX,21 ; BX Menunjuk pada Record ke 4

XOR SI,SI ; SI=0

MOV [BX][SI].Nim ,0099h ; NIM, record ke 4

MOV [BX][SI].Tinggi ,10h ; Tinggi, record ke 4

MOV [BX][SI+1].Nilai,78h ; Nilai pertama

MOV [BX][SI+2].Nilai,99h ; Nilai kedua

MOV [BX][SI+3].Nilai,50h ; Nilai keempat

MOV [BX][SI+4].Nilai,83h ; Nilai kelima

INT 20h ; Selesai !!

END TData

Pada program di atas dapat dilihat bagaimana based indexed addressding memudahkan dalam mengakses suatu array record.

Mahasiswa STRUC Nim DW ?

Tinggi DB ? Nilai DB ?,?,?,? Mahasiswa ENDS

Absen Mahasiswa 10 DUP (<>)

Perintah "STRUC" digunakan untuk mendefinisikan suatu record dan diakhiri dengan "ENDS". Field-field yang didefinisikan untuk record mahasiswa ini adalah 2 byte untuk NIM, 1 byte untuk Tinggi, 4 byte untuk Nilai.

(22)

[Type text] Page 22 Jadi besar satu record adalah 7 byte. Pada baris selanjutnya didefinisikan 10 buah record

mahasiwa dengan perintah DUP. Tanda cryptic "(<>)" digunakan untuk menginialisasi nilai pada

array menjadi nol. ADD BX,21 XOR SI,SI

Program akan memasukan data pada record ke 4, dan karena 1 record menggunakan 7 byte, maka BX kita tambah dengan 21 supaya BX menunjuk pada record ke 4. Register SI yang nantinya kita gunakan sebagai perpindahan dijadikan 0.

MOV [BX][SI].Nim ,0099h MOV [BX][SI].Tinggi ,10h

Dengan BX yang telah menunjuk pada record ke 4, maka dapat langsung memasukkan nilai untuk NIM dan Tinggi pada record ke 4.

MOV [BX][SI].Nilai ,78h MOV [BX][SI+1].Nilai,99h MOV [BX][SI+2].Nilai,50h MOV [BX][SI+3].Nilai,83h

Kini perhatikah bahwa dalam memasukkan angka untuk variabel "nilai" yang mempunyai 4

byte bisa digunakan register SI sebagai perpindahan. Perintah MOV [BX][SI] akan menunjuk pada byte pertama untuk variabel nilai sedangkan perintah [BX][SI+1] akan menunjuk pada byte kedua untuk variabel nilai, demikianlah seterusnya.

(23)

[Type text] Page 23

P3.2 Studi Kasus

Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk itu dapat menggunakan interupsi 10h dengan aturan pemakaiannya sebagai berikut:

INPUT AH = 09h

AL = Kode ASCII dari karakter yang akan dicetak BH = Nomor halaman (0 untuk halaman 1)

BL = Atribut atau warna dari karakter yang akan dicetak CX = Banyaknya karakter tersebut akan dicetak

Setelah semua register dimasukkan nilainya maka lakukanlah interupsi 10h. Perlu anda perhatikan bahwa interupsi ini mencetak karakter tanpa menggerakkan kursor.

.MODEL SMALL .CODE

ORG 100h Proses :

MOV AH,09h ; Nilai servis untuk mencetak karakter

MOV AL,'A' ; AL = Karakter yang akan dicetak

MOV BH,00h ; Nomor Halaman layar

MOV BL,93h ; Warna atau atribut dari karakter

MOV CX,03h ; Banyaknya karakter yang ingin dicetak

INT 10h ; Service yang menghasilkan warna

INT 20h END Proses

Bila program di atas dieksekusi maka akan ditampilkan huruf 'A' sebanyak 3 kali dengan warna dasar biru kedip dan warna tulisan Cyan (sesuai dengan nilai register BL 93).

Hasilnya seperti berikut:

C:\> warna AAA

(24)

[Type text] Page 24 Bagaimana membuat program mencetak kalimat dengan menggunakan Base Relative Addressing? .MODEL SMALL .CODE ORG 100h TData : JMP Proses

Kalimat DB 'NYAMUK GORENG' ; 13 karakter Proses:

XOR BX,BX ; BX=0 Untuk penunjuk Offset

MOV CX,13 ; Counter LOOP

Ulang :

MOV DL,Kalimat[BX] ; Ambil karakter yang ke BX

MOV AH,02 ; Servis untuk cetak karakter

INT 21h ; Cetak Karakter

INC BX ; BX:=BX+1

LOOP Ulang ; Lompat ke Ulang sampai CX=0

INT 20h ; Selesai, kembali ke DOS !!

END TData

Bila program di atas dijalankan maka akan menghasilkan output sebagai berikut: NYAMUK GORENG

Pada program tersebut register BX dijadikan sebagai pencatat offset dari "kalimat".

Dengan nilai BX sama dengan nol (0), akan menunjuk pada karakter pertama dari Kalimat (ingat! XOR dengan bilangan yang sama pasti menghasilkan 0). Setelah itu program memberikan nilai 13 kepada CX sebagai penghitung banyaknya LOOP yang akan terjadi.

(25)

[Type text] Page 25

_ _

N Y A M U K G O R E N G

Pada perintah MOV DL,Kalimat[BX], register BX digunakan untuk menunjukkan offset dari

kalimat. Dengan demikian saat pertama kali yang dimasukkan pada register DL untuk dicetak adalah karakter 'N' kemudian BX ditambah satu sehingga BX menunjuk pada karakter 'Y'. Demikian seterusnya sampai seluruh kalimat tersebut tercetak.

P3.3 Latihan

1. Tuliskan bentuk Format penulisan program Assembly dengan menggunakan TASM

(TURBO ASSEMBLER) yang Anda ketahui beserta langkah-langkahnya dan cara

menjalankannya hingga menjadi file .com.

2. Apakah fungsi dari service 09h , interrupt 21h? Register apa saja yang digunakan dan

jelaskan cara penggunaannya.

3. Buatlah program sederhana menggunakan Turbo Assembler.

P3.4 Daftar Pustaka

Lukito, Ediman. Dasar-dasar Pemrograman dengan Assembler 8088. PT. Elex Media Komputindo. Jakarta. 1990.

Pemrograman Bahasa Assembly Edisi Online Versi 1.0. Agustus 2011. http://www.scribd.com/doc/46495287/Sto-Assembly

Gambar

Tabel 3.1 Addressing Mode

Referensi

Dokumen terkait

Buatlah program untuk mengurutkan suatu data angka yang dimasukkan dari keyboard, secara urut menaik dan menurun. Gunakan variabel

Jika Carry Flag = 0, maka program akan melompat ke alamat yang disebutkan dalam perintah; jika tidak, maka program akan melanjutkan ke baris berikutnya (tidak terjadi

UDR merupakan register 8 bit yang terdiri dari 2 buah dengan alamat yang sama, yang digunakan sebagai tempat untuk menyimpan data yang akan dikirimkan (TXB) atau tempat data

nama penyewa,alamat,jenis kelamin, telepon proses ini dimulai dengan menekan tombol tambah jika data sudah lengkap maka klik simpan ,batal untuk membatalkan proses input lalu

Mengisi data dengan benar -nama toko: {diisi} -email: {diisi} -alamat: {diisi} -telpon: {diisi} Sistem akan menyimpan ke database dan membawa ke halaman data toko

• General purpose register , digunakan untuk beraneka ragam keperluan pada suatu instruksi mesin yang melakukan suatu operasi terhadap data, macamnya: Accumulator (AX) u/

UDR merupakan register 8 bit yang terdiri dari 2 buah dengan alamat yang sama, yang digunakan sebagai tempat untuk menyimpan data yang akan dikirimkan (TXB)

Instruksi SBC digunakan untuk mengurangkan isi register A dengan data 8 bit yang berada pada suatu register atau data immediate atau data suatu memori dengan mengikutsertakan