Senin, Januari 10, 2011

Perbedaan Macro Pada TASM & JWasm

Assembler adalah suatu program yang dapat digunakan untuk meng-assemble kode program dalam bahasa Assembly. Dalam bahasa sehari-hari mungkin assembler bisa disebut "compiler"-nya Assembly.

Di dunia ini, terdapat banyak sekali program Assembler. Beberapa diantaranya adalah TASM (Turbo Assembler) dan JWasm. Masing-masing program Assembler ini memiliki kekhasan masing-masing, yang mungkin saja berbeda dengan Assembler lain.

/* Pendahuluan yang ga terlalu penting :p */

Berbicara mengenai Assembler, saya menghadapi sedikit masalah dengan program ini, yang untungnya sudah tertangani. Begini ceritanya.

Saya sekarang menjadi asisten praktikum Organisasi Komputer (Orkom) untuk kelas Ilkom Ekstensi. Waktu saya mendapatkan mata kuliah ini, Assembler yang digunakan adalah TASM. Akan tetapi, untuk praktikum Orkom kali ini (di Ilkom Ekstensi-pen), alih-alih menggunakan TASM, sang dosen memilih untuk menggunakan JWasm sebagai Assembler. Salah satu kelebihan dari JWasm adalah dapat digunakan di sistem operasi Linux, dimana hal ini merupakan fitur yang jarang ada di dunia Assembler.

Secara umum, sintaks yang digunakan dalam JWasm tidak jauh berbeda dengan sintaks pada TASM. Salah satu sintaks yang berbeda adalah sintaks untuk memanggil Macro dengan n argumen input (n > 1).

Misalkan saya mempunyai kodingan untuk mencetak angka 0 dan huruf C sebanyak tiga kali secara bergantian sebagai berikut:
Cetak_Kar MACRO Kar1,Kar2
MOV CX,3
MOV AH,02

Ulang:
MOV DL,Kar1
INT 21h
MOV DL,Kar2
INT 21h

LOOP Ulang

ENDM ; End Macro

.MODEL SMALL
.CODE
ORG 100h

Proses:
Cetak_Kar 48 67 ; Kode ASCII: '0'=48, 'C'=67
INT 20h
END Proses


Ketika saya assemble koding tersebut menggunakan TASM (menjadi program .com tentunya) dan saya jalankan, tidak terjadi masalah. Beda halnya ketika saya assemble koding tersebut menggunakan JWasm. Alih-alih pesan sukses, yang keluar malah pesan gagal.

Setelah dilakukan penelusuran, ternyata terdapat satu perbedaan kecil antara sintaks pada TASM dan JWasm dalam pemanggilan Macro dengan n argumen input. Pada TASM, argumen-argumen yang akan dikirim ke macro dapat dipisahkan dengan spasi atau koma, tetapi pada JWasm argumen-argumen tersebut harus dipisahkan dengan koma. Jadi, kita hanya perlu menambahkan tanda koma sebagai pembatas antar argumen macro pada koding di atas, hasilnya adalah sebagai berikut.
Cetak_Kar MACRO Kar1,Kar2
MOV CX,3
MOV AH,02

Ulang:
MOV DL,Kar1
INT 21h
MOV DL,Kar2
INT 21h

LOOP Ulang

ENDM ; End Macro

.MODEL SMALL
.CODE
ORG 100h

Proses:
Cetak_Kar 48,67
INT 20h
END Proses


Jika Anda assemble koding kedua ini menggunakan JWasm, maka akan muncul pesan sukses, dan program dapat dijalankan.

Sebegitu simpel? Ya. Tapi jika Anda menganggap ini adalah hal sepele, maka Anda salah. Hal ini tidak dapat disepelekan begitu saja, karena beda sintaks, beda artinya.

Yah, ini hanyalah satu perbedaan sintaks antara TASM dan JWasm. Mungkin masih banyak perbedaan lainnya yang belum saya temui.

Jadi, bagaimana menurut Anda?

1 komentar:

  1. * Bukannya belajar AI ato Metkuan, malah ngoding asm... -.-" *

    BalasHapus