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. Created By : IKA PARMA DEWI
Page 1
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. Created By : IKA PARMA DEWI
Page 2
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 downward-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). Created By : IKA PARMA DEWI
Page 3
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 Oktal Desimal Heksadesimal
2 8 10 16
01 01234567 0123456789 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 Byte Word Double word
Bit
Range (bawah-atas) 0-225 0-65,535 0-4,294,967,295
8 16 32
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 Nilai 128
26 64
25 32
24 16
23 8
22 4
21 2
20 1
Untuk mendapatkan nilai desimal dari sebuah bilangan biner, kita harus menjumlahkan nilai setiap bit yang bernilai 1 . Created By : IKA PARMA DEWI
Page 4
0
0
0
0
Desimal
1 8
0
0
1 1 = 9d
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 1
0110 6
0000 0
0111 7
1001 9
0100 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 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Desimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Heksadesimal 0 1 2 3 4 5 6 7 8 9 A B C D E F
Posisi digit heksadesimal. Setiap posisi digit heksadesimal mewakili bilangan pangkat dari 16. 163 Nilai 4096 Created By : IKA PARMA DEWI
162
161
160
256
16
1 Page 5
Bilangan dapat dikonversi dari heksadesimal ke desimal dengan mengalikan masing-masing digit dengan nilai posisinya. Misalnya bilangan 3BA4h, hasilnya
Nilai posisi Hasil kali
3 4096 12,288
B 256 2,816
A 16 160
4 1 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 : 11111010 00000101 + 1 00000110
-6 ones complement tambah 1 +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. Created By : IKA PARMA DEWI
Page 6
Tabel berikut menunjukan nilai maksimum dan minimum untuk byte, word dan double word bertanda : Tipe penyimpan Byte Word Double word
Nilai terendah
Nilai tertinggi
-127 -32,767 -2,147,483,647
+127 +32,767 +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 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A
Ctrl Ctrl – A Ctrl – B Ctrl – C Ctrl – D Ctrl – E Ctrl – F Ctrl – G Ctrl – H Ctrl – I Ctrl – J Ctrl – K Ctrl – L Ctrl – M Ctrl – N Ctrl – O Ctrl – P Ctrl – Q Ctrl – R Ctrl – S Ctrl – T Ctrl – U Ctrl – V Ctrl – W Ctrl – X Ctrl – Y Ctrl – Z
Created By : IKA PARMA DEWI
Mnemonic NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB
Penjelasan Karakter kosong Awal header Awal teks Akhir teks Akhir transmisi Pertanyaan (Enquiry) Pemberitahuan Bel Backspace Tab horison Line feed Tab vertikal Form feed Carriage return Shift out Shift in Data link escape Device control 1 Device control 2 Device control 3 Device control 4 Pemberitahuan negatif Synchronous idle Akhir transmisi blok Batal Akhir medium Pengurangan (substitusi) Page 7
Ctrl – [ Ctrl – \ Ctrl – ] Ctrl – ^ Ctrl – -|
1B 1C 1D 1E 1F
ESC FS GS RS US
Escape Pemisah file Pemisah grup Pemisah rekord 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 Kode ASCII 41h
B 42h
C 43h
1 30h
2 31h
3 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 inc ax mov ax, bx
; hanya sebuah mnemonic ; operand tunggal ; 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 count AX [0200] Created By : IKA PARMA DEWI
(nilai immediate) (variabel) (register) (lokasi memori) Page 8
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 add ax, 10 add ax, 20 mov sum, ax int 20
; memindahkan 5 ke dalam register ax ; menambahkan nilai 10h terhadap register ax ; menambahkan nilai 20h terhadap register ax ; menyimpan ax dalam variabel sum ; 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 Assembly dimulai pada lokasi 100h Perintah program yang pertama
A 100 Mov ax, 5 Add ax, 10 Add ax, 20 Mov [0120] , ax Int 20
Hasil jumlah pada lokasi 0120h Akhir program (tekan Enter untuk mengakhiri assembly) Menampilkan register Trace satu instruksi
R T T T G Q
Ekseskusi sisa program Keluar dari Debug kembali ke DOS Setelah isntruksi yang kedua akan diperoleh tampilan hasil sebagai berikut : 1. 2. 3. 4.
mov ax, 5 add ax, 10 add ax, 20 mov sum, ax
Created By : IKA PARMA DEWI
ax : 05 ax : 10 ax : 35 ax : 35
sum : 35 Page 9
AX = 0015 BP = 0000 SS = 23AD 23AD : 0106
BX = 0000 SI = 0000 CS = 23AD 052000
CX = 0000 DX = 0000 SP = FFEE DI = 0000 DS = 23AD ES = 23AD IP = 0106 NV UP EI PL NZ NA PO NC 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 : ? @ _ $ : . [] () <> {} + / * Created By : IKA PARMA DEWI
, (koma) “ & % ! „ ~ | / = # ^ ; ` Page 10
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 11110000b 200 300d 4A6Bh 2047q 2047o
Radix 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#?%&‟ Created By : IKA PARMA DEWI
Page 11
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 A … Z, a … z 0…9 ? _ @ Created By : IKA PARMA DEWI
Penjelasan Huruf Angka Tanda tanya Underscore Tanda @ Page 12
$ .
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 Count2 equ 100
; variabel (alokasi memori) ; 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 bagianbagian yang membangun program. Created By : IKA PARMA DEWI
Page 13
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 ; program ini menampilkan pesan “Hello, world” dosseg . model small . stack 100h . data . hello_message db „Hello, world !‟, 0dh, 0ah, „$‟ . code main proc mov ax, @data mov ds, ax mov ah, 9 mov dx, offset hello_message int 21h mov ax, 4000h int 21h main endp endp main
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [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. Created By : IKA PARMA DEWI
Page 14
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.
Created By : IKA PARMA DEWI
Page 15