assembly
DESCRIPTION
belajarTRANSCRIPT
![Page 1: Assembly](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/1.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/2.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/3.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/4.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/5.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/6.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/7.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/8.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/9.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/10.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/11.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/12.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/13.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/14.jpg)
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](https://reader035.vdokumen.com/reader035/viewer/2022062407/55cf9934550346d0339c2d00/html5/thumbnails/15.jpg)
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.