assembly

15
Created By : IKA PARMA DEWI Page 1 I. PENGENALAN 1.1. Pendahuluan Bahasa assembly membuka rahasia perangkat keras dan perangkat lunak komputer. Disini akan dipelajari bagaimana perangkat keras komputer dan sistem operasi bekerjasama dan bagaimana program aplikasi berkomunikasi dengan sistem operasi. Untuk memahami keseluruhan komputer dan sistem informasinya, seseorang perlu memahami perangkat lunak pada berbagai level. Pertama level program aplikasi, dimana program berinteraksi dengan DOS. Level bahasa tingkat tinggi, dimana perintah/pernyataan yang handal diuraikan kedalam instruksi-instruksi mesin. Pada level yang lebih rendah (lebih dekat dengan mesin), seseorang akan konsentrasi pada instruksi-instruksi yang dikenali oleh CPU, sebagaimana program berkomunikasi dengan DOS. Bahasa assembly meningkatkan pemahaman seseorang tentang level yang lebih rendah ini. Pada tulisan ini memberikan titik pandang bahwa bahasa assembly seharusnya dipelajari secara kontekstual, sehingga interaksi perangkat keras dan preangkat lunak komputer mungkin lebih mudah dipahami. Pada bab berikutnya, akan dibahas perangkat keras komputer, bahasa mesin, konsep sistem operasi dan struktur pemrograman. Apakah bahasa assembly? 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. Apa itu assembler? Assembler adalah program yang mengkonversi kode program sumber ke dalam bahasa mesin. Pada tuliasn ini akan mengacu pada assembler yang membuat instruksi mesin untuk mikrokomputer IBP yang sesuai. Semua kompter tersebut menggunakan mikroprosesor keluarga intel, mulai dari intel 8088 sampai 80486. Program akan berjalan dibawah sistem operasi PC-DOS/MS-DOS versi 3.0 atau lebih tinggi. Terdapat dua assembler yang dikenal baik untuk IBM-PC yaitu MASM (Microsoft Assembler) dan TASM (Turbo Assembler). Bahasa assembly adalah kumpulan instruksi yang spesifik untuk sistem komputer tertentu. Assembler adalah program yang menerjemahkan program yang ditulis dalam bahasa assembly ke dalam bahasa mesin, yang dapat dieksekusi oleh komputer. Setiap tipe komputer meiliki bahasa assembly yang berbeda, karena rancangan komputer mempengaruhi instruksi yang dapat dieksekusi.

Upload: amalmulia01

Post on 27-Nov-2015

28 views

Category:

Documents


2 download

DESCRIPTION

belajar

TRANSCRIPT

Page 1: Assembly

Created By : IKA PARMA DEWI Page 1

I. PENGENALAN

1.1. Pendahuluan

Bahasa assembly membuka rahasia perangkat keras dan perangkat lunak

komputer. Disini akan dipelajari bagaimana perangkat keras komputer dan sistem

operasi bekerjasama dan bagaimana program aplikasi berkomunikasi dengan sistem

operasi. Untuk memahami keseluruhan komputer dan sistem informasinya, seseorang

perlu memahami perangkat lunak pada berbagai level. Pertama level program

aplikasi, dimana program berinteraksi dengan DOS. Level bahasa tingkat tinggi,

dimana perintah/pernyataan yang handal diuraikan kedalam instruksi-instruksi

mesin. Pada level yang lebih rendah (lebih dekat dengan mesin), seseorang akan

konsentrasi pada instruksi-instruksi yang dikenali oleh CPU, sebagaimana program

berkomunikasi dengan DOS.

Bahasa assembly meningkatkan pemahaman seseorang tentang level yang lebih

rendah ini. Pada tulisan ini memberikan titik pandang bahwa bahasa assembly

seharusnya dipelajari secara kontekstual, sehingga interaksi perangkat keras dan

preangkat lunak komputer mungkin lebih mudah dipahami. Pada bab berikutnya,

akan dibahas perangkat keras komputer, bahasa mesin, konsep sistem operasi dan

struktur pemrograman.

Apakah bahasa assembly?

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.

