Anda di halaman 1dari 13

PEMROGRAMAN BAHASA ASSEMBLY

1. Pengenalan
Bahasa assembly adalah bahasa pemrograman dengan korespondensi satu-satu antara
perintah-perintah/pernyataannya dan bahasa mesin komputer. Bahasa assembly tidak
satu jenis sebagaimana CPU komputer pun bermacam-macam. Setiap bahasa assembly
secara langsung dipengaruhi oleh set instruksi mesin komputer dan arsitektur perangkat
keras. Secara singkat, bahasa assembly IBM-PC mengacu pada istruksi-instruksi yang
dikenali oleh keluargaa mikroprosesor Intel 8086-80486.
Bahasa asssembly tidak langsung dapat dimengerti oleh komputer, untuk itu bahasa
assembly perlu diterjemahkan ke dalam bahasa mesin. Untuk menterjemahkan bahasa
assembly digunakanlah bahasa assembler karena pada dasarnya setiap komputer
memiliki bahasa assembly yang berbeda beda hal ini dipengaruhi oleh rancangan
komputer mempengaruhi instruksi yang dapat dieksekusi.
Berbagai alasan mengapa kita mempelajari bahasa assembly. Salah satu alasan adalah
untuk mempelajari arsitektur komputer dan sistem operasi. Alasan lain adalah karena
kegunaan pemrograman tertentu sulit atau tidak mungkin dikerjakan oleh bahasa tingkat
tinggi. Contoh, kompunikasi langsung dengan sistem operasi komputer mungkin
deperlukan. Program grafik warna kecepatan tinggi mungkin harus ditulis menggunakan
memori minimum. Program khusus mungkin diperlukan sebagai penghubung antara
printer dengan komputer. Sering juga perlu untuk menghilangkan keterbatasan bahasa
tingkat tinggi, diluar keperluan, menentukan aturan-aturan tentang apa yang dibolehkan
dalam program. Contoh, pascal tidak mengijinkan nilai karakter diberi nilai dalam variabel
integerr. Pemrogram yang berpengalaman akan menemukan cara untuk keluar dari
batasan ini, tapi dalam pelaksanaannya, membuat kode tidak dapat digunakan oleh
sistem komputer lain dan sulit dibaca. Bahasa assembly, sebaliknya, memiliki sangat
sedikit batasan atau aturan. Harga yang harus dibayar untuk keleluasaan itu adalah perlu
menangani berbagai kerumitan dalam pemrograman.
Dalam bahasa Assembly mempunyai 3 tipe intruksi dasar yaitu : mnemonic, operand1
dan operand2 serta komentar. Mnemonic atau opcode ialah kode yang akan melakukan
aksi terhadap operand . Operand ialah data yang diproses oleh opcode. Sebuah opcode

bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak perlu operand. Sedangkan
komentar dapat kita berikan dengan menggunakan tanda titik koma (;).
Pada pemrograman assembly penggunaan interupsi akan sangat sering dijumpai untuk
membantu mengerjakan suatu pekerjaan. Perintah interupsi ditulis dengan INT dengan
sintak INT No_interupsi.

Contoh program dalam bahasa assembly

ORG 100H
MOV AX, 0090H
MOV DS, AX
MOV SI,0120H
MOV DI, 0130H
MOV AX, SI
MOV DI, AX
Int 20h

Adapun bentuk ideal dari penulisan kode program pada assembly dapat dilihat di bawha
ini.

.MODEL SMALL
.CODE
ORG 100H
Label1 : JMP Label2
Kode Program
Label2 :
Kode Program
INT 20H
END Label1

.MODEL SMALL
Tanda directive ini digunakan untuk memberitahukan kepada assembler bentuk memory
yang digunakan oleh program kita. 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.

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

.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)
ditaruh 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.
Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya. Perintah JUMP yang
digunakan pada bagan diatas dimaksudkan agar melewati tempat data program, karena
jika tidak ada perintah JUMP ini maka data program akan ikut dieksekusi sehingga
kemungkinan besar akan menyebabkan program anda menjadi Hang.
2. Konstanta dan Variabel

Konstanta
Untuk membuat suatu konstanta dapat menggunakan perintah EQU untuk
mendefinisikannya. Data yang sudah didefinisikan dengan menggunakan perintah
EQU tidak dapat dirubah.
Contoh:
.
MODEL SMALL
.CODE
ORG 100H

TData :
Na EQU 089H

MainPro :
MOV AX, Na
ret

Variabel
Di dalam assembler kita bisa menyimpan data dengan berbagai tipe data yang
berbeda-beda. Kita dapat memberikan nama pada data tersebut, untuk
memudahkan dalam pengaksesan data tersebut.

