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 assemblytersebut.
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 sebagaisymbol, 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 atautabulator sebagai
pemisah antara label dan bagian berikutnya mutlak tetap harus
ditulis.
Dalam sebuah program sumber bisa terdapat banyak sekali label,
tapi tidak boleh adalabel 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 labeltersebut 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 sebagaiProgram 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 operasimemerlukan 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 operanddilakukan 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 atautabulator, meskipun
demikian huruf pertama dari komentar sering-sering berupa tandatitik-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 obyekyang 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 nomor8000h, 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 biner00111010, 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.
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 S19dan format buatan Intel yang biasa
disebut sebagai format HEX dari I.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 :
1. 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.
2. 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).
3. Huruf
ke 4 sampai 7, merupakan 4 angka heksa-desimal yang dipakai untuk menyatakan
alamat awal tempat penyimpanan kode-kode dalam baris teks bersangkutan.
4. 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.
5. 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.
6. 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).