assembly i
Post on 19-Dec-2015
229 views
Embed Size (px)
DESCRIPTION
asembly robrotikaTRANSCRIPT
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