Dasar Program Assembly
Bahasa
Assembly adalah bahasa komputer yang kedudukannya di antara bahasa
mesin dan bahasa level tinggi misalnya bahasa C atau Pascal. Bahasa C
atau Pascal dikatakan sebagai bahasa level tinggi karena memakai
kata-kata dan pernyataan yang mudah dimengerti manusia, meskipun masih
jauh berbeda dengan bahasa manusia sesungguhnya. Bahasa mesin adalah
kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh
komputer. Sedangkan bahasa Assembly memakai kode Mnemonic untuk
menggantikan kode biner, agar lebih mudah diingat sehingga lebih
memudahkan penulisan program.
Program
yang ditulis dengan bahasa Assembly terdiri dari label; kode mnemonic
dan lain sebagainya, pada umumnya dinamakan sebagai program sumber
(Source Code) yang belum bisa diterima oleh prosesor untuk dijalankan
sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin
dalam bentuk kode biner.
Program sumber dibuat dengan program editor biasa, misalnya Notepad pada Windows atau SideKick pada DOS, selanjutnya
program sumber diterjemahkan ke bahasa mesin dengan menggunakan program
Assembler. Hasil kerja program Assembler adalah “program objek” dan
juga “assembly listing”.
Program
Objek berisikan kode kode bahasa mesin, kode-kode bahasa mesin inilah
yang diumpankan ke memori-program prosesor. Dalam dunia mikrokontroler
biasanya program objek ini diisikan ke UV EPROM, dan khusus untuk
mikrokontroler buatan Atmel, program ini diisikan ke dalam Flash PEROM
yang ada di dalam chip AT89C51 atau AT89C2051.
Assembly
Listing merupakan naskah yang berasal dari program sumber, dalam naskah
tersebut pada bagian sebelah setiap baris dari program sumber diberi
tambahan hasil terjemahan program Assembler. Tambahan tersebut berupa
nomor memori-program berikut dengan kode yang akan diisikan pada
memori-program bersangkutan. Naskah ini sangat berguna untuk dokumentasi
dan sarana untuk menelusuri program yang ditulis.
Yang
perlu diperhatikan adalah setiap prosesor mempunyai konstruksi yang
berlainan, instruksi untuk mengendalikan masing-masing prosesor juga
berlainan, dengan demikian bahasa Assembly untuk masing-masing prosesor
juga berlainan, yang sama hanyalah pola dasar cara penulisan program
Assembly saja.
Gambar 7
Proses Assembly
Proses Assembly
Konstruksi Program Assembly
Program
sumber dalam bahasa Assembly menganut prinsip 1 baris untuk satu
perintah, setiap baris perintah tersebut bisa terdiri atas beberapa
bagian (field), yakni bagian Label, bagian mnemonic, bagian operand yang
bisa lebih dari satu dan terakhir bagian komentar. Untuk membedakan
masing-masing bagian tersebut dibuat ketentuan sebagian berikut:
o Masing-masing
bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang
lebih dari satu masing-masing operand dipisahkan dengan koma.
o Bagian-bagian
tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu
bagian yang tidak ada maka spasi atau TAB sebagai pemisah bagian tetap
harus ditulis.
· Bagian
Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan
tidak mengandung Label maka label tersebut digantikan dengan spasi atau
TAB, yakni sebagai tanda pemisah antara bagian Label dan bagian
mnemonic.
Label
mewakili nomor memori-program dari instruksi pada baris bersangkutan,
pada saat menulis instruksi JUMP, Label ini ditulis dalam bagian operand
untuk menyatakan nomor memori-program yang dituju. Dengan demikian
Label selalu mewakili nomor memori-program dan harus ditulis dibagian
awal baris instruksi.
Disamping Label dikenal pula Symbol,
yakni satu nama untuk mewakili satu nilai tertentu dan nilai yang
diwakili bisa apa saja tidak harus nomor memori-program. Cara penulisan
Symbol sama dengan cara penulisan Label, harus dimulai di huruf pertama
dari baris instruksi.
Mnemonic (arttinya
sesuatu yang memudahkan diingat) merupakan singkatan perintah, dikenal
dua macam mnemonic, yakni manemonic yang dipakai sebagai instruksi
mengendalikan prosesor, misalnya ADD, MOV, DJNZ dan lain sebagainya. Ada pula mnemonic yang dipakai untuk mengatur kerja dari program Assembler misalnya ORG, EQU atau DB, mnemonis untuk mengatur kerja dari program Assembler ini dinamakan sebagai ‘Assembler Directive’.
Operand
adalah bagian yang letaknya di belakang bagian mnemonic, merupakan
pelangkap bagi mnemonic. Kalau sebuah instrksi di-ibaratkan sebagai
kalimat perintah, maka mnemonic merupakan subjek (kata kerja) dan
operand merupakan objek (kata benda) dari kalimat perintah tersebut.
Tergantung pada jenis instruksinya, operand bisa berupa berbagai macam hal. Pada instruksi JUMP operand berupa Label yang mewakili nomor memori-program yang dituju misalnya LJMP Start, pada instruksi untuk pemindahan/pengolahan data, operand bisa berupa Symbol yang mewakili data tersebut, misalnya ADD A,#Offset. Banyak instruksi yang operandnya adalah register dari prosesor, misalnya MOV A,R1. Bahkan ada pula instruksi yang tidak mempunyai operand, misalnya RET.
Komentar
merupakan bagian yang sekedar sebagai catatan, tidak berpengaruh pada
prosesor juga tidak berpengaruh pada kerja program Assembler, tapi
bagian ini sangat penting untuk keperluan dokumentasi.
Assembler Directive
Seperti
sudah dibahas di atas, bagian Mnemonic dari sebuah baris perintah bisa
merupakan instruksi untuk prosesor, maupun berupa Assembler Directive
untuk mengatur kerja dari program Assembler. Mnemonic untuk instruksi
prosesor, sangat tergantung pada prosesor yang dipakai, sedangkan
mnemonic untuk Assembler Directive tergantung pada program Assembler
yang dipakai. Meskipun demikian, terdapat beberapa Assembler Directive
yang umum, yang sama untuk banyak macam program Assembler.
Assembler Directive yang bersifat umum tersebut, antara lain adalah
o ORG – singkatan dari ORIGIN, untuk menyatakan nomor memori yang dipakai setelah perintah itu, misalnya ORG $1000 maka memori berikutnya yang dipakai Assembler adalah $1000. ORG berlaku untuk memori program maupun memori-data. Dalam hal penomoran memori, dikenal tanda $ sebagai awalan untuk menyatakan nomor memori dari baris bersangkutan. Misalnya :
ORG 1000
LJMP $+1000
Operand $+$500 mempunyai arti nomor memori-program bersangkutan ditambah dengan $500, karena instruksi LJMP ini terletak persis di bawah ORG $1000 maka nomor memori-program baris ini adalah $1000, sehingga operand $+$500 bernilai $1500 dan instruksi ini indentik dengan LJMP $1500
o EQU – singkatan dari EQUATE, dipakai untuk menentukan nilai sebuah Symbol.
Misalnya Angka88 EQU 88 memberi nilai 88 pada Symbol Angka88, atau CR EQU $0D mempunyai makna kode ASCII dari CR (Caarriage Return) adalah $08.
o DB – singkatan dari DEFINE BYTE,
dipakai untuk memberi nilai tertentu pada memori-program. Nilai
tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII. DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel.
ORG $0200
STRING DB ‘Atmel AT89C2051’
PANJANG EQU $-STRING
o ORG $0200 memerintahkan program Assembler agar bekerja mulai dari memori-program nomor $0200, instruksi selanjutnya memerintahkan program Assembler agar mengisi memori-program nomor $0200 dan berikutnya dengan tulisan ‘Atmel AT89C2051’’ (yang diisikan adalah kode ASCII dari ‘A’, ‘t’ dan seterusnya), PANJANG dari STRING bisa dihitung dengan cara PANJANG EQU $-STRING, yakni selisih dari nomor memori-program baris bersangkutan dikurangi dengan nomor awal memori-program yang diisi STRING.
o DW – singkatan dari DEFINE WORD, dipakai untuk memberi nilai 2 byte ke memori-program pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk membentuk suatu tabel yang isinya adalah nomor-nomor memori-program.
o DS – singkatan dari Define Storage, Assembler Directive ini dipakai untuk membentuk variable. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM) bukan memori-program (ROM). Hal ini harus benar-benar dibedakan dengan Assembler Directive DB dan DW yang membentuk kode di memori-program. Dan karena DS bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak mengisi nilai pada memori bersangkutan.
Tidak ada komentar:
Posting Komentar