Rabu, 10 Oktober 2007

Struktur Program COM


Compiler Assembly sudah banyak tersedia di internet, contohnya TASM (Turbo Assembler), MASM (Microsoft Assembler), NASM (Netwide Assembler), dan lain-lain.

Mengapa menggunakan bahasa Assembly?

  1. Cepat, Lebih cepat dari compiler lainnya.
  2. Lebih dekat dengan bahasa mesin, disebabkan bahasa Assembly dialamatkan 1:1 dengan bahasa mesin.
  3. Kode yang dihasilkan lebih kecil dari compiler lainnya.
  4. Dapat mengakses hardware lebih luas.

Salah satu bentuk program yang dapat dihasilkan oleh compiler Assembly adalah file COM.
FIle COM adalah struktur program paling sederhana. Ada beberapa syarat dalam pembuatan atau penggunaan file COM :

  1. Kode dan data program harus tidak lebih besar dari 64 KB.
  2. Tidak dapat memesan alamat memori melalui sistem operasi.

Contoh bentuk kode program COM, ketiklah di teks editor yang dapat menghasilkan file ASCII murni seperti Notepad, vi, atau lainnya. Simpan dengan nama COBAASM.ASM.

Versi TASM :
----------------------------------
ideal
p386n
model tiny

codeseg
org 100h
jmp start
;tempat data dan subrutin

start:
mov ax, 4c00h
int 21h
end
----------------------------------
Versi MASM :
----------------------------------
.386
.model tiny

.code
org 100h
entry:
jmp start
;tempat data dan subrutin

start:
mov ax, 4c00h
int 21h
end entry
----------------------------------

Compile-lah dengan perintah TASM.EXE COBAASM.ASM lalu dikuti dengan perintah TLINK.EXE /T COBAASM.OBJ, jika menggunakan compiler TASM. Untuk compiler MASM gunakan perintah ML COBAASM.ASM. Jika tak ada error, maka akan terlihat output seperti ini :

E:\PUSHM0~1\TASM3>tasm.exe cobaasm.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland International
Assembling file: cobaasm.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 460k

File yang dihasilkan dari proses kompilasi adalah file OBJ. Untuk merubah file OBJ ini menjadi sebuah file EXE atau COM kita perlu melakukan "linking" dengan program linker. Disini kita menggunakan TLINK.exe.

E:\PUSHM0~1\TASM3>tlink.exe /t cobaasm.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

Argumen /t pada tlink.exe berarti kita ingin membuat file COM dari file .obj yang dihasilkan oleh compiler. Sedangkan untuk membuat file EXE tidak perlu mengikutkan argumen /t.
Jalankan program COM tersebut :

E:\PUSHM0~1\TASM3>cobaasm.com

Apa yang terjadi? Tentunya tidak terjadi apa-apa karena kita belum menuliskan perintah untuk program tersebut. Jadi program cobaasm.com tersebut hanya diload ke memory lalu terminate dengan sendirinya.

Apa sih arti dari kode-kode diatas? lalu apa perbedaan antara kode yang ditulis untuk compiler TASM dengan MASM?
berikut adalah penjelasan lengkapnya...

  1. Perintah "ideal" berarti kita menggunakan syntax ideal dalanm compiler TASM.
  2. Perintah "p386n" atau ".386" berarti kita menggunakan intruksi prosesor 80386.
  3. Perintah "model tiny" atau ".tiny" berarti kita ingin menggunakan format file COM.
  4. Perintah "codeseg" atau ".code" adalah awal dari kode program kita.
  5. Perintah "org 100h" berarti program kita akan dimulai dari offset 100h.
  6. Dalam compiler MASM kita perlu mendeklarasikan entry point untuk program, disini kita gunakan label "entry:".
    Perlu diketahui kalau deklarasi sebuah label : "nama_label:".
  7. Program COM selalu diawali dengan "peloncatan" atau "jump" ke awal kode program. Perintah yang digunakan adalah "jmp" diikuti dengan nama label, misalnya "start". Bila diperhatikan, diantara perintah "jmp start" dan label "start" adalah tempat dimana kita bisa deklarasikan variabel-variabel ataupun data-data yang digunakan dalam program kita.
  8. Untuk mengakhiri jalannya program, kita perlu membuat suatu perintah. Perintah "end" atau "end entry" disini hanya menunjukkan akhir dari kode program, bukan untuk MENGAKHIRI proses. 2 perintah yang digunakan adalah :

    MOV AX, 4c00h
    int 21h

    Perintah MOV adalah perintah untuk menyalin isi data atau register ke suatu register lain. Bentuk umum perintah MOV :

    MOV tujuan_salin, asal_salin
    Pada perintah diatas kita akan menyalin atau lebih tepatnya "mengisi" register AX (lebih dikenal dengan register akumulator 16 bit) dengan bilangan heksa 4c00.
    Sedangkan perintah INT 21h berarti kita menjalankan interrupt sistem dengan fungsi 21h.

Tidak ada komentar: