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
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 :
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).