Macro
adalah lebih mudah dibuat daripada procedure. Untuk membuat Macro bisa anda
gunakan bentuk seperti dibawah ini:
---------------------------------------------------------------
NamaM
MACRO [P1,P2,,]
+------------+
|
Program |
+------------+
ENDM
---------------------------------------------------------------
"P1" dan "P2" adalah parameter yang bisa anda
gunakan pada macro. Parameter ini berbentuk optional, artinya bisa digunakan
ataupun tidak. Supaya lebih jelas bisa anda lihat pada program MAC1 yang
menggunakan macro ini untuk mencetak karakter.
Contoh menggunakan macro:
Siapkan terlebih dahulu command prompt, kemudian ketikkan program
dibawah ini di layar edit.
Cetak_Kar
MACRO Kar
MOV
CX,3
MOV
AH,02
MOV
DL,Kar
Ulang
:
INT
21h ; Cetak Karakter
LOOP
Ulang
ENDM
; End Macro
.MODEL SMALL
.CODE
ORG 100h
Proses:
Cetak_Kar 'S' ; Cetak Huruf S
INT 20h
END Proses
Simpan program dan Jalankan program
dengan TASM terlebih dahulu kemudian TLINK maka akan tercetak huruf S pada
layar.
Dari program MAC1 bisa anda lihat betapa mudahnya untuk
menggunakan macro. Pada procedure, setiap kali kita memanggilnya dengan
perintah CALL maka program akan melompat pada procedure tersebut, sehingga
setiap procedure hanya terdapat satu kali saja pada program. Lain halnya dengan
Macro, setiap terjadi pemanggilan terhadap macro atau dapat dikatakan secara
kasar, setiap kita memanggil macro dengan menuliskan nama macronya dalam
program, maka seluruh isi macro akan dipindahkan pada program yang
memanggilnya. Dengan demikian bila pada program anda memanggil suatu macro
sebanyak 10 kali maka macro tersebut akan disisipkan 10 kali pada program. Hal
inilah yang menyebabkan program yang menggunakan macro ukuran programnya
menjadi lebih besar. Tetapi hal ini juga yang menyebabkan program yang
menggunakan macro lebih cepat daripada procedure, karena pada procedure
komputer harus melakukan lompatan tetapi pada macro tidak perlu.
LABEL
PADA MACRO
Pada
macro anda bisa menggunakan label seperti biasa. Tetapi anda harus ingat,
karena setiap pemanggilan Macro akan menyebabkan seluruh isi macro tersebut
disisipkan pada program, maka pada macro yang didalamnya menggunakan label
hanya dapat dipanggil sebanyak satu kali. Bila anda menggunakanya lebih dari
satu kali maka akan terjadi "**Error**
Symbol already defined elsewhere: ULANG"
karena dianggap kita menggunakan label yang sama.
Untuk menghindari hal itu, gunakanlah directif LOCAL. Dengan
directif LOCAL assembler akan membedakan label tersebut setiap kali terjadi
pemanggilan terhadapnya.
contoh program :
cetak_kar macro kar
local ulang
mov cx,5 ; banyaknya karakter yang akan di cetak
mov ah,02
mov dl,kar
ulang :
int 21h
loop ulang
endm
.model small
.code
org 100h
Proses :
cetak_kar 'A' ; karakter yg akan dicetak
cetak_kar 'Q' ; karakter yg akan dicetak
int 20h
end Proses
cetak_kar macro kar
local ulang
mov cx,5 ; banyaknya karakter yang akan di cetak
mov ah,02
mov dl,kar
ulang :
int 21h
loop ulang
endm
.model small
.code
org 100h
Proses :
cetak_kar 'A' ; karakter yg akan dicetak
cetak_kar 'Q' ; karakter yg akan dicetak
int 20h
end Proses
Simpan dan jalankan program, maka
akan tercetak huruf AAAAAQQQQQ.
Pada contoh diatas kita hanya
menggunakan macro dengan satu parameter, selanjutnya kita akan menggunakan
lebih dari satu parameter.
contoh program :
cetak_kar macro aku,kamu
mov ah, 02h
mov dl, aku
mov cx, kamu
ulang :
int 21h
inc dl
loop ulang
endm
.model small
.code
org 100h
proses :
cetak_kar 'A' 26
int 20h
end proses
Kita lihat pada bagian parameter, terdapat dua parameter yaitu aku dan kamu. Ketika kita memanggil didalam program kita beri satu spasi pada parameter yang lain , contoh : cetak 'A' 26. Nah 'A' merupakan parameter 1 dan 26 merupakan parameter 2.
ketika program tersebut dijalankan, maka akan menghasilkan karakter A-Z .
contoh program :
cetak_kar macro aku,kamu
mov ah, 02h
mov dl, aku
mov cx, kamu
ulang :
int 21h
inc dl
loop ulang
endm
.model small
.code
org 100h
proses :
cetak_kar 'A' 26
int 20h
end proses
Kita lihat pada bagian parameter, terdapat dua parameter yaitu aku dan kamu. Ketika kita memanggil didalam program kita beri satu spasi pada parameter yang lain , contoh : cetak 'A' 26. Nah 'A' merupakan parameter 1 dan 26 merupakan parameter 2.
ketika program tersebut dijalankan, maka akan menghasilkan karakter A-Z .