assembly i

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

Upload: kikit

Post on 19-Dec-2015

236 views

Category:

Documents


3 download

DESCRIPTION

asembly robrotika

TRANSCRIPT

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