Apa itu assembler?

Assembler adalah program yang mengkonversi kode program sumber ke dalam

bahasa mesin. Pada tuliasn ini akan mengacu pada assembler yang membuat

instruksi mesin untuk mikrokomputer IBP yang sesuai. Semua kompter tersebut

menggunakan mikroprosesor keluarga intel, mulai dari intel 8088 sampai 80486.

Program akan berjalan dibawah sistem operasi PC-DOS/MS-DOS versi 3.0 atau

lebih tinggi. Terdapat dua assembler yang dikenal baik untuk IBM-PC yaitu MASM

(Microsoft Assembler) dan TASM (Turbo Assembler).

Bahasa assembly adalah kumpulan instruksi yang spesifik untuk sistem komputer

tertentu. Assembler adalah program yang menerjemahkan program yang ditulis

dalam bahasa assembly ke dalam bahasa mesin, yang dapat dieksekusi oleh

komputer. Setiap tipe komputer meiliki bahasa assembly yang berbeda, karena

rancangan komputer mempengaruhi instruksi yang dapat dieksekusi.

Page 2: Assembly

Created By : IKA PARMA DEWI Page 2

Bahasa assembly disebut bahasa level-bawah karena dalam struktur dan fungsi

dekat dengan bahasa mesin. Sebaliknya, bahasa tingkat tingggi seperti Pascal, Basic,

Fortran dan Cobol mempunyai perintah-perintah yang handal yang diterjemahkan ke

dalam berbagai instruksi mesin oleh kompiler.

Mengapa mempelajari bahasa assembly?

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.

Aplikasi bahasa assembly

Biasanya ktia membuat subrutin dalam bahasa assembly dan memanggilnya dari

program bahasa tingkat tinggi. Keuntungan dapat diperoleh karena ketanya bahasa

tingkat tinggi, dengan menggunakan bahasa tingkat rendah dalam membuat aplikasi.

Subrutin bahasa assembly menangani operasi-operasi yang tidak tersedia dalam

bahasa tingkat tinggi. Misal kita menulis program aplikasi bisnis dalam Cobol untuk

IBM-PC. Kita memerlukan aplikasi untuk mengecek ruang bebas disk, membuat

subdirektory, menulis proteksi file, dan membuat window yang overlap, semuanya

dalam satu program.

Misal kompilator Cobol tidak dapat melakukan semuanya, maka kita dapat

mebuat subrutin bahasa assembly untuk menangani tugas-tugas tersebut.

Bahasa mesin

Sebelum lebih jauh secara rinci membahas bahasa assembly, mari kita lihat dalam

suatu prespektif. Komputer kenyataannya tidak mengerti bahasa assembly, dia hanya

mengikuti bahasa mesin. Bahasa mesin adalah bahasa yang dibangun oleh sejumlah

angka yang dapat diinterpretasikan oleh CPU komputer. CPU biasanya mempunyai

program kecil yang ditambahkan langsung ke dalam chip, disebut microcode.

Penerjemah microcode mengubah langsung instruksi-instruksi mesin ke dalam sinyal

perangkat keras.

Dengan bahasa mesin memungkinkan untuk melaksanakan tugas-tugas umum

oleh CPU, seperti pemindahan bilangan atau perhitungan aritmatik. Berikut contoh

instruksi bahasa mesin yang memindahkan angka 5 ke dalam register AL.

Page 3: Assembly

Created By : IKA PARMA DEWI Page 3

1011000000000101

Deretan angka diatas ditulis dalam biner, sistem penomoran yang dibangun hanya

oleh angka 1 dan 0. Delapan bit pertama adalah kode operasi (opcode) yang

menunjukannya sebagai isntruksi yang memindahkan angka – 8 bit ke register AL.

Delapan bit kedua adalah operand. Instruksi secara keseluruhan memindahkan angka

5 ke dalam register AL.

Register adalah memori kecepatan tinggi yang berada di dalam CPU. Register

diidentifikasikan oleh nama 2 huruf, seperti AH, AL, atau AX.

Kumpulan instruksi (instruction set) CPU adalah sekumpulan instruksi mesin