Nama Tipe Data

Ukuran

DB (Define Byte)

1Byte

DW (Define Word)

2Byte

DD (Define DoubleWord)

4Byte

DF (Define FarWord)

6Byte

DQ (Define QuardWord)

8Byte

DT (Define TenByte)

10Byte

Secara umum sintak untuk mendefinisikan suatu variabel adalah:


Nama_variabel (spasi) TipeData (spasi) data
Contoh:
.MODEL SMALL
.CODE
ORG 100H

TData :
Na DW 12H
Ne DW ?

MainPro :
MOV AX, Na
Mov Ne, AX
Mov BX, Ne
ret

Pada contoh di atas, nilai dari DW=16 bit, jadi Na nilainya sama dengan 16 bit. Apabila
nilai dari Na anda coba pindahkan ke register yang memiliki nilai tampung 8 bit
seperti Al atau AH maka akan muncul pesan error. Hal ini dikarenakan daya tampung
antara Na dan register yang dituju tidak sama.
Masalah ini dapat di atasi dengan penggunaan pointer. Untuk materi pointer, Anda
dapat membacanya pada file yang telah diberikan.

3. Operasi Aritmatika
A. ADD
Pada bahasa assembly perinth untuk melakukan operasi penambahan dapat
menggunakan perintah ADD atau ADC. Adapun sintak dari perintah ADD ini yaitu.
ADD, Tujuan, Asal
Antara tujuan dan asal haruslah memiliki daya tampung yang sama. Misalkan tujuan
dari operasi ADD ini adalah register AX yang memiliki daya tampung 16 bit, maka asal
dari operasi ADD ini haruslah memiliki daya ampung yang sama yaitu 16 bit seperti
BX, CX atau yang lainnya. Pada operasi ADD ini proses yang terjadi yaitu
Tujuan=Tujuan + Asal.
Contoh program
.MODEL SMALL
.CODE
ORG 100H

TData :
Na DW 12H
Ne DW 12
Hsl DW ?

MainPro :
MOV AX, Na
ADD AX, Ne
Mov Hsl, AX
ret

B. ADC
ADC ini memiliki kesamaan fungsi dengan ADD, perbedaan dari perintah ini lokasi
Tujuan bukan menjadi penampung satu satunya namun Tujuan = Tujuan + Asal +
Carry. Misalkan saja kita akan menambahkan dua buah bilangan 23139876h +
8DCAF887h. Pada operasi penjumlahan ini kita tidak bisa menggunakan register 16
bit karena daya tampung register 16 hanya sampai FFFFh.

Untuk menyelesaikan permasalahan di atas, perhatikanlah contoh program di


bawah.
org 100h
MOV AX, 2313H
MOV BX, 8DCAH
MOV CX, 9876H
MOV DX, 0F887H
ADD CX, DX
ADC AX, BX
int 20h

Penggunaan operasi ADC ini akan mempengaruhi beberapa flag yaitu CF,PF,AF,ZF,SF
dan OF.

C. INC
Perintah INC(Increment) digunakan khusus untuk pertambahan dengan 1. Perintah
INC hanya menggunakan 1 byte memory, sedangkan perintah ADD dan ADC
menggunakan 3 byte. Oleh sebab itu bila anda ingin melakukan operasi pertambahan
dengan 1 gunakanlah perintah INC. Syntax pemakainya adalah INC Tujuan.

D. SUB
Untuk melakukan pengurangan terhadap suatu nilai pada bahasa assembly
menggunakan perintah SUB. Sintak dari perintah ini adalah SUB Tujuan, Asal.
Perintah SUB akan mengurangkan nilai pada Tujuan dengan Asal. Hasil yang didapat
akan ditaruh pada Tujuan, dalam bahasa pascal sama dengan instruksi
Tujuan:=Tujuan-Asal.
.MODEL SMALL
.CODE
ORG 100H

TData :

Na DW 12H
Ne DW 12
Hsl DW ?

MainPro :
MOV AX, Na
SUB AX, Ne
Mov Hsl, AX
int 20h

E. SBB
Perintah SBB ini memiliki kemiripan fungsi yaitu untuk menangani operasi aritmatika
dimana datanya lebih besar dari 16 bit, namun bedanya SBB ini digunakan untuk
operasi pengurangan.
Contoh program.

; digunakan untuk melakukan operasi pengurangan


; 23139876h - 0DCAF887h
; hasilnya : 15489FEF

