Untuk menuliskan source file untuk program assembly bisa anda gunakan
|
berbagai editor, misalkan SideKick, WordStar dan Word Perfect. Source file
|
yang diketikkan harus berupa file ASCII, file ini bisa anda hasilkan melalui
|
WordStar dengan file 'NON DOCUMEN', atau dengan SideKick.
|
Untuk meyakinkan bahwa source file yang anda buat adalah file ASCII,
|
bisa anda coba ketikkan perintah Type pada A>. Bila file yang terlihat dengan
|
perintah type sama persis dengan yang anda ketikkan pada editor, tanpa
|
tambahan karakter-karakter yang acak, maka file tersebut adalah file ASCII.
|
Source file untuk assembly harus berektensi .ASM.
|
Source file ASCII yang telah anda ketikkan perlu dicompile kebentuk file
|
object dengan extensi .OBJ, dari file object inilah nantinya dapat dijadikan
|
kebentuk file .EXE atau .COM.
|
Untuk mengcompile source file, misalnya file COBA.ASM menjadi file
|
object dengan extensi .OBJ bisa anda gunakan file TASM.EXE dengan mengetikkan:
|
Turbo Assembler Version 2.0 Copyright (c) 1988,
|
1990 Borland International
|
Assembling file: coba.ASM
|
Volume in drive C is S’to
|
COBA OBJ 128 08-12-94 10:42p
|
COBA ASM 128 08-12-94 10:41p
|
File object yang telah terbentuk dengan TASM, belum dapat dieksekusi
|
secara langsung. Untuk membuat file object ke bentuk file yang dapat
|
dieksekusi(ektensi .COM atau .EXE) bisa anda gunakan file TLINK.EXE.
|
Bila source program yang anda buat dalam bentuk EXE maka untuk membentuk
|
file dengan ektensi EXE bisa anda ketikkan :
|
Turbo Link Version 3.0 Copyright (c) 1987,
|
1990 Borland International
|
Bila source program yang dibuat adalah file COM, maka bisa anda
|
Turbo Link Version 3.0 Copyright (c) 1987,
|
1990 Borland International
|
5.4. PERBEDAAN PROGRAM COM DAN EXE
|
Program dengan ektensi COM dan EXE mempunya berbagai perbedaan yang
|
- Lebih pendek dari file EXE
|
- Lebih cepat dibanding file EXE
|
- Hanya dapat menggunakan 1 segmen
|
- Ukuran file maksimum 64 KB (ukuran satu
|
- sulit untuk mengakses data atau procedure
|
yang terletak pada segment yang lain.
|
- 100h byte pertama merupakan PSP(Program
|
Segment Prefix) dari program tersebut.
|
- Bisa dibuat dengan DEBUG
|
- Lebih panjang dari file COM
|
- Lebih lambat dibanding file COM
|
- Bisa menggunakan lebih dari 1 segmen
|
- Ukuran file tak terbatas sesuai dengan
|
- mudah mengakses data atau procedure pada
|
- Tidak bisa dibuat dengan DEBUG
|
Assembler mengizinkan penggunaan beberapa bentuk angka , yaitu :
|
Untuk menuliskan angka dalam bentuk desimal, bisa digunakan tanda 'D'
|
pada akhir angka tersebut atau bisa juga tidak diberi tanda sama sekali,
|
Untuk menuliskan angka dalam bentuk biner(0..1), harus ditambahkan tanda
|
'B' pada akhir angka tersebut, contoh : 01100111
|
Untuk menuliskan angka dalam bentuk hexadesimal(0..9,A..F), harus
|
ditambahkan tanda 'H' pada akhir angka tersebut. Perlu diperhatikan bahwa bila
|
angka pertama dari hexa berupa karakter(A..F) maka angka nol harus ditambahkan
|
didepannya. Bila hal ini tidak dilakukan, assembler akan menganggapnya sebagai
|
suatu label, bukannya sebagai nilai hexa. Contoh penulisan yang benar:
|
Penulisan karakter atau string diapit oleh tanda petik dua (
|
Label bisa anda definisikan dengan ketentuan akhir dari nama label
|
tersebut harus berupa tanda titik dua (
|
). Pemberian nama label bisa
|
- Huruf : A..Z (Huruf besar dan kecil tidak dibedakan)
|
- Karakter khusus : @ . _ $
|
Nama pada label tidak boleh terdapat spasi dan didahului oleh angka,
|
Contoh dari penulisan label yang benar:
|
terpanjang yang dapat dikenali oleh assembler adalah 31 karakter.
|
Untuk memberikan komentar pada source file digunakan tanda '
|
yang dtuliskan dibelakang tanda '
|
' akan dianggap sebagai komentar, Contoh :
|
; berikan nilai 7 pada BX
|
Perintah MOV digunakan untuk mengcopy nilai atau angka menuju suatu
|
register,variabel atau memory. Adapun syntax untuk perintah MOV ini adalah :
|
MOV AL,9 ; masukkan nilai 9 pada AL.
|
MOV AH,AL ; nilai AL=9 dan AH=9
|
MOV AX,9 ; AX=AH+AL hingga AH=0 dan AL:=9
|
), kita memberikan nilai 9 pada register AL.
|
Kemudian pada baris kedua(
|
) kita mengcopykan nilai register AL untuk
|
AH. Jadi setelah operasi ini register AL akan tetap bernilai 9, dan register
|
AH akan sama nilainya dengan AL atau 9. Pada baris ketiga(
|
memberikan register AX nilai 9. Karena AX terdiri atas AH dan AL, maka
|
register AH akan bernilai 0, sedangkan AL akan bernilai 9.
|
Perintah MOV akan mengcopykan nilai pada sumber untuk dimasukan ke
|
Tujuan, nilai sumber tidaklah berubah. Inilah sebabnya MOV(E) akan kita
|
terjemahkan disini dengan mengcopy, dan bukannya memindahkan.
|
Didalam pemrograman assambler, kita akan banyak sekali menggunakan
|
interupsi untuk membantu kita dalam mengerjakan suatu pekerjaan. Untuk
|
menghasilkan suatu interupsi digunakan perintah INT dengan syntax:
|
Dengan NoInt adalah nomor interupsi yang ingin dihasilkan. Sebagai
|
contohnya bila kita ingin menghasilkan interupsi 21h, bisa dituliskan dengan:
|
, maka interupsi 21h akan segera terjadi.
|
Untuk membuat program .COM yang hanya menggunakan 1 segment, bisa anda
|
buat dengan model program seperti gambar 6.1. Bentuk yang digunakan disini
|
adalah bentuk program yang dianjurkan(Ideal). Dipilihnya bentuk program ideal
|
dalam buku ini dikarenakan pertimbangan dari berbagai keunggulan bentuk
|
program ideal ini seperti, prosesnya lebih cepat dan lebih mudah digunakan
|
oleh berbagai bahasa tingkat tinggi yang terkenal(Turbo Pascal dan C).
|
-----------------------------------------------------------
|
Label2 : +---------------------+
|
-----------------------------------------------------------
|
Gambar 6.1. Model Program COM
|
Supaya lebih jelas bentuk dari program ideal, marilah kita telusuri
|
lebih lanjut dari bentuk program ini.
|
Tanda directive ini digunakan untuk memberitahukan kepada assembler
|
bentuk memory yang digunakan oleh program kita. Supaya lebih jelas model-model
|
yang bisa digunakan adalah :
|
Jika program anda hanya menggunakan 1 segment seperti program COM. Model
|
ini disediakan khusus untuk program COM.
|
Jika data dan code yang digunakan oleh program kurang dari ukuran 1
|
Jika data yang digunakan oleh program kurang dari 64 KB tetapi code yang
|
digunakan bisa lebih dari 64 KB.
|
Jika data yang digunakan bisa lebih besar dari 64 KB tetapi codenya
|
Jika data dan code yang dipakai oleh program bisa lebih dari 64 KB.
|
Jika data, code maupun array yang digunakan bisa lebih dari 64 KB.
|
Mungkin ada yang bertanya-tanya mengapa pada program COM yang dibuat
|
digunakan model SMALL dan bukannya TINY ? Hal ini disebabkan karena banyak
|
dari compiler bahasa tingkat tinggi yang tidak bisa berkomunikasi dengan model
|
TINY, sehingga kita menggunakan model SMALL sebagai pemecahannya.
|
Tanda directive ini digunakan untuk memberitahukan kepada assembler
|
bahwa kita akan mulai menggunakan Code Segment-nya disini. Code segment ini
|
digunakan untuk menyimpan program yang nantinya akan dijalankan.
|
Pada program COM perintah ini akan selalu digunakan. Perintah ini
|
digunakan untuk memberitahukan assembler supaya program pada saat
|
dijalankan(diload ke memory) ditaruh mulai pada offset ke 100h(256) byte.
|
Dapat dikatakan juga bahwa kita menyediakan 100h byte kosong pada saat program
|
dijalankan. 100h byte kosong ini nantinya akan ditempati oleh PSP(Program
|
Segment Prefix) dari program tersebut. PSP ini digunakan oleh DOS untuk
|
mengontrol jalannya program tersebut.
|
Perintah JMP(JUMP) ini digunakan untuk melompat menuju tempat yang
|
ditunjukkan oleh perintah JUMP. Adapun syntaxnya adalah:
|
Dimana tujuannya dapat berupa label seperti yang digunakan pada bagan
|
diatas. Mengenai perintah JUMP ini akan kita bahas lebih lanjut nantinya.
|
Perintah JUMP yang digunakan pada bagan diatas dimaksudkan agar melewati
|
tempat data program, karena jika tidak ada perintah JUMP ini maka data program
|
akan ikut dieksekusi sehingga kemungkinan besar akan menyebabkan program anda
|
adalah suatu perintah untuk menghasilkan suatu interupsi
|
Interupsi 20h berfungsi untuk mengakhiri program dan menyerahkan kendali
|
sepenuhnya kepada Dos. Pada program COM cara ini bukanlah satu-satunya tetapi
|
cara inilah yang paling efektif untuk digunakan. Bila anda lupa untuk
|
mengakhiri sebuah program maka program anda tidak akan tahu kapan harus
|
selesai, hal ini akan menyebabkan komputer menjadi hang.
|
Bila dihasilkan interupsi 21h apa yang akan dikerjakan oleh komputer ?.
|
Jawabnya, ada banyak sekali kemungkinan. Pada saat terjadi interupsi 21h maka
|
pertama-tama yang dilakukan komputer adalah melihat isi atau nilai apa yang
|
terdapat pada register AH. Misalkan bila nilai AH adalah 2 maka komputer akan
|
mencetak sebuah karakter, berdasarkan kode ASCII yang terdapat pada register
|
DL. Bila nilai pada register AH bukanlah 2, pada saat dilakukan interupsi 21h
|
maka yang dikerjakaan oleh komputer akan lain lagi.
|
Dengan demikian kita bisa mencetak sebuah karakter yang diinginkan
|
dengan meletakkan angka 2 pada register AH dan meletakkan kode ASCII dari
|
karakter yang ingin dicetak pada register DL sebelum menghasilkan interupsi
|
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
|
; FUNGSI : MENCETAK KARATER ;
|
;==========================S’to=;
|
MOV AH,02h ; Nilai servis ntuk mencetak karakter
|
MOV DL,'A' ; DL = Karakter ASCII yang akan dicetak
|
INT 21h ; Cetak karakter !!
|
INT 20h ; Selesai ! kembali ke DOS
|
Program 7.1. Mencetak sebuah karakter
|
Setelah program 7.1. anda ketik compile-lah dengan menggunakan TASM.EXE
|
Turbo Assembler Version 2.0 Copyright (c) 1988, 1990
|
Volume in drive C is S’to
|
A0 ASM 506 08-14-94 3:56p
|
A0 OBJ 179 08-14-94 11:24p
|
Sampai disini sudah dihasilkan suatu file object dari KAL.ASM yang siap
|
dijadikan file COM(karena kita membuat file dengan format program COM). Untuk
|
itu lakukanlah langkah kedua, dengan perintah :
|
Turbo Link Version 3.0 Copyright (c) 1987, 1990
|
Turbo Link Version 3.0 Copyright (c) 1987, 1990
|
Volume in drive C is S’to
|
A0 ASM 506 08-14-94 3:56p
|
A0 OBJ 179 08-14-94 11:26p
|
A0 MAP 229 08-14-94 11:26p
|
Setelah kedua proses itu selesai maka dihasilkanlah suatu program COM
|
yang sudah siap untuk dijalankan. File-file yang tidak digunakan bisa anda
|
hapus. Bila program 7.1. dijalankan maka pada layar akan ditampilkan
|
Kita lihat disini bahwa karakter yang tercetak adalah yang sesuai dengan
|
kode ASCII yang ada pada register DL. Sebagai latihan cobalah anda ubah
|
register DL dengan angka 65 yang merupakan kode ASCII karakter 'A'. Hasil yang
|
fungsi ini baik-baik, karena akan banyak kita gunakan pada
|
7.2. MENCETAK KARAKTER BESERTA ATRIBUT
|
Sebuah karakter disertai dengan warna tentunya akan lebih menarik. Untuk
|
itu anda bisa menggunakan interupsi ke 10h dengan aturan pemakaiannya :
|
AL = Kode ASCII dari karakter yang akan dicetak
|
BH = Nomor halaman(0 untuk halaman 1)
|
BL = Atribut atau warna dari karakter yang akan dicetak
|
CX = Banyaknya karakter tersebut akan dicetak
|
Setelah semua register dimasukkan nilainya maka lakukanlah interupsi
|
10h. Perlu anda perhatikan bahwa interupsi ini mencetak karakter tanpa
|
;=================================;
|
; FUNGSI : MENCETAK KARATER 'A';
|
;============================S’to=;
|
MOV AH,09h ; Nilai servis untuk mencetak karakter
|
MOV AL,'A' ; AL = Karakter yang akan dicetak
|
MOV BH,00h ; Nomor Halaman layar
|
MOV BL,93h ; Warna atau atribut dari karakter
|
MOV CX,03h ; Banyaknya karakter yang ingin dicetak
|
INT 20h ; Selesai ! kembali ke DOS
|
Program 7.2. Mencetak karakter beserta atributnya
|
Bila program 7.2. dieksekusi maka akan ditampilkan huruf 'A' sebanyak 3
|
kali dengan warna dasar biru kedip dan warna tulisan Cyan(sesuai dengan nilai
|
register BL). Mengenai halaman layar dan atribut(warna) akan kita bahas lebih
|
lanjut pada bagian yang lain.
|
Anda bisa merubah-rubah register AL dan BL untuk merubah karakter dan
|
warna yang ingin dicetak.
|
7.3. PENGULANGAN DENGAN LOOP
|
Perintah LOOP digunakan untuk melakukan suatu proses yang berulang-
|
ulang. Adapun syntax dari perintah ini adalah :
|
Tujuan dapat berupa suatu label yang telah didefinisikan, contoh:
|
MOV CX,3 ; Banyaknya pengulangan yang dilakukan
|
Ulang : INT 10h ; Tempat terjadinya pengulangan
|
LOOP Ulang ; Lompat ke label 'Ulang'
|
Pada proses pengulangan dengan perintah LOOP, register CX memegang suatu
|
peranan yang khusus dimana register ini dijadikan sebagai counter/penghitung
|
terhadap banyaknya looping yang boleh terjadi. Setiap ditemui perintah LOOP,
|
maka register CX akan dikurangi dengan 1 terlebih dahulu, kemudian akan
|
dilihat apakah CX sudah mencapai 0. Proses looping akan selesai bila nilai
|
pada register CX mencapai nol. Seperti pada contoh diatas, maka interupsi 10h
|
akan dihasilkan sebanyak 3 kali(sesuai dengan nilai CX).
|
Perlu diperhatikan bahwa jangan sampai anda menaruh CX kedalam proses
|
LOOP karena hal ini akan menyebabkan nilai CX diSET terus sehingga proses
|
looping tidak bisa berhenti.
|
Bila anda menetapkan nilai CX menjadi nol pada saat pertama kali sebelum
|
dilakukan loop, maka anda akan mendapatkan proses looping yang terbanyak. Hal
|
ini dikarenakan proses pengurangan 0 dengan 1 akan menghasilkan nilai FFFFh(-
|
7.4. MENCETAK BEBERAPA KARAKTER
|
Untuk mencetak beberapa karakter, bisa anda gunakan proses looping.
|
Sebagai contoh dari penggunaan looping ini bisa dilihat pada program 7.3.
|
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
|
; FUNGSI : MENCETAK 16 BUAH ;
|
;==========================S’to=;
|
MOV AH,02h ; Nilai servis
|
MOV DL,'A' ; DL=karakter 'A' atau DL=41h
|
MOV CX,10h ; Banyaknya pengulangan yang akan
|
INT 21h ; Cetak karakter !!
|
INC DL ; Tambah DL dengan 1
|
LOOP Ulang ; Lompat ke Ulang
|
Program 7.3. Pengulangan dengan perintah LOOP
|
Bila program 7.3. dijalankan maka akan ditampilkan :
|
|
Tidak ada komentar:
Posting Komentar