yang dapat dieksekusi CPU. Untuk keluarga CPU intel, set instruksi adalah down-

ward-compatible, artinya bahwa instruksi yang bekerja pada prosesor level yang

lebih rendah akan bekerja juga pada prosesor yang lebih tinggi. Contoh instruksi

MOV bekerja pada 8088 dan karena itu harus bekerja pula pada 80286. Tetapi

terdapat instruksi yang lebih maju dlam 80286 yang tidak dapat bekerja pada 8088.

Dulu, semua program ditulis dalam bahasa mesin. Hal ini sangat menyulitkan

bagi pemrogram baik dalam membacanya maupun menulisnya. Itulah sebabnya

mengapa dibuat assembler dan kompiler yang akan mengkonversi instruksi yang

mudah dibaca, dibuat dalam editor teks ke dalam bahasa mesin. Contoh instruksi

diatas adalah : MOV AL,5

1.2. Representasi Data

Karena kita akan bersentuhan dengan komputer pada level mesin, kita perlu untuk

memeriksa isi memori dan register. Komputer yang ada saat ini adalah komputer

biner yang sistem bilangannya terdiri angka 1 dan 0 yang kita kenal dengan istilah

logic digital.

Bilangan biner

Komputer menyimpan semua instruksi dan data sebagai rangkaian digit biner,

tanpa perbedaan antara keduanya. Contoh, tiga huruf pertama alfabet akan disimpan

dalam IBM-PC sebagai :

010000010100001000011 = “ABC”

Pada saat yang sama, instruksi untuk menjumlahkan dua buah bilangan akan

disimpan di memori sebagai :

0000010000000101

Bit & Byte. Setiap digit dalam angka biner desebut bit. 8 buah bit desebut byte,

yang merupakan unit terkecil penyimpanan pada komputer saat ini. Setiap lokasi

dalam komputer menyimpan 1 byte, atau 8 bit. Tipe penyimpan yang lebih besar

adalah word yang panjangnya 16 bit (2 byte).

Page 4: Assembly

Created By : IKA PARMA DEWI Page 4

byte byte

1 0 1 1 0 1 0 1 1 0 1 1 0 1 0

word

Setiap sistem penuliasan angka mempunyai basis, yaitu jumlah maksimum nillai

pada suatu digit. Ini disebut radix atau basis.

Sistem Basis / radix Digit yang mungkin

Biner 2 01

Oktal 8 01234567

Desimal 10 0123456789

Heksadesimal 16 0123456789ABCDEF

Dalam sistem bilangan heksadesimal, huruf A sampai F mewakili nilai desimal 10

sampai 15.

Pada saat mengacu pada bilangan biner, oktal atau heksadesimal, sebuah huruf

kecil akan ditambahkan pada akhir setiap bilangan untuk menunjukan basisnya.

Contoh bilangan 45 heksadesimal akan ditulis sebagai 45h, 76 oktal akan ditulis 76o

atau 76q, dan biner 11010011 akan terlihat 11010011b.

Komputer pribadi IBM disebut komputer 16-bit karena instruksinya dapat

mengoperasikan sejumlah 16-bit bilangan. Integer biasanya disimpan dalam memori

sebagai byte, word atau double word. Untuk masing-masingnya mempunyai batasan

bawah dan atasnya, sebagai berikut :

Tipe penyimpan Bit Range (bawah-atas)

Byte 8 0-225

Word 16 0-65,535

Double word 32 0-4,294,967,295

Walaupun masing-masing billangan membutuhkan jumlah bit yang berbeda-beda,

pada kenyataannya semua bilangan disimpan di memori sebagai nilai biner karena

arsitektur komputer adalah biner. Setiap bit memori adalah 1 atau 0, tetapi lokasi

terkecil memori yang diberi alamat adalah byte.

Pengubahan bilangan biner ke desimal

Karena berbagai keperluan mungkin kita perlu mengubah bilangan dari biner ke

desimal. Setiap posisi bit dalam bilangan biner adalah pangkat dari 2, seperti

gambaran berikut :

27

26

25

24

23

22

21

