MACRO MACRO
ị ị
ọ ọ
Đ nh nghĩa Macro và g i Macro Đ nh nghĩa Macro và g i Macro Vaán ñeà truyeàn thoâng soá trong Macro. Vaán ñeà truyeàn thoâng soá trong Macro. Macro loàng nhau. Macro loàng nhau. Söû duïng Macro ñeå goïi chöông trình con. Söû duïng Macro ñeå goïi chöông trình con. Caùc toaùn töû Macro. Caùc toaùn töû Macro. Thö vieän Macro Thö vieän Macro So saùnh vieäc duøng Macro vôùi Procedure So saùnh vieäc duøng Macro vôùi Procedure Moät soá Macro maãu. Moät soá Macro maãu.
CHUONG 9 MACRO CHUONG 9 MACRO
11
ÑÒNH NGHÓA MACRO ÑÒNH NGHÓA MACRO
Macro laø 1 kyù hieäu ñöôïc gaùn cho 1 Macro laø 1 kyù hieäu ñöôïc gaùn cho 1 nhoùm leänh ASM – Macro laø teân thay theá nhoùm leänh ASM – Macro laø teân thay theá cho 1 nhoùm leänh. cho 1 nhoùm leänh.
Taïi sao caàn coù Macro : Taïi sao caàn coù Macro :
Trong laäp trình nhieàu luùc ta caàn phaûi vieát Trong laäp trình nhieàu luùc ta caàn phaûi vieát nhöõng leänh na naù nhau nhieàu laàn maø ta nhöõng leänh na naù nhau nhieàu laàn maø ta khoâng muoán vieát döôùi daïng haøm vì duøng khoâng muoán vieát döôùi daïng haøm vì duøng haøm toán thôøi gian thöïc thi, thay vì ta phaûi vieát haøm toán thôøi gian thöïc thi, thay vì ta phaûi vieát ñaày ñuû nhoùm leänh naøy vaøo CT, ta chæ caàn ñaày ñuû nhoùm leänh naøy vaøo CT, ta chæ caàn vieát Macro maø ta ñaõ gaùn cho chuùng. vieát Macro maø ta ñaõ gaùn cho chuùng.
CHUONG 9 MACRO CHUONG 9 MACRO
22
Ớ
LÀM QUEN V I MACRO
ạ ố
ư ế ọ ệ
ố ể ề ể Khi ta có nhi u đo n code gi ng nhau, chúng ta có th ể ế ố dùng macro đ thay th , gi ng nh ta dùng define ằ ụ trong C. Thí d chúng ta thay th đ an l nh sau b ng ấ macro đ in d u xu ng dòng.
ề ầ
MOV DL,13 ; v đ u dòng
MOV AH,2
INT 21H
ố
ớ MOV DL,10 ; xu ng dòng m i
MOV AH,2
INT 21H
CHUONG 9 MACRO 3
ả ế ạ
ệ i 6 dòng l nh trên, ta
t l
ế ạ
Thay vì ph i vi ể ể ạ có th t o 1 macro có tên @Newline đ thay th đo n code này :
@NewLine Macro
MOV DL,13
MOV AH,2
INT 21H
Sau đó, bất kỳ chỗ nào cần xuống dòng, ta chỉ cần gọi macro @NewLine.
MOV DL,10
@NewLine
MOV AH,2
INT 21H
ENDM
CHUONG 9 MACRO 4
MACRO (tt) MACRO (tt)
Khi hôïp dòch noäi dung nhoùm leänh naøy maø ta Khi hôïp dòch noäi dung nhoùm leänh naøy maø ta ñaõ gaùn cho macro seõ ñöôïc thay theá vaøo nhöõng ñaõ gaùn cho macro seõ ñöôïc thay theá vaøo nhöõng nôi coù teân macro tröôùc khi CT ñöôïc hôïp dòch nôi coù teân macro tröôùc khi CT ñöôïc hôïp dòch thaønh file OBJ. thaønh file OBJ. Ex1 : nhieàu khi ta phaûi vieát laïi nhieàu laàn Ex1 : nhieàu khi ta phaûi vieát laïi nhieàu laàn ñoaïn leänh xuaát kyù töï trong DL ra maøn hình. ñoaïn leänh xuaát kyù töï trong DL ra maøn hình. MOV AH, 2 MOV AH, 2 INT 21H INT 21H Thay vì phaûi vieát caû 1 caëp leänh treân moãi Thay vì phaûi vieát caû 1 caëp leänh treân moãi khi caàn xuaát kyù töï trong DL, ta coù theå vieát khi caàn xuaát kyù töï trong DL, ta coù theå vieát Macro PUTCHAR nhö sau : Macro PUTCHAR nhö sau :
PUTCHAR MACRO
CHUONG 9 MACRO CHUONG 9 MACRO
55
MOV AH,2 INT 21H
ENDM
MÔÛ ROÄNG CUÛA MACRO COÙ THEÅ MÔÛ ROÄNG CUÛA MACRO COÙ THEÅ
XEM TRONG FILE.LIST. XEM TRONG FILE.LIST.
.SALL (SUPRESS ALL) PHAÀN MÔÛ ROÄNG MACRO .SALL (SUPRESS ALL) PHAÀN MÔÛ ROÄNG MACRO
3 DIRECTIVE BIEÂN DÒCH SAU SEÕ 3 DIRECTIVE BIEÂN DÒCH SAU SEÕ QUYEÁT ÑÒNH MÔÛ ROÄNG MACRO QUYEÁT ÑÒNH MÔÛ ROÄNG MACRO NHÖ THEÁ NAØO. NHÖ THEÁ NAØO. KHOÂNG ÑÖÔÏC IN. SÖÛ DUÏNG KHI MACRO LÔÙN KHOÂNG ÑÖÔÏC IN. SÖÛ DUÏNG KHI MACRO LÔÙN HAY MACRO ÑÖÔÏC THAM CHIEÁU NHIEÀU LAÀN HAY MACRO ÑÖÔÏC THAM CHIEÁU NHIEÀU LAÀN TRONG CT. TRONG CT.
.XALL CHÆ NHÖÕNG DOØNG MACRO TAÏO MAÕ .XALL CHÆ NHÖÕNG DOØNG MACRO TAÏO MAÕ NGUOÀN MÔÙI ÑÖÔÏC IN RA.THÍ DUÏ CAÙC DOØNG NGUOÀN MÔÙI ÑÖÔÏC IN RA.THÍ DUÏ CAÙC DOØNG CHUÙ THÍCH ÑÖÔÏC BOÛ QUA. ÑAÂY LAØ TUYØ CHUÙ THÍCH ÑÖÔÏC BOÛ QUA. ÑAÂY LAØ TUYØ CHOÏN DEFAULT. CHOÏN DEFAULT.
.LALL (LIST ALL) TOAØN BOÄ CAÙC DOØNG TRONG .LALL (LIST ALL) TOAØN BOÄ CAÙC DOØNG TRONG
MACRO ÑÖÔÏC IN RA TRÖØ NHÖÕNG CHUÙ THÍCH MACRO ÑÖÔÏC IN RA TRÖØ NHÖÕNG CHUÙ THÍCH BAÉT ÑAÀU BAÈNG 2 DAÁU ;; BAÉT ÑAÀU BAÈNG 2 DAÁU ;;
CHUONG 9 MACRO 6
ÑÒNH NGHÓA MACRO ÑÒNH NGHÓA MACRO
CUÙ PHAÙP KHAI BAÙO MACRO : CUÙ PHAÙP KHAI BAÙO MACRO :
[
MACRO_NAME MACRO MACRO_NAME STATEMENTS STATEMENTS ENDMENDM
GOÏI MACRO :
GOÏI MACRO :
[
CHUONG 9 MACRO CHUONG 9 MACRO
77
THOÂNG SOÁ HÌNH THÖÙC CHÆ COÙ TAÙC DUÏNG ÑAÙNH DAÁU VÒ TRÍ CUÛA THOÂNG SOÁ TRONG MACRO. QUAN TROÏNG NHAÁT LAØ VÒ TRÍ CAÙC THOÂNG SOÁ.
MACRO TRUYỀN THAM SỐ MACRO TRUYỀN THAM SỐ
.MODEL SMALL .MODEL SMALL .STACK 100H .STACK 100H PUTCHAR MACRO KT MOV DL,KT MOV AH,2 INT 21H
MOV AH,4CH MOV AH,4CH INT 21H INT 21H MAIN ENDP MAIN ENDP END MAIN END MAIN
ENDM .CODE .CODE MAIN PROC MAIN PROC MOV DL, ‘A’ MOV DL, ‘A’ PUTCHAR PUTCHAR MOV DL, ‘*” MOV DL, ‘*” PUTCHAR PUTCHAR
CHUONG 9 MACRO 8
SWAP MACRO BIEÁN1, SWAP MACRO BIEÁN1,
BIEÁN2 BIEÁN2
MOV AX, BIEN1 MOV AX, BIEN1 XCHG AX, BIEN2 XCHG AX, BIEN2 MOV BIEN1, AX MOV BIEN1, AX ENDMENDM GOÏI : SWAP TRI1, TRI2 GOÏI : SWAP TRI1, TRI2
CHUONG 9 MACRO 9
TRAO ÑOÅI THAM SOÁ CUÛA TRAO ÑOÅI THAM SOÁ CUÛA MACRO MACRO MOÄT MACRO COÙ THEÅ COÙ THOÂNG SOÁ HOAËC KHOÂNG COÙ THOÂNG SOÁ.
MACRO COÙ THOÂNG SOÁ
SÖÛ DUÏNG MACRO
. CODE
.. ...
PUTCHAR ‘A’
CHAR PUTCHAR MACRO CHAR PUTCHAR MACRO MOV AH, 2 MOV AH, 2 MOV DL, CHAR MOV DL, CHAR INT 21H INT 21H ENDMENDM
PUTCHAR ‘B’
PUTCHAR ‘C’
...
CHUONG 9 MACRO 10
Ề Ố MACRO TRUY N THÔNG S
Thí dụ : macro @Printstr
Viết chương trình in 2 chuổi ‘Hello’ và ‘Hi”.
.DATA
Ta thấy đoạn 1 và đoạn 2 gần giống nhau có thể tạo macro có tham số như sau :
;1 ;1 ;1 ;2 ;2 ;2
MSG1 DB ‘Hello’,13,10 MSG2 DB‘Hi’,13,10 .CODE ………. MOV DX, OFFSET MSG1 MOV AH,9 INT 21H MOV DX, OFFSET MSG2 MOV AH,9 INT 21H ……..
CHUONG 9 MACRO 11
THÍ DUÏ VEÀ MACRO THÍ DUÏ VEÀ MACRO
DISPLAY MACRO STRING DISPLAY MACRO STRING PUSH AX PUSH AX PUSH DX PUSH DX LEA DX, STRING LEA DX, STRING MOV AH,9 MOV AH,9 INT 21H INT 21H POP DX POP DX POP AX POP AX ENDM ENDM
GOÏI : DISPLAY CHUOI
CHUONG 9 MACRO 12
TRAO ÑOÅI THAM SOÁ CUÛA MACRO TRAO ÑOÅI THAM SOÁ CUÛA MACRO
MACRO LOCATE : ÑÒNH VÒ CURSOR MAØN HÌNH
SÖÛ DUÏNG MACRO
TA COÙ CAÙC DAÏNG SÖÛ DUÏNG SAU :
LOCATE 10,20
LOCATE ROW, COL
LOCATE MACRO ROW, COLUMN LOCATE MACRO ROW, COLUMN PUSH AX PUSH AX PUSH BX PUSH BX PUSH DX PUSH DX MOV BX, 0 MOV BX, 0 MOV AH, 2 MOV AH, 2 MOV DH, ROW MOV DH, ROW MOV DL, COLUMN MOV DL, COLUMN INT 10H INT 10H POP DX POP DX POP BX POP BX POP AX POP AX ENDMENDM
LOCATE CH, CL
CHUÙ YÙ : KHOÂNG DUØNG CAÙC THANH GHI AH,AL,BH,BL VÌ SEÕ ÑUÏNG ÑOÄ VÔÙI CAÙC THANH GHI ÑAÕ SÖÛ DUÏNG TRONG MACRO
CHUONG 9 MACRO 13
MACRO LOÀNG NHAU MACRO LOÀNG NHAU MOÄT CAÙCH ÑÔN GIAÛN ÑEÅ XAÂY DÖÏNG MACRO LAØ XAÂY DÖÏNG 1 MACRO MÔÙI TÖØ MACRO ÑAÕ COÙ.
EX : HIEÅN THÒ 1 CHUOÅI TAÏI 1 TOAÏ ÑOÄ CHO EX : HIEÅN THÒ 1 CHUOÅI TAÏI 1 TOAÏ ÑOÄ CHO TRÖÔÙC TRÖÔÙC DISPLAY_AT MACRO ROW, COL, STRING
LOCATE ROW, COL ;Goïi macro ñònh vò cursor
DISPLAY STRING ; Goïi Macro xuaát string
ENDM
MOÄT MACRO COÙ THEÅ THAM CHIEÁU ÑEÁN CHÍNH NOÙ, NHÖÕNG MACRO NHÖ VAÄY GOÏI LAØ MACRO ÑEÄ QUI.
CHUONG 9 MACRO 14
ÑÒNH NGHÓA NHAÕN BEÂN TRONG MACRO ÑÒNH NGHÓA NHAÕN BEÂN TRONG MACRO
TRONG MACRO COÙ THEÅ COÙ NHAÕN.
GOÏI MACRO NHIEÀU LAÀN NHIEÀU NHAÕN ÑÖÔÏC TAÏO RA
LAØM SAO GIAÛI QUYEÁT VAÁN ÑEÀ NHAÛY ÑIEÀU KHIEÅN?
CUÙ PHAÙP : LOCAL LABEL_NAME
ASSEMBLY GIAÛI QUYEÁT VAÁN ÑEÀ NAØY BAÈNG CHÆ THÒ LOCAL CÖÔÕNG BÖÙC MASM TAÏO RA 1 TEÂN DUY NHAÁT CHO MOÃI MOÄT LABEL KHI MACRO ÑÖÔÏC GOÏI..
CHUONG 9 MACRO 15
Moät soá Macro yeâu caàu user ñònh nghóa caùc thaønh phaàn döõ lieäu vaø caùc nhaõn beân trong ñònh nghóa cuûa Macro.
Neáu söû duïng Macro naøy nhieàu hôn 1 laàn trong cuøng moät chöông trình, trình ASM ñònh nghóa thaønh phaàn döõ lieäu hoaëc nhaõn cho moãi laàn söû duïng caùc teân gioáng nhau laëp laïi khieán cho ASM baùo loãi.
Ñeå ñaûm baûo teân nhaõn chæ ñöôïc taïo ra 1 laàn, ta duøng chæ thò LOCAL ngay sau phaùt bieåu Macro
Khi ASM thaáy 1 bieán ñöôïc ñònh nghóa laø LOCAL noù seõ thay theá bieán naøy baèng 1 kyù hieäu coù daïng ??n, trong ñoù n laø 1 soá coù 4 chöõ soá. Neáu coù nhieàu nhaõn coù theå laø ??0000, ??0001, ??0002 ... Ta caàn bieát ñieàu naøy ñeå trong CT chính ta khoâng söû duïng caùc bieán hay nhaõn ñöôùi cuøng 1 daïng. 16
CHUONG 9 MACRO
Thí duï minh hoïa chæ thò Local Thí duï minh hoïa chæ thò Local
Xaây döïng Macro REPEAT coù nhieäm vuï xuaát count laàn soá kyù töï char ra maøn hình.
REPEAT MACRO CHAR, COUNT
LOCAL L1
MOV CX, COUNT
GIAÛ SÖÛ GOÏI :
L1: MOV AH,2
REPEAT ‘A’, 10
MOV DL, CHAR
REPEAT ‘*’, 20
ASM SEÕ DUØNG CÔ CHEÁ ÑAÙNH SOÁ CAÙC NHAÕN (TÖØ 0000H ÑEÁN FFFFH) ÑEÅ ÑAÙNH DAÁU CAÙC NHAÕN COÙ CHÆ ÑÒNH LOCAL.
INT 21H
LOOP L1
ENDM
SEÕ ÑÖÔÏC DÒCH RA
CHUONG 9 MACRO 17
Thí duï minh hoïa chæ thò Thí duï minh hoïa chæ thò Local Local
MOV CX, 10
??0000 : MOV AH,2
MOV DL, ‘A’
INT 21H
Ö
LOOP ??0000
A
0
G I
A
MOV CX, 20
E
Û S P
E
O Ï I : Û G 0 T ‘ A ’, 1 T ‘ * ’, 2
R
A
E
P
??0001 : MOV AH,2
E
R
MOV DL, ‘*’
INT 21H
LOOP ??0001
CHUONG 9 MACRO 18
Thí duï minh Thí duï minh hoïahoïa
Vieát 1 macro ñöa töø lôùn hôn trong 2 töø vaøo AX
GETMAX MACRO WORD1, WORD2
LOCAL EXIT
MOV AX, WORD1
CMP AX, WORD2
GIAÛ SÖÛ FIRST,SECOND, THIRD LAØ CAÙC BIEÁN WORD.
JG EXIT
SÖÏ THAM CHIEÁU MACRO ÑÖÔÏC MÔÛ ROÄNG NHÖ SAU :
MOV AX, FIRST
MOV AX, WORD2
CMP AX, SECOND
EXIT :
JG ??0000
ENDM
MOV AX, SECOND
??0000:
CHUONG 9 MACRO 19
Thí duï minh Thí duï minh hoïahoïa
Vieát 1 macro ñöa töø lôùn hôn trong 2 vaøo AX
LÔØI GOÏI MACRO TIEÁP THEO :
GETMAX SECOND, THIRD
ÑÖÔÏC MÔÛ ROÄNG NHÖ SAU :
MOV AX, SECOND
CMP AX, THIRD
JG ??0001
??0001 :
SÖÏ THAM CHIEÁU LIEÂN TIEÁP MACRO NAØY HAY ÑEÁN MACRO KHAÙC KHIEÁN TRÌNH BIEÂN DÒCH CHEØN CAÙC NHAÕN ??0002, ??0003 VAØ CÖÙ NHÖ VAÄY TRONG CHÖÔNG TRÌNH CAÙC NHAÕN NAØY LAØ DUY NHAÁT.
CHUONG 9 MACRO 20
THÖ VIEÄN MACRO THÖ VIEÄN MACRO
CAÙC MACRO MAØ CHÖÔNG TRÌNH THAM CHIEÁU COÙ THEÅ ÑAËT ÔÛ FILE RIEÂNG TA COÙ THEÅ TAÏO 1 FILE THÖ VIEÄN CAÙC MACRO.
DUØNG 1 EDITOR ÑEÅ SOAÏN THAÛO MACRO
LÖU TRÖÕ TEÂN FILE MACRO.LIB
KHI CAÀN THAM CHIEÁU ÑEÁN MACRO TA DUØNG CHÆ THò
INCLUDE TEÂN FILE THÖ VIEÄN
MOÄT COÂNG DUÏNG QUAN TROÏNG CUÛA MACRO LAØ TAÏO RA CAÙC LEÄNH MÔÙI.
CHUONG 9 MACRO 21
SO SAÙNH GIÖÕA MACRO & SO SAÙNH GIÖÕA MACRO & THUÛ TUÏC THUÛ TUÏC
THÔØI GIAN BIEÂN DÒCH. THÔØI GIAN BIEÂN DÒCH.
MACRO ÍT TOÁN THÔØI GIAN BIEÂN MACRO ÍT TOÁN THÔØI GIAN BIEÂN
DÒCH HÔN PROCEDURE DÒCH HÔN PROCEDURE
THÔØI GIAN THÖÏC HIEÄN : NHANH THÔØI GIAN THÖÏC HIEÄN : NHANH HÔN PROCEDURE VÌ KHOÂNG TOÁN HÔN PROCEDURE VÌ KHOÂNG TOÁN THÔØI GIAN KHOÂI PHUÏC TRAÏNG THÔØI GIAN KHOÂI PHUÏC TRAÏNG THAÙI THOÂNG TIN KHI ÑÖÔÏC GOÏI THAÙI THOÂNG TIN KHI ÑÖÔÏC GOÏI TOÁC ÑOÄ NHANH HÔN. TOÁC ÑOÄ NHANH HÔN.
KÍCH THÖÔÙC : KÍCH THÖÔÙC CT KÍCH THÖÔÙC : KÍCH THÖÔÙC CT
DAØI HÔN DAØI HÔN
CHUONG 9 MACRO 22
CAÙC LEÄNH LAËP TRONG CAÙC LEÄNH LAËP TRONG MACRO MACRO
REP
TAÙC DUÏNG : LAËP LAÏI CAÙC KHOÁI LEÄNH TRONG
TAÙC DUÏNG : LAËP LAÏI CAÙC KHOÁI LEÄNH TRONG
MACRO VÔÙI SOÁ LAÀN LAØ
EX : MSHL MACRO OPER, BITS GOÏI MSHL BX, 3
REPT BITS
SHL DEST, 1 SEÕ ÑÖÔÏC THAY THEÁ BAÈNG :
ENDM SHL BX, 1
ENDM SHL BX, 1
CHUONG 9 MACRO CHUONG 9 MACRO
2323
SHL BX, 1
CAÙC LEÄNH LAËP TRONG CAÙC LEÄNH LAËP TRONG MACRO MACRO
TAÙC DUÏNG :
TAÙC DUÏNG :
LAËP LAÏI KHOÁI LEÄNH TUØY THEO DANH SAÙCH TRÒ.
LAËP LAÏI KHOÁI LEÄNH TUØY THEO DANH SAÙCH TRÒ.
SOÁ LAÀN LAËP CHÍNH LAØ SOÁ TRÒ TRONG DANH SAÙCH
SOÁ LAÀN LAËP CHÍNH LAØ SOÁ TRÒ TRONG DANH SAÙCH
MOÃI LAÀN LAËP LAÏI SEÕ THAY
IRP
EX : PROCTABLE LABEL WORD
IRP PROCNAME,
DW PROCNAME
CHUONG 9 MACRO CHUONG 9 MACRO
2424
ENDM
CAÙC LEÄNH LAËP TRONG CAÙC LEÄNH LAËP TRONG MACRO MACRO
TUY NHIEÂN CAÙCH KHAI BAÙO NAØY RÖÔØM RAØ HÔN TUY NHIEÂN CAÙCH KHAI BAÙO NAØY RÖÔØM RAØ HÔN LAØ DUØNG : LAØ DUØNG : PROCTABLE DW MOVUP, PROCTABLE DW MOVUP, MOVDOWN,MOVLEFT,MOVRIGHT MOVDOWN,MOVLEFT,MOVRIGHT
VIEÄC SÖÛ DUÏNG CAÙC MACRO LAËP VOØNG NAØY CHO COÙ HIEÄU QUAÛ LAØ ÑIEÀU KHOÙ, ÑOØI HOÛI PHAÛI COÙ NHIEÀU KINH NGHIEÄM
CHUONG 9 MACRO CHUONG 9 MACRO
2525
BÀI TẬP MACRO BÀI TẬP MACRO
ế ộ ủ t m t MACRO tính USCLN c a 2
ậ ế ố ư
ị
Bài 1 : 1. Vi bi n s M và N. Thu t toán USCLN nh sau : WHILE N <> 0 DO M = M MOD N Hoán v M và N END_WHILE
Bài 2 : MACRO doi tu so chua trong ax sang chuoi tro den boi DI ; in : DI =offset chuoi ; AX =so can doi ; out: khong co(chuoi van do di tro toi)
CHUONG 9 MACRO 26
ế Bài 3 :Vi t macro chuyen tu chuoi thanh so chua trong ax
; in : DI =offset chuoi ; out : AX =so da doi
Bài 4 : Viết MACRO xuất số hecxa chứa trong AL ra màn hình * ; INPUT : AL chứa số cần xuất; OUTPUT: nothing
Bài 5 : Viết Macro in số hecxa chứa trong BL ra dạng binary ;Input: BL chứa số cần in ;Output: Nothing
CHUONG 9 MACRO 27