.MODEL SMALL
.CODE
org 100h
MOV AX, 2313H
MOV BX, 0DCAH
MOV CX, 9876H
MOV DX, 0F887H
SUB CX, DX
SBB AX, BX
int 20h

F. DEC
Perintah DEC (Decrement) mirip dengan INC hanya saja perintah ini digunakan
khusus untuk pengurangan dengan 1. Syntax pemakainya adalah DEC Tujuan.

G. MUL
Pada operasi perkalian, perintah yang digunakan yaitu MUL. Adapun sintak dari
perintah ini yaitu MUL Sumber. Sumber pada operasi MUL ini dapat berupa register
8 bit, register 16 bit atau dapat pula berupa variabel. Apabila sumber pengali
merupakan data 8 bit, misalhkan saja BL maka komputer akan mengambil niali yang
tersimpan pada register AL untuk dikalikan dengan nilai yang terdapat pada register
BL hasilnya akan selalu disimpan pada register AX.
Apabila pengalinya merupakan data 16 bit seperti BX maka komputer akan
mengalikan nilai BX dengan nilai yang terdapat pada AX. Hasil perkalian akan
disimpan pada register DX:AX, dimana register DX akan menyimpan word tingginya
dan AX menyimpan nilai word rendahnya.
Perhatikan contoh di bawah ini.
.MODEL SMALL
.CODE
org 100h

Tdata:
JMP Proses
A DW 1234h

Proses:
MOV AX, 1221h
MOV BL, 2h
MUL BL

MOV AX, 1221h


MOV BX, 2h

MUL BX

MOV AX, 1221h


MUL A

int 20h

Amatilah setiap tahap pengeksekusian dari program di atas.


H. DIV
Pada dasarnya perintah DIV ini memiliki kemiripan dengan perintah MUL. Nilai yang
akan dikalikan ditentukan oleh pengalinya apakah berasal dari data 8 bit atau 16 bit.
Pada perintah DIV yang datanya 8 bit, komputer akan mengambil nilai pada register
AX dan membaginya dengan data sumber. Hasil pembagian akan ditempatkan pada
register AL dan sisa hasil baginya akan disimpan pada register AH, sedangkan pada
pembagian 16 bit hasil bagi akan disimpan pada register AX dan sisa hasil bagi akan
disimpan pada register DX.

Perhatikanlah contoh di bawah ini.


.MODEL SMALL
.CODE
org 100h

Tdata:
JMP Proses
A DW 5h

Proses:
MOV AX, 0200h
MOV BL, 20h
DIV BL
MOV DX, 0

MOV AX, 0221h


MOV BX, 2h
DIV BX
MOV DX, 0

MOV AX, 1221h


DIV A
MOV DX, 0

END Proses
int 20h

4. Mencetak Huruf
Bila dihasilkan interupsi 21h apa yang akan dikerjakan oleh komputer ?. Jawabnya, ada
banyak sekali kemungkinan. Pada saat terjadi interupsi 21h maka pertama-tama yang
dilakukan komputer adalah melihat isi atau nilai apa yang terdapat pada register AH.
Misalkan bila nilai AH adalah 2 maka komputer akan mencetak sebuah karakter,
berdasarkan kode ASCII yang terdapat pada register DL. Bila nilai pada register AH
bukanlah 2, pada saat dilakukan interupsi 21h maka yang dikerjakaan oleh komputer
akan lain lagi.
Dengan demikian kita bisa mencetak sebuah karakter yang diinginkan dengan
meletakkan angka 2 pada register AH dan meletakkan kode ASCII dari karakter yang ingin
dicetak pada register DL sebelum menghasilkan interupsi 21h.
Contoh Program
.MODEL SMALL
.CODE
org 100h

Proses :
MOV AH,02h ; Nilai servis ntuk mencetak karakter

MOV DL,072 ; DL = Karakter ASCII yang akan dicetak


INT 21h ; Cetak karakter !!

INT 20h ; Selesai ! kembali ke DOS


END Proses

Mencetak Karakter Beserta Atribut


Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk itu anda
bisa menggunakan interupsi ke 10h dengan aturan pemakaiannya :
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.
Contoh Program:

.MODEL SMALL
.CODE
org 100h

Proses :
MOV AH,09h ; Nilai servis untuk mencetak karakter
MOV AL,072 ; AL = Karakter yang akan dicetak
MOV BH,00h ; Nomor Halaman layar
MOV BL,93h ; Warna atau atribut dari karakter
MOV CX,10h ; Banyaknya karakter yang ingin dicetak
INT 10h ; Laksanakan !!!

INT 20h ; Selesai ! kembali ke DOS


END Proses