20

Nilai 128 64 32 16 8 4 2 1

Untuk mendapatkan nilai desimal dari sebuah bilangan biner, kita harus

menjumlahkan nilai setiap bit yang bernilai 1 .

Page 5: Assembly

Created By : IKA PARMA DEWI Page 5

0 0 0 0 1 0 0 1 Desimal 8 1 = 9 d

Bilangan heksadesimal

Bilangan biner yang banyak susah untuk dibaca, sehingga bilangan heksadsimal biasanya sering digunakan untuk menggambarkan memori komputer atau instruksi.

Setiap digit bilangan heksadesimal mewakili 4 bit bilangan biner, dan 2 digit

bilangan heksadesimal mewakili satu byte. Pada contoh berikut terlihat bahwa

bilangan biner 000101100000011110010100 digambarkan oleh bilangan

heksadesimal 160794 :

0001 0110 0000 0111 1001 0100

1 6 0 7 9 4

Sebuah digit heksadesimal mungkin mempunyai nilai sampai 15 sehingga untuk

angka 10 – 15 menggunakan huruf A – F. Tabel berikut menunjukan bagaimana

setiap 4 bit biner diterjemahkan ke dalam desimal dan heksadesimal :

Biner Desimal Heksadesimal

0000 0 0

0001 1 1

0010 2 2

0011 3 3

0100 4 4

0101 5 5

0110 6 6

0111 7 7

1000 8 8

1001 9 9

1010 10 A

1011 11 B

1100 12 C

1101 13 D

1110 14 E

1111 15 F

Posisi digit heksadesimal. Setiap posisi digit heksadesimal mewakili bilangan

pangkat dari 16.

163

162

161

160

Nilai 4096 256 16 1

Page 6: Assembly

Created By : IKA PARMA DEWI Page 6

Bilangan dapat dikonversi dari heksadesimal ke desimal dengan mengalikan

masing-masing digit dengan nilai posisinya. Misalnya bilangan 3BA4h, hasilnya

3 B A 4

Nilai posisi 4096 256 16 1

Hasil kali 12,288 2,816 160 4 = 15,268d

Pada saat perkalian huruf B diganti 11 dan A dengan 10.

Bilangan bertanda

Bilangan biner mungkin bertanda atau tidak bertanda.

Byte bertanda menggunakan 8 bit seluruhnya untuk nilai angkanya. Contoh,

11111111 = 255. Karena itu, 255 adalah nilai tertinggi yang dapat disimpan dalam

byte tidak bertanda. Nilai terbesar yang dapat disimpan dalam word tidak bertanda

adalah 65,535.

Byte bertanda hanya menggunakan 7 bit untuk nilai sedangkan bit paling kiri

digunakan sebagai tanda. Bilangan mungkin positif atau negatif, jika tanda sama

dengan 1 maka bilangan negatif sebaliknya jika tanda bernilai 0 maka bilangan

positif :

Bit tanda

10001010 (bilangan negatif)

00001010 (bilangan positif)

Ones complement. Untuk menghitung bilangan ones complement dari suatu

bilangan maka balikan seluruh nilai bitnya. Contoh, ones complement dari

11110000b adalah 00001111b.

Twos complement. Untuk menyimpan nilai negetif maka digunakan bilangan

twos complement. Twos complement diperoleh dengan menambah satu pada

bilangan ones complement.

Contoh twos complement dari +6 (00000110b), balikan nilai bitnya untuk

mendapatkan ones compelent menjadi 11111001b, untuk memperoleh twos

complementnya ditambah satu menjadi : 11111010b (ini nilai twos complement

untuk -6). Untuk mendapatkan kembali nilai +6 sebagai berikut :

1 1 1 1 1 0 1 0 - 6

0 0 0 0 0 1 0 1 ones complement

+ 1 tambah 1

0 0 0 0 0 1 1 0 + 6

Nilai maksimum dan minimum. Karena nilai paling kiri pada bilangan bertanda

digunakan untuk tanda bilangan, maka ukuran bilangan akan berkurang, yang

digunakan hanya 7 bit sehingga nilai paling besar yang bisa dicapai adalah +127.

