Bài giảng Lập trình hợp ngữ - Chương 9: Macro

MACRO  
Định nghĩa Macro và gọi Macro  
Vaán ñeà truyeàn thoâng soá trong Macro.  
Macro loàng nhau.  
Söû duïng Macro ñeå goïi chöông trình con.  
Caùc toaùn töû Macro.  
Thö vieän Macro  
So saùnh vieäc duøng Macro vôùi Procedure  
Moät soá Macro maãu.  
CHUONG 9 MACRO  
1
ÑÒNH NGHÓA MACRO  
Macro laø 1 kyù hieäu ñöôïc gaùn cho 1 nhoùm  
leänh ASM – Macro laø teân thay theá cho 1  
nhoùm leänh.  
Taïi sao caàn coù Macro :  
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 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 ñ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.  
CHUONG 9 MACRO  
2
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
Thay vì phải viết lại 6 dòng lệnh trên,  
ta có thể tạo 1 macro có tên  
@Newline để thay thế đoạn code này  
:
@NewLine Macro  
MOV DL,13  
Sau đó, bất kỳ chỗ nào  
cần xuống dòng, ta chỉ  
cần gọi macro  
@NewLine.  
MOV AH,2  
INT 21H  
MOV DL,10  
MOV AH,2  
INT 21H  
@NewLine  
ENDM  
CHUONG 9 MACRO  
4
MACRO (tt)  
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 nôi coù  
teân macro tröôùc khi CT ñöôïc hôïp dòch thaønh file  
OBJ.  
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.  
MOV AH, 2  
INT 21H  
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 Macro  
PUTCHAR nhö sau :  
PUTCHAR MACRO  
MOV AH,2  
INT 21H  
CHUONG 9 MACRO  
5
ENDM  
MÔÛ ROÄNG CUÛA MACRO COÙ THEÅ XEM  
TRONG FILE.LIST.  
3 DIRECTIVE BIEÂN DÒCH SAU SEÕ QUYEÁT  
ÑÒNH MÔÛ ROÄNG MACRO NHÖ THEÁ NAØO.  
.SALL (SUPRESS ALL) PHAÀN MÔÛ ROÄNG MACRO  
KHOÂNG ÑÖÔÏC IN. SÖÛ DUÏNG KHI MACRO LÔÙN HAY  
MACRO ÑÖÔÏC THAM CHIEÁU NHIEÀU LAÀN TRONG CT.  
.XALL CHÆ NHÖÕNG DOØNG MACRO TAÏO MAÕ NGUOÀN  
MÔÙI ÑÖÔÏC IN RA.THÍ DUÏ CAÙC DOØNG CHUÙ THÍCH  
ÑÖÔÏC BOÛ QUA. ÑAÂY LAØ TUYØ CHOÏN DEFAULT.  
.LALL (LIST ALL) TOAØN BOÄ CAÙC DOØNG TRONG  
MACRO ÑÖÔÏC IN RA TRÖØ NHÖÕNG CHUÙ THÍCH BAÉT  
ÑAÀU BAÈNG 2 DAÁU ;;  
CHUONG 9 MACRO  
6
 
