Nama : Paulina Sose Mau
NIM : 13110241
Tugas : Bahasa Rakitan I
Hari/Tanggal : Senin, 23/09/2013
Posted by Full Tutorial For You My
Friends on Tuesday, April 7, 2009
Program
sumber assembly
Program-sumber assembly (assembly source program) merupakan kumpulan dari
baris-baris perintah yang ditulis dengan program penyunting-teks (text editor)
sederhana, misalnya program EDIT.COM dalam DOS, atau program NOTEPAD
dalam Windows. Kumpulan baris-printah tersebut biasanya disimpan ke dalam file
dengan nama ekstensi *.ASM atau nama lain misalnya *.A51 dan lain
sebagainya, tergantung pada program Assembler yang akan dipakai untuk mengolah program-sumber
assembly tersebut.
Setiap
baris-perintah merupakan sebuah perintah yang utuh, artinya sebuah perintah
tidak mungkin dipecah menjadi lebih dari satu baris. Satu baris perintah bisa
terdiri atas 4 bagian, bagian pertama dikenali sebagai label atau sering
juga disebut sebagai symbol, bagian kedua dikenali sebagai kode operasi,
bagian ketiga adalah operand dan bagian terakhir adalah komentar.
Antara
bagian-bagian tersebut dipisahkan dengan sebuah spasi atau tabulator.
Bagian label
Label
dipakai untuk memberi nama pada sebuah baris-perintah, agar bisa mudah
menyebitnya dalam penulisan program. Label bisa ditulis apa saja asalkan
diawali dengan huruf, biasa panjangnya tidak lebih dari 16 huruf. Huruf-huruf
berikutnya boleh merupakan angka atau tanda titik dan tanda garis bawah. Kalau
sebuah baris-perintah tidak memiliki bagian label, maka bagian ini boleh
tidak ditulis namun spasi atau tabulator sebagai pemisah antara label
dan bagian berikutnya mutlak tetap harus ditulis.
Dalam
sebuah program sumber bisa terdapat banyak sekali label, tapi tidak
boleh ada label yang kembar.
Sering
sebuah baris-perintah hanya terdiri dari bagian label saja, baris
demikian itu memang tidak bisa dikatakan sebagai baris-perintah yang sesungguhnya,
tapi hanya sekedar memberi nama pada baris bersangkutan.
Bagian
label sering disebut juga sebagai bagian symbol, hal ini terjadi
kalau label tersebut tidak dipakai untuk menandai bagian program,
melainkan dipakai untuk menandai bagian data.
Bagian kode
operasi
Kode operasi (operation code atau sering disingkat sebagai OpCode)
merupakan bagian perintah yang harus dikerjakan. Dalam hal ini dikenal dua
macam kode operasi, yang pertama adalah kode-operasi untuk
mengatur kerja mikroprosesor / mikrokontroler. Jenis kedua dipakai untuk
mengatur kerja program assembler, sering dinamakan sebagai assembler
directive.
Kode-operasi ditulis dalam bentuk mnemonic, yakni bentuk
singkatan-singkatan yang relatip mudah diingat, misalnya adalah MOV, ACALL,
RET dan lain sebagainya. Kode-operasi ini ditentukan oleh pabrik
pembuat mikroprosesor/mikrokontroler, dengan demikian setiap prosesor mempunyai
kode-operasi yang berlainan.
Kode-operasi berbentuk mnemonic tidak dikenal
mikroprosesor/mikrokontroler, agar program yang ditulis dengan kode mnemonic
bisa dipakai untuk mengendalikan prosesor, program semacam itu diterjemahkan
menjadi program yang dibentuk dari kode-operasi kode-biner, yang
dikenali oleh mikroprosesor/mikrokontroler.
Tugas
penerjemahan tersebut dilakukan oleh program yang dinamakan sebagai Program
Assembler.
Di
luar kode-operasi yang ditentukan pabrik pembuat mikroprosesor/mikrokontroler,
ada pula kode-operasi untuk mengatur kerja dari program assembler,
misalnya dipakai untuk menentukan letak program dalam memori (ORG),
dipakai untuk membentuk variabel (DS), membentuk tabel dan data konstan
(DB, DW) dan lain sebagainya.
Bagian operand
Operand
merupakan pelengkap bagian kode operasi, namun tidak semua kode
operasi memerlukan operand, dengan demikian bisa terjadi sebuah
baris perintah hanya terdiri dari kode operasi tanpa operand.
Sebaliknya ada pula kode operasi yang perlu lebih dari satu operand,
dalam hal ini antara operand satu dengan yang lain dipisahkan dengan
tanda koma.
Bentuk
operand sangat bervariasi, bisa berupa kode-kode yang dipakai untuk menyatakan Register
dalam prosesor, bisa berupa nomor-memori (alamat memori) yang
dinyatakan dengan bilangan atau pun nama label, bisa berupa data yang
siap di-operasi-kan. Semuanya disesuaikan dengan keperluan dari kode-operasi.
Untuk
membedakan operand yang berupa nomor-memori atau operand
yang berupa data yang siap di-operasi-kan, dipakai tanda-tanda khusus
atau cara penulisan yang berlainan.
Di
samping itu operand bisa berupa persamaan matematis sederhana atau
persamaan Boolean, dalam hal semacam ini program Assembler akan menghitung
nilai dari persamaan-persamaan dalam operand, selanjutnya merubah hasil
perhitungan tersebut ke kode biner yang dimengerti oleh prosesor. Jadi perhitungan
di dalam operand dilakukan oleh program assembler bukan oleh prosesor!
Bagian komentar
Bagian
komentar merupakan catatan-catatan penulis program, bagian ini meskipun
tidak mutlak diperlukan tapi sangat membantu masalah dokumentasi. Membaca
komentar-komentar pada setiap baris-perintah, dengan mudah bisa dimengerti
maksud tujuan baris bersangkutan, hal ini sangat membantu orang lain yang
membaca program.
Pemisah
bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator,
meskipun demikian huruf pertama dari komentar sering-sering berupa tanda titik-koma,
merupakan tanda pemisah khusus untuk komentar.
Untuk
keperluan dokumentasi yang intensip, sering-sering sebuah baris yang merupakan
komentar saja, dalam hal ini huruf pertama dari baris bersangkutan adalah tanda
titik-koma.
Pembahasan
di atas diringkas dalam Gambar 1.
Gambar 1
Program-sumber assembly
Program-sumber assembly
Assembly
Listing
Program-sumber
assembly di atas, setelah selesai ditulis diserahkan ke program Assembler untuk
diterjemahkan. Setiap prosesor mempunyai program assembler tersendiri, bahkan
satu macam prosesor bisa memiliki beberapa macam program Assembler buatan
pabrik perangkat lunak yang berlainan.
Hasil
utama pengolahan program Assembler adalah program-obyek. Program-obyek
ini bisa berupa sebuah file tersendiri, berisikan kode-kode yang siap
dikirimkan ke memori-program mikroprosesor/mikrokontroler, tapi ada juga program-obyek
yang disisipkan pada program-sumber assembly seperti terlihat dalam
Assembly Listing di Gambar 2.
Bagian
kanan Gambar 2 merupakan program-sumber Assembly karya asli penulis
program, setelah diterjemahkan oleh program Assembler kode-kode yang dihasilkan
berikut dengan nomor-nomor memori tempat penyimpanan kode-kode tadi, disisipkan
pada bagian kiri setiap baris perintah, sehingga bentuk program ini tidak lagi
dikatakan sebagai program-sumber assembly tapi dikatakan sebagai Assembly
Listing.
Membaca
Assembly Listing bisa memberikan gambaran yang lebih jelas bagi program yang
ditulis, bagi pemula Assembly Listing memberi pengertian yang lebih mendalam
tentang isi memori-program, sehingga bisa lebih dibayangkan bagaimana kerja
dari sebuah program.
Gambar 2
Assembly Listing
Assembly Listing
Program
Obyek format HEX
Selain
Assembly Listing, hasil kerja program Asembler lainnya adalah program
obyek yang dipakai untuk mengendalikan sebuah mikroprosesor/mikrokontroler,
program obyek disimpan dalam file. Terdapat dua macam bentuk file
penyimpan program obyek, yang pertama adalah file yang berisikan kode
biner murni, dan yang satu lagi adalah file biner yang sudah diolah menjadi
file teks.
File
jenis pertama biasanya dinamakan sebagai binary object file, biasanya
memakai ekstensi *.BIN. File semacam ini hanya berisikan angka-angka biner yang
akan diisikan ke dalam memori tanpa informasi lain, sehingga selalu dianggap
bahwa bahwa file tersebut berisikan kode-kode biner yang nantinya ditempatkan
mulai dari memori nomor 0. Kalau ternyata kode-kode biner diisikan mulai dari
memori nomor 8000h, maka mulai posisi 0 sampai 7FFFh akan
diisi dengan bilangan biner 00h, baru setelah itu menyusul kode biner
yang sesungguhnya. File semacam ini banyak dipakai untuk EPROM Programmer model
lama.
File
jenis kedua dinamakan Hexadecimal format object file, biasanya memakai
ekstensi *.BIN . Data biner dirubah ke dalam bentuk heksadesimal dan yang
disimpan ke dalam file adalah kode ASCII dari bilangan heksadesimal tersebut.
Misalnya data biner 00111010, atau heksadesimal 3Ah, dituliskan
ke dalam file menjai 33h (kode ASCIInya angka 3) dan 41h (kode
ASCIInya huruf A). Dengan cara ini isi dari file tersebut bisa dengan mudah
dibaca dengan program penyunting teks (text editor) biasa, bahkan bisa di-cetak
di atas kertas seperti terlihat dalam Gambar 3, file semacam itu bisa dibaca
dengan text editor biasa, misalnya EDIT.COM dalam DOS, atau NOTEPAD
dalam Windows.
Dalam
file format HEX semacam ini, selain disimpan data biner yang akan diisikan ke
ROM, berisikan pula nomor-nomor memori tempat penyimpanan data biner tersebut.
EPROM programer baru umumnya memakai format file obyek semacam ini.
Gambar 3
Program obyek format HEX
Program obyek format HEX
Format
HEX dari Intel
Ada beberapa macam format untuk
membentuk file program obyek dengan format HEX (Hexadecimal format
object file), meskipun demikian hanya 2 yang banyak dipakai, yakni format
buatan Motorola yang dinamakan sebagai format S19 dan format buatan
Intel yang biasa disebut sebagai format HEX dari Intel.
Berikut ini adalah pembahasan file
program obyek dengan format HEX dari Intel yang dipakai MCS51, format
ini didefinisikan dalam artikel dari Intel dengan judul Hexadecimal Object
File Format Specification (http://alds.stts.edu/appnote/#MCS51).
Gambar 4
Anatomi baris-baris dalam file format HEX
Anatomi baris-baris dalam file format HEX
File program obyek dengan format
HEX dari Intel berisikan baris-baris tulisan seperti terlihat dalam Gambar
4.
Setiap baris mengandung informasi
tentang berapa banyak data dalam baris tersebut, alamat awal tempat penyimpanan
data dalam baris tersebut, jenis baris dan sarana untuk memastikan kebenaran
data yang dinamakan sebagai check sum. Dalam baris tersebut, setiap
huruf (kecuali huruf pertama) mewakili satu bilangan heksa-desimal, dengan
demikian setiap 2 huruf membentuk data satu byte yang terdiri dari 2 bilangan
heksadesimal.
Rincian dari format tersebut sebagai
berikut :
<!--[if !supportLists]-->1.
<!--[endif]-->Huruf pertama dalam baris, selalu berisi tanda ":",
merupakan kode identitas yang menyatakan baris tersebut berisikan kode-kode
biner yang disimpan dalam format HEX dari Intel.
<!--[if !supportLists]-->2.
<!--[endif]-->Huruf ke-2 dan ke-3 dipakai untuk menyatakan banyaknya data
dalam baris yang dinyatakan dengan 2 angka heksa-desimal, sehingga banyaknya
data dalam 1 baris maksimal adalah 255 (atau heksa-demimal FF).
<!--[if !supportLists]-->3.
<!--[endif]-->Huruf ke 4 sampai 7, merupakan 4 angka heksa-desimal yang
dipakai untuk menyatakan alamat awal tempat penyimpanan kode-kode dalam baris
teks bersangkutan.
<!--[if !supportLists]-->4.
<!--[endif]-->Huruf 8 dan 9 dipakai untuk menyatakan jenis teks data.
Nilai 00 dipakai untuk menyatakan baris tersebut berisikan data biasa, 01
menyatakan baris tersebut merupakan baris terakhir.
<!--[if !supportLists]-->5.
<!--[endif]-->Huruf ke 10 dan seterusnya adalah data. Setiap 2 huruf
mewakili data 1 byte, sehingga jumlah huruf pada bagian ini adalah dua kali
banyaknya data yang disebut pada butir 2 di atas.
<!--[if !supportLists]-->6.
<!--[endif]-->2 huruf terakhir dalam baris merupakan check sum.
Byte-byte yang disebut dalam butir 2 sampai 5 di atas dijumlahkan, hasil
penjumlahan di-balik (inverted) sebagai bilangan check sum. (Hasil
penjumlahan bisa menghasilkan nilai yang lebih besar dari 2 bilangan
heksadesimal, namun hanya 2 bilangan heksa-desimal yang bobotnya terkecil yang
dipakai).
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.
<!--[if !supportLists]-->·
<!--[endif]-->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.
DisampingLabel 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
<!--[if !supportLists]-->o <!--[endif]-->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.
<!--[if !supportLists]-->o
<!--[endif]-->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.
<!--[if !supportLists]-->o
<!--[endif]-->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