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 đủ
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:
bai_giang_lap_trinh_hop_ngu_chuong_9_macro.ppt