Page 7: Assembly

Created By : IKA PARMA DEWI Page 7

Tabel berikut menunjukan nilai maksimum dan minimum untuk byte, word dan double word bertanda :

Tipe penyimpan Nilai terendah Nilai tertinggi

Byte -127 +127

Word -32,767 +32,767

Double word -2,147,483,647 +2,147,483,647

Penyimpan karakter

Komputer hanya dapat menyimpan bilangan biner, jadi bagaimana menyimpan

karakter seperti “A” dan “$” ? Telah dibuat suatu sistem menterjemahkan karakter

ke dalam bilangan biner yaitu American Standard Code for Information Interchange

(ASCII). Sistem lainnya, Extended Binary Code for Decimal Interchange (EBCDIC),

digunakan oleh mini dan mainframe komputer IBM.

Berikut ini tabel contoh kode ASCII :

Kode ASCII Ctrl Mnemonic Penjelasan

00 NUL Karakter kosong

01 Ctrl – A SOH Awal header

02 Ctrl – B STX Awal teks

03 Ctrl – C ETX Akhir teks

04 Ctrl – D EOT Akhir transmisi

05 Ctrl – E ENQ Pertanyaan (Enquiry)

06 Ctrl – F ACK Pemberitahuan

07 Ctrl – G BEL Bel

08 Ctrl – H BS Backspace

09 Ctrl – I HT Tab horison

0A Ctrl – J LF Line feed

0B Ctrl – K VT Tab vertikal

0C Ctrl – L FF Form feed

0D Ctrl – M CR Carriage return

0E Ctrl – N SO Shift out

0F Ctrl – O SI Shift in

10 Ctrl – P DLE Data link escape

11 Ctrl – Q DC1 Device control 1

12 Ctrl – R DC2 Device control 2

13 Ctrl – S DC3 Device control 3

14 Ctrl – T DC4 Device control 4

15 Ctrl – U NAK Pemberitahuan negatif

16 Ctrl – V SYN Synchronous idle

17 Ctrl – W ETB Akhir transmisi blok

18 Ctrl – X CAN Batal

19 Ctrl – Y EM Akhir medium

1A Ctrl – Z SUB Pengurangan (substitusi)

Page 8: Assembly

Created By : IKA PARMA DEWI Page 8

1B Ctrl – [ ESC Escape 1C Ctrl – \ FS Pemisah file

1D Ctrl – ] GS Pemisah grup

1E Ctrl – ^ RS Pemisah rekord

1F Ctrl – -| US Pemisah unit

Standar kode ASCII hanya menggunakan 7-bit kode sedangkan nilai selebihnya

yang mungkin 7Fh. 8-bit lainya adalah pilihan, digunakan oleh IBM-PC untuk

memperluas kumpulan karakter. Nilai 80h – FFh menggambarkan simbol grafik dan

karakter Yunani. Nilai 0-1Fh adalah kode kendali untuk printer, komunikasi dan

keluaran layar.

Semua karakter, termasuk bilangan dan huruf, dibuat unik pada kode ASCII.

Contoh, kode untuk karakter string “ABC123” adalah :

Karakter A B C 1 2 3

Kode ASCII 41h 42h 43h 30h 31h 32h

Penyimpanan bilangan. Setiap huruf atau digit memerlukan 1 byte memori.

Namun ketika menyimpan bilangan, kita bisa lebih efisien, contoh, bilangan 123

dapat disimpan dalam memoori sebagai satu byte yaitu 01111011b.

1.3. Bahasa Assembly – Pengenalan

Insturksi bahasa assembly

Meskipun mungkin untuk membuat program bahasa mesin menggunakan angka,

bahasa assembly membuat pekerjaan lebih mudah. Instruksi bahasa assembly adalah

representasi simbolik instruksi mesin tunggal. Dalam bentuknya yang paling

sederhana, terdiri dari satu mnemonic, kode alfabet singkat yang secara harfiah

“membantu memori” dalam mengingat instruksi CPU. Mnemonic mungkin diikuti

oleh operand berikut contohnaya :

