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

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 .

Leave a Reply