ÑÒNH NGHÓA MACRO  
CUÙ PHAÙP KHAI BAÙO MACRO :  
MACRO_NAME MACRO [ <THOÂNG SOÁ HÌNH THÖÙC>]  
STATEMENTS  
ENDM  
GOÏI MACRO :  
MACRO_NAME [<THOÂNG SOÁ THÖÏC>, ...]  
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Á.  
CHUONG 9 MACRO  
7
MACRO TRUN THAM Ố  
.MODEL SMALL  
MOV AH,4CH  
INT 21H  
MAIN ENDP  
END MAIN  
.STACK 100H  
PUTCHAR MACRO KT  
MOV DL,KT  
MOV AH,2  
INT 21H  
ENDM  
.CODE  
MAIN PROC  
MOV DL, ‘A’  
PUTCHAR  
MOV DL, ‘*”  
PUTCHAR  
CHUONG 9 MACRO  
8
SWAP MACRO BIEÁN1, BIEÁN2  
MOV AX, BIEN1  
XCHG AX, BIEN2  
MOV BIEN1, AX  
ENDM  
GOÏI : SWAP TRI1, TRI2  
CHUONG 9 MACRO  
9
TRAO ÑOÅI THAM SOÁ CUÛA 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 MACRO CHAR  
.. ...  
MOV AH, 2  
MOV DL, CHAR  
INT 21H  
ENDM  
PUTCHAR ‘A’  
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  
MSG1 DB ‘Hello’,13,10  
MSG2 DB‘Hi’,13,10  
.CODE  
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  
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  
DISPLAY MACRO STRING  
PUSH AX  
PUSH DX  
LEA DX, STRING  
MOV AH,9  
INT 21H  
POP DX  
POP AX  
GOÏI : DISPLAY CHUOI  
ENDM  
CHUONG 9 MACRO  
12  
TRAO ÑOÅI THAM SOÁ CUÛA MACRO  
MACRO LOCATE : ÑÒNH VÒ CURSOR MAØN HÌNH  
SÖÛ DUÏNG MACRO  
LOCATE MACRO ROW, COLUMN  
PUSH AX  
PUSH BX  
TA COÙ CAÙC DAÏNG SÖÛ DUÏNG  
SAU :  
PUSH DX  
MOV BX, 0  
LOCATE 10,20  
MOV AH, 2  
LOCATE ROW, COL  
LOCATE CH, CL  
MOV DH, ROW  
MOV DL, COLUMN  
INT 10H  
CHUÙ YÙ : KHOÂNG DUØNG CAÙC  
POP DX  
POP BX  
POP AX  
THANH GHI AH,AL,BH,BL VÌ  
SEÕ ÑUÏNG ÑOÄ VÔÙI CAÙC  
ENDM  
THANH GHI ÑAÕ SÖÛ DUÏNG  
TRONG MACRO  
13  
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 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  
RONG MACRO COÙ THEÅ COÙ NHAÕN.  
OÏ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?  
SEMBLY GIAÛI QUYEÁT VAÁN ÑEÀ NAØY BAÈNG CHÆ THÒ LOCAL  
ÔÕNG BÖÙC MASM TAÏO RA 1 TEÂN DUY NHAÁT CHO MOÃI MOÄT  
BEL KHI MACRO ÑÖÔÏC GOÏI..  
CUÙ PHAÙP : LOCAL LABEL_NAME  
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.  
CHUONG 9 MACRO  
16  
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  
L1: MOV AH,2  
MOV DL, CHAR  
INT 21H  
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.  
GIAÛ SÖÛ GOÏI :  
REPEAT ‘A’, 10  
REPEAT ‘*’, 20  
LOOP L1  
ENDM  
SEÕ ÑÖÔÏC DÒCH RA ➔  
CHUONG 9 MACRO  
17  
Thí duï minh hoïa chæ thò  
Local  
MOV CX, 10  
??0000 : MOV AH,2  
MOV DL, ‘A’  
INT 21H  
LOOP ??0000  
MOV CX, 20  
??0001 : MOV AH,2  
MOV DL, ‘*’  
INT 21H  
LOOP ??0001  
CHUONG 9 MACRO  
18  
Thí duï minh hoïa  
Vieát 1 macro ñöa töø lôùn hôn trong 2 töø vaøo  
AX  
GETMAX MACRO WORD1,  
WORD2  
GIAÛ SÖÛ FIRST,SECOND, THIRD LAØ  
LOCAL EXIT  
MOV AX, WORD1  
CMP AX, WORD2  
JG EXIT  
CAÙC BIEÁN WORD.  
SÖÏ THAM CHIEÁU MACRO ÑÖÔÏC  
MÔÛ ROÄNG NHÖ SAU :  
MOV AX, FIRST  
CMP AX, SECOND  
JG ??0000  
MOV AX, WORD2  
EXIT :  
MOV AX, SECOND  
??0000:  
ENDM  
CHUONG 9 MACRO  
19  
Thí duï minh hoï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  
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.  
JG ??0001  
??0001 :  
CHUONG 9 MACRO  
20  
Tải về để xem bản đầy đủ
ppt 27 trang baolam 23880 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình hợp ngữ - Chương 9: Macro", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pptbai_giang_lap_trinh_hop_ngu_chuong_9_macro.ppt