clc ; hanya sebuah mnemonic

inc ax ; operand tunggal

mov ax, bx ; dua operand

Setiap instruksi dapat diikuti oleh komentar, yang selalu diawali dengan titik

koma (;). Operand, operand mungkin berupa register, variabel, lokasi memori atau nilai

immediate. Contoh :

10 (nilai immediate)

count (variabel)

AX (register)

[0200] (lokasi memori)

Page 9: Assembly

Created By : IKA PARMA DEWI Page 9

Contoh program Program bahasa assembly dibangun oleh instruksi dan operand. Instruksi

memerintahkan CPU untuk melaksanakan aksi, sedang variabel adalah lokasi

memori dimana data disimpan. Variabel juga disebut operand memori. Operand

langsung adalah konstanta seperti 5 dan 10. Berikut ini contoh program untuk

menjumlahkan 3 bilangan dan menyimpannya dalam variabel yang disebut sum. Sum

diasumsikan dalam heksadesimal.

mov ax, 5 ; memindahkan 5 ke dalam register ax

add ax, 10 ; menambahkan nilai 10h terhadap register ax

add ax, 20 ; menambahkan nilai 20h terhadap register ax

mov sum, ax ; menyimpan ax dalam variabel sum

int 20 ; akhir program

Instruksi MOV memerintahkan CPU untuk memindahkan atau menyalin data,

dari operand sumber ke operand tujuan. Baris 1 memindahkan 5 ke dalam register

AX. Baris 2 memindahkan 10 (hexa) ke dalam AX, membuatnya sama dengan 15.

baris 3 menambahkan 20 ke AX, membuatnya sama dengan 35, dan baris 4 menyalin

AX ke dalam variabel dalam memori yang disebut SUM. Baris terakhir

menghentikan program.

Perintah DEBUG untuk menyusun dan test program adalah sebagai berikut :

Perintah Komentar

A 100 Mov ax, 5

Add ax, 10

Add ax, 20

Mov [0120] , ax

Int 20

R

T

T

T

G

Q

Assembly dimulai pada lokasi 100h Perintah program yang pertama

Hasil jumlah pada lokasi 0120h

Akhir program

(tekan Enter untuk mengakhiri assembly)

Menampilkan register

Trace satu instruksi

Ekseskusi sisa program

Keluar dari Debug kembali ke DOS

Setelah isntruksi yang kedua akan diperoleh tampilan hasil sebagai berikut :

1. mov ax, 5 ax : 05

2. add ax, 10 ax : 10

3. add ax, 20 ax : 35

4. mov sum, ax ax : 35 sum : 35

Page 10: Assembly

Created By : IKA PARMA DEWI Page 10

AX = 0015 BX = 0000 CX = 0000 DX = 0000 SP = FFEE BP = 0000 SI = 0000 DI = 0000 DS = 23AD ES = 23AD

SS = 23AD CS = 23AD IP = 0106 NV UP EI PL NZ NA PO NC

23AD : 0106 052000 ADD AX, 0020

Gambar 1.1. Program contoh

Register AX merupakan hasil penjumlahan 5 dan 10, sehingga AX = 15. Register

IP menyimpan alamat instruksi berikutnya yang akan dieksekusi (0106). Instruksi

berikutnya yang akan di eksekusi adalah ADD AX, 0020

1.3.1. Elemen Dasar Bahasa Assembly

Gambar 1.2. menunjukan kumpulan karakter dasar assembler. Karakter-karakter

tersebut mungkin digunakan unntuk membentuk nomor, nama, perintah dan

parameter.

Konstanta

Konstanta adalah nilai yang diketahui dan dikalkulasikan pada saat penyusunan

program. Konstanta mungkin nomor atau karakter string. Dia tidak dapat diubah

pada saat program dijalankan.

Kumpulan karakter dalam Assembly

Letter : A-Z, a-z

Digit : 0-9

Karakter khusus :

? , (koma)

@ “

_ &

$ %

: !

. „

[] ~

() |

<> /

{} =

+ #

- ^

/ ;

* `

Page 11: Assembly

Created By : IKA PARMA DEWI Page 11

Gambar 1.2. Kumpulan karakter assembly

Variabel, sebaliknya, adalah lokasi memori yang dapat berubah pada saat program

dijalankan. Contoh berikut adalah konstanta :

„ABC‟

2134

5*6

(1+2)/3

Integer. Integer dibangun oleh digit-digit angka tanpa titik desimal, diikuti oleh

karakter radix (d=desimal, h=hexa, q=octal, b=biner). Contoh :

Contoh Radix

11110000b 200

300d

4A6Bh

2047q

2047o

Biner Desimal

Desimal

Heksadesimal

Oktal

Oktal

Bilangan real : angka real mengandung digit, titik desimal tunggal, eksponent (opsional) dan tanda awal (opsional). Sintaknya :

[{+/-}] digit.digit [E{+/-}] digit

Contoh

2.3

+ 200.576 E +05

0.243526E –5

- 6.08 e3

Notasi sintak : dalam contoh sebelumnya dan pada contoh yang akan datang elemen

opsional akan ditutup dengan kurung siku. Tanda kurung besar mengidentifikasikan

pilihan yang diperlukan. Kata kunci yang diperlukan ditulis dalam huruf besar. Kata

huruf kecil miring adalah istilah-istilah yang telah didefinisikan sebelumnya seperti

identifier, operand dan register. Karakter atau konstanta string : karakter ASCII

tunggal atau string karakter yang

ditutup oleh tanda quotasi tunggal („‟) atau ganda (“”), contoh :

“a”

„B‟

“Stack Overflow”

„012#?%&‟

Page 12: Assembly

Created By : IKA PARMA DEWI Page 12

Konsatanta karakter panjangnya 1 byte. Panjang sebuah string ditentukan oleh jumlah karakter yang ada di dalamnya. Konstanta berikut panjangnya 5 byte :

„ABCDE‟

Apostrof („) ditutup diantara dua tanda quotasi (“”), atau tanda quotasi ganda (“”)

ditutup oleh quotasi tunggal („‟). Contoh berikut adalah benar :

“That‟s not all …….”

„The file “First” was not found‟

“The file „First‟ was not found”

Pernyataan

Pernyataan/perintah bahasa assembly terdiri dari nama, mnemonic, oeprand dan

komentar. Pernyataan secara umum dibagi ke dalam dua kelas yaitu instruksi dan

perintah. Instruksi adalah pernyataan yang dapat dieksekusi, dan perintah adalah

pernyataan yang menyediakan informasi untuk membantu assembler dalam

menghasilkan kode yang dapat dieksekusi. Format umum sebuah kalimat.

[name][mnemonic][operand][; coment]

Kalimat harus ditulis pada baris tunggal dan tidak melebihi 128 kolom. Perintah,

atau pseudo op, adalah pernyataan yang berefek pada daftar program atau cara kode

mesin dibuat. Contoh, perintah DB memerintah assembler untuk membuat memori

untuk variabel bernama count dan memberi nilai awal 50.

Count DB 50

Isnturksi dieksekusi oleh mikroprosesor pada saat dijalankan. Instruksi dibagi ke

dalam tipe-tipe-tipe umum : kendali program, transfer data, aritmetik, logic dan I/O.

Instruksi-instruksi selalu diterjemahkan langsung ke dalam kode mesin oleh

assembler. Setiap satu instruksi bahasa assembly diterjemahkan langsung ke dalam

satu instruksi bahasa mesin.

Nama

Nama mengidentifikasikan label, variabel, simbol atau kata kunci. Nama mungkin

mengandung salah satu karakter berikut :

Karakter Penjelasan

A … Z, a … z 0 … 9

?

_

@

Huruf Angka

Tanda tanya

Underscore

Tanda @

Page 13: Assembly

Created By : IKA PARMA DEWI Page 13

$ .

Tanda dollar Titik

Nama mempunyai batasan sebagai berikut : - Hanya 31 karakter pertama yang dikenali

- Tidak ada perbedaan antara huruf besar dan huruf kecil

- Karakter pertama tidak boleh angka

- Jika digunakan, tanda (.) hanya bisa digunakan sebagai karakter pertama

- Tidak boleh memilih nama yang sama dengan kata kunci (perintah/direktif)

Variabel dan konstanta. Nama digunakan sebelum perintah alokasi memori

mengidentifikasikan lokasi dimana data disimpan dalam memori. Atau mungkin juga

digunakan untuk mendefinisikan konstanta, sebagai berikut :

Count1 db 50 ; variabel (alokasi memori)

Count2 equ 100 ; konstanta

Label. Jika nama tampil disamping instruksi program, ini disebut label. Label

berfungsi sebagai penanda kapan saja program mau meloncat atau looping dari satu

lokasi ke lokasi lain. Seperti contoh berikut dimana Label1 dan Label2 adalah label

yang mengidentifikasikan lokasi dalam program :

Label1 : mov ax, 0

mov bx, 0

Label2 :

jmp label1

Kata kunci. Kata kunci atau reserved word selalu mempunyai arti yang sebelumnya

telah didefinisikan. Keyword mungkin instruksi atau direktif. Contohnya : MOV,

PROC, ADD, AX dan END. Kata kunci tidak dapat digunakan keluar dari konteknya

atau sebagai identifier, contoh penggunaan ADD sebagai label adalah tidak benar :

add : mov ax, 10

1.4. Contoh Program Hello

Kita lihat gambar 1.3. yang menampilkan pesan “Hello, world!” pada layar. Baris

1 mengandung perintah title; semua karakter sisanya pada baris 1 dianggap

komentar, sepreti pada baris 3.

Sebelum menyelesaikan lebih lanjut, kita jelaskan dulu segmen, yaitu bagian-

bagian yang membangun program.

Page 14: Assembly

Created By : IKA PARMA DEWI Page 14

Segmen code adalah bagian dimana instruksi program disimpan, segemen data

adalah bagian dimana variabel disimpan. Dan segmen stack dimana stack disimpan.

Stack adalah daftar dalam memori dimana program dijaga dalam variabel sementara,

kembali dari subrutin dan semacamnya.

Direktif dosseg menunjukan segmen standar untuk code, data dan segmen stack.

Perintah model small mengindikasikan bahwa program menggunakan microsoft

assembler memory “small”. Direktif stack menset 100 H (256) byte ruang stack

untuk program.

Title Program Hello world [1]

[2]

; program ini menampilkan pesan “Hello, world” [3]

[4]

dosseg [5]

. model small [6]

. stack 100h [7]

[8]

. data [9]

. hello_message db „Hello, world !‟, 0dh, 0ah, „$‟ [10]

[11]

. code [12]

main proc [13]

mov ax, @data [14]

mov ds, ax [15]

[16]

mov ah, 9 [17]

mov dx, offset hello_message [18]

int 21h [19]

[20]

mov ax, 4000h [21]

int 21h [22]

main endp [23]

endp main [24]

Gambar 1.3. Program Hello.asm

Direktif .code menandai awal segemen kode. Perintah .data menandai awal

segmen data, dimana variabel dideklarasikan.

Baris 9-10 mengandung segmen data, dimana variabel yang diberinama

hello_message dideklarasikan. Huruf DB adalah direktif define byte yang meminta

assembler untuk mengalokasikan serangkaian byte memori untuk data yang

mengikutinya.

Baris 13 menggunakan perintah proc untuk mendeklarasikan prosedur main

(mungkin juga menggunakan nama lain). Baris 14-15 menyalin alamat segmen data ke

dalam reg DS. Instruksi MOV selalu mempunyai 2 operand. Tujuan dan sumber.

Page 15: Assembly

Created By : IKA PARMA DEWI Page 15

Baris 17-19 menyebabkan string karakter dituliskan ke konsole. Mereka

melakukannya dengan memanggil fungsi DOS yang menampilkan string yang

alamatnya dalam register DX. Nomor fungsi diletakan dalam register AH.

Baris 21-22 adalah perintah untuk berhenti dan kembali ke DOS. Baris 23 adalah

akhir dari prosedur main dan baris 24 baris terakhir yang diassembly.