MACRO MACRO
ị ị
ọ ọ
Đ nh nghĩa Macro và g i Macro Đ nh nghĩa Macro và g i Macro Vấn đề truyền thông số trong Macro. Vấn đề truyền thông số trong Macro. Macro lồng nhau. Macro lồng nhau. Sử dụng Macro để gọi chương trình con. Sử dụng Macro để gọi chương trình con. Các toán tử Macro. Các toán tử Macro. Thư viện Macro Thư viện Macro So sánh việc dùng Macro với Procedure So sánh việc dùng Macro với Procedure Một số Macro mẫu. Một số Macro mẫu.
CHUONG 9 MACRO CHUONG 9 MACRO
11
Ị
ỊĐ NH NGHĨA MACRO Đ NH NGHĨA MACRO
ợ Macro là 1 ký hi u ệ đưđư c gán cho 1 nhóm ợc gán cho 1 nhóm Macro là 1 ký hi u ệ ế ệ ế ệ l nh ASM – Macro là tên thay th cho 1 nhóm l nh ASM – Macro là tên thay th cho 1 nhóm l nh.ệl nh.ệ
ạ ạ
ầ ầ
T i sao c n có Macro : T i sao c n có Macro :
ậ ậ
ả ế ả ế
ầ ầ
ớ ạ ớ ạ
ự ự
ờ ờ ệ ệ
t t
ữ ề ữ ề Trong l p trình nhi u lúc ta c n ph i vi Trong l p trình nhi u lúc ta c n ph i vi t nh ng t nh ng ế ố ề ầ ệ ế ố ề ầ ệ t l nh na ná nhau nhi u l n mà ta không mu n vi l nh na ná nhau nhi u l n mà ta không mu n vi t ddưư i d ng hàm vì dùng hàm t n th i gian th c thi, ố ố i d ng hàm vì dùng hàm t n th i gian th c thi, ủ ả ế đđ y ầy ầ đđ nhóm l nh này vào CT, ủ ả ế nhóm l nh này vào CT, thay vì ta ph i vi thay vì ta ph i vi ế ỉ ầ ế ỉ ầ t Macro mà ta ta ch c n vi ta ch c n vi t Macro mà ta
ã gán cho chúng. đđã gán cho chú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 CHUONG 9 MACRO
33
ả ế ạ
ệ
ị
i 6 d ng l nh trên, ta cĩ
t l
ể
ể ạ ế ạ
Thay vì ph i vi 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 CHUONG 9 MACRO
44
ề ầ đđo n ạo n ạ ề ầ
t l t l
đđã ã ơơi có ữ ữ i có đưđư c h p d ch thành file c h p d ch thành file ả ế ạ ả ế ạ i nhi u l n i nhi u l n trong DL ra màn hình. trong DL ra màn hình.
ặ ệ ặ ệ
ể ế ể ế
ỗ ỗ t c 1 c p l nh trên m i khi t c 1 c p l nh trên m i khi t Macro t Macro
MACRO (tt) MACRO (tt) ệ ộ ợ ị ệ ộ ợ ị Khi h p d ch n i dung nhóm l nh này mà ta Khi h p d ch n i dung nhóm l nh này mà ta ế ợ gán cho macro s ẽ đưđư c thay th vào nh ng n ế ợ gán cho macro s ẽ c thay th vào nh ng n tên macro trưư c khi CT ợ ợ ị ớ ợ ợ ị ớc khi CT tên macro tr OBJ.OBJ. ề ề Ex1 : nhi u khi ta ph i vi Ex1 : nhi u khi ta ph i vi ự ấ ệ ự ấ ệ l nh xu t ký t l nh xu t ký t MOV AH, 2 MOV AH, 2 INT 21H INT 21H ả ế ả ả ế ả Thay vì ph i vi Thay vì ph i vi ự ấ ầ ự ấ ầ c n xu t ký t trong DL, ta có th vi trong DL, ta có th vi c n xu t ký t PUTCHAR nhưư sau : sau : PUTCHAR nh
PUTCHAR MACRO
CHUONG 9 MACRO CHUONG 9 MACRO
55
MOV AH,2 INT 21H
ENDM
Ở Ộ Ở Ộ
Ủ Ủ
Ể Ể
M R NG C A MACRO CÓ TH XEM M R NG C A MACRO CÓ TH XEM
TRONG FILE.LIST. TRONG FILE.LIST.
Ẽ Ẽ
Ị Ị 3 DIRECTIVE BIÊN D CH SAU S QUY T 3 DIRECTIVE BIÊN D CH SAU S QUY T Ị Ị
Ở Ộ Ở Ộ
Đ NH M R NG MACRO NH Đ NH M R NG MACRO NH
Ế Ế Ế ƯƯ TH NÀO. Ế TH NÀO.
Ở Ộ Ở Ộ
Ầ Ầ
Ử Ụ Ử Ụ
Ớ Ớ
Ợ Ợ Ợ Ợ
Ầ Ầ
.SALL (SUPRESS ALL) PH N M R NG MACRO .SALL (SUPRESS ALL) PH N M R NG MACRO KHÔNG ĐƯƯ C IN. S D NG KHI MACRO L N HAY C IN. S D NG KHI MACRO L N HAY KHÔNG Đ Ề Ế MACRO ĐƯƯ C THAM CHI U NHI U L N TRONG CT. Ề Ế C THAM CHI U NHI U L N TRONG CT. MACRO Đ
Ữ Ữ
Ạ Ạ
.XALL CH NH NG DÒNG MACRO T O MÃ NGU N .XALL CH NH NG DÒNG MACRO T O MÃ NGU N
Ợ Ợ Ợ Ỏ Ợ Ỏ
Ọ Ọ
Ỳ Ỳ
Ồ Ỉ Ồ Ỉ M I ĐỚM I ĐỚ ƯƯ C IN RA.THÍ D CÁC DÒNG CHÚ THÍCH Ụ Ụ C IN RA.THÍ D CÁC DÒNG CHÚ THÍCH ĐĐƯƯ C B QUA. ĐÂY LÀ TU CH N DEFAULT. C B QUA. ĐÂY LÀ TU CH N DEFAULT.
Ộ Ộ
Ợ Ợ
Ữ Ữ
Ắ Ắ
Ầ Ầ
Ằ Ằ
Ấ Ấ
.LALL (LIST ALL) TOÀN B CÁC DÒNG TRONG .LALL (LIST ALL) TOÀN B CÁC DÒNG TRONG MACRO ĐƯƯ C IN RA TR NH NG CHÚ THÍCH B T Ừ Ừ C IN RA TR NH NG CHÚ THÍCH B T MACRO Đ Đ U B NG 2 D U ;; Đ U B NG 2 D U ;;
CHUONG 9 MACRO CHUONG 9 MACRO
66
Ị
ỊĐ NH NGHĨA MACRO Đ NH NGHĨA MACRO
CÚ PHÁP KHAI BÁO MACRO : CÚ PHÁP KHAI BÁO MACRO :
Ứ Ứ
Ố
Ố
[ ]
MACRO [ ]
MACRO_NAME MACRO
MACRO_NAME
STATEMENTS
STATEMENTS
ENDMENDM
Ọ
Ố Ự
Ố Ự
ỌG I MACRO :
G I MACRO :
[, ...]
MACRO_NAME [ , ...]
MACRO_NAME
Ố Ấ Ị Ứ Ụ Ỉ
Ọ Ố Ấ Ị
CHUONG 9 MACRO
CHUONG 9 MACRO
77
THÔNG S HÌNH TH C CH CÓ TÁC D NG ĐÁNH D U V TRÍ
Ủ
C A THÔNG S TRONG MACRO. QUAN TR NG NH T LÀ V TRÍ
CÁC THÔNG S .Ố
Ề
Ề
Ố
Ố
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
CHUONG 9 MACRO
88
Ế
Ế
Ế
Ế
SWAP MACRO BI N1, BI N2
SWAP MACRO BI N1, BI N2
MOV AX, BIEN1
MOV AX, BIEN1
XCHG AX, BIEN2
XCHG AX, BIEN2
MOV BIEN1, AX
MOV BIEN1, AX
ENDMENDM
Ọ
ỌG I : SWAP TRI1, TRI2
G I : SWAP TRI1, TRI2
CHUONG 9 MACRO
CHUONG 9 MACRO
99
Ố Ủ
Ố Ủ
Ổ
Ổ
TRAO Đ I THAM S C A MACRO
TRAO Đ I THAM S C A MACRO
Ộ
Ố
Ặ
Ể
Ố
M T MACRO CÓ TH CÓ THÔNG S HO C KHÔNG CÓ THÔNG S .
MACRO CÓ THÔNG SỐ
Ử Ụ S D 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
CHUONG 9 MACRO
1010
...
Ề Ố 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
CHUONG 9 MACRO
CHUONG 9 MACRO
1111
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
……..
Ụ Ề
Ụ Ề
THÍ D V MACRO
THÍ D V 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
CHUONG 9 MACRO
CHUONG 9 MACRO
1212
Ọ G I : DISPLAY CHUOI
Ố Ủ
Ố Ủ
Ổ
Ổ
TRAO Đ I THAM S C A MACRO
TRAO Đ I THAM S C A MACRO
Ị
Ị
MACRO LOCATE : Đ NH V CURSOR MÀN HÌNH
Ử Ụ S D NG MACRO
Ử Ụ
Ạ
TA CÓ CÁC D NG S D NG
SAU :
LOCATE 10,20
LOCATE ROW, COL
LOCATE CH, CL
Ẽ Ụ
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
Ử Ụ
CHUONG 9 MACRO
CHUONG 9 MACRO
1313
CHÚ Ý : KHÔNG DÙNG CÁC
THANH GHI AH,AL,BH,BL VÌ
Ộ Ớ
S Đ NG Đ V I CÁC THANH
GHI ĐÃ S D NG TRONG
MACRO
Ồ
Ồ
MACRO L NG NHAU
MACRO L NG NHAU
Ự
Ả
Ự
Ể
Ộ
ƠN GI N Đ XÂY D NG MACRO LÀ XÂY D NG 1
Ớ Ừ
M T CÁCH Đ
MACRO M I T MACRO ĐÃ CÓ.
Ị
Ị
Ổ Ạ
Ổ Ạ
Ạ Ộ
Ạ Ộ
Ể
Ể
EX : HI N TH 1 CHU I T I 1 TO Đ CHO
EX : HI N TH 1 CHU I T I 1 TO Đ CHO
TRTRƯƯ C ỚC Ớ
DISPLAY_AT MACRO ROW, COL, STRING
ọ
ị
LOCATE ROW, COL ;G i macro
ị
đ nh v cursor
ọ
ấ
DISPLAY STRING ; G i Macro xu t string
ENDM
Ộ
Ế
Ế
Ọ
Ữ
Ậ
Ệ
M T MACRO CÓ TH THAM CHI U Đ N CHÍNH NÓ,
NH NG MACRO NH
Ể
Ư V Y G I LÀ MACRO Đ QUI.
CHUONG 9 MACRO
CHUONG 9 MACRO
1414
Ị
ỊĐ NH NGHĨA NHÃN BÊN TRONG MACRO
Đ NH NGHĨA NHÃN BÊN TRONG MACRO
Ể TRONG MACRO CÓ TH CÓ NHÃN.
Ọ Ề Ợ Ạ G I MACRO NHI U L N Ầ NHI U NHÃN Đ
Ề Ư C T O RA
Ả Ả Ề Ế Ề Ể LÀM SAO GI I QUY T V N Đ NH Y ĐI U KHI N?
Ấ
Ả Ằ Ấ Ỉ Ị
Ế
Ạ Ỡ Ứ Ấ
CÚ PHÁP : LOCAL LABEL_NAME
CHUONG 9 MACRO
CHUONG 9 MACRO
1515
Ợ Ọ Ề
ASSEMBLY GI I QUY T V N Đ NÀY B NG CH TH LOCAL
CƯ NG B C MASM T O RA 1 TÊN DUY NH T CHO M I M T
Ỗ Ộ
LABEL KHI MACRO ĐƯ C G I..
ầ
ầ
ị
ữ
đ nh nghĩa các thành ph n d
ộ ố
ệ
ị
ủ
M t s Macro yêu c u user
li u và các nhãn bên trong
đ nh nghĩa c a Macro.
ế ử ụ
ầ
ầ ữ ệ
ị
ố
ỗ ầ ử ụ các tên gi ng nhau l p l
ỗ
ế
ộ
ơn 1 l n trong cùng m t
ề
N u s d ng Macro này nhi u h
ặ
chương trình, trình ASM đ nh nghĩa thành ph n d li u ho c
ặ ạ
nhãn cho m i l n s d ng
i
khi n cho ASM báo l
i.
ả
ợ ạ
ả
ỉ
Đ ể đ m b o tên nhãn ch
ị
ỉ đư c t o ra 1 l n, ta dùng ch th
ầ
ể
LOCAL ngay sau phát bi u Macro
ị
ấ
ế ế
ạ
ố
ữ ố ế
ệ
ề
ể
ử ụ
ể
t
đ trong CT chính ta không s d ng
ớ
ế
ạ
CHUONG 9 MACRO
CHUONG 9 MACRO
1616
ẽ
ế đư c ợ đ nh nghĩa là LOCAL nó s
Khi ASM th y 1 bi n
ằ
thay th bi n này b ng 1 ký hi u có d ng ??n, trong
đó n
là 1 s có 4 ch s . N u có nhi u nhãn có th là ??0000, ??
0001, ??0002 ...
ề
ế đi u này
ầ
Ta c n bi
các bi n hay nhãn
đư i cùng 1 d ng.
ụ
ụ
ỉ
ỉ
ị
ị
ọ
ọ
Thí d minh h a ch th Local
Thí d minh h a ch th Local
ự
ệ
ầ ố
ự
ụ xu tấ count l n s ký t
Xây d ng Macro REPEAT có nhi m v
char ra màn hình.
REPEAT MACRO CHAR, COUNT
Ẽ
Ơ CH Ế
LOCAL L1
MOV CX, COUNT
Ả Ử Ọ
GI S G I :
L1: MOV AH,2
REPEAT ‘A’, 10
Ỉ
Ị
ASM S DÙNG C
Ố
Ừ
ĐÁNH S CÁC NHÃN (T
Ể
Ế
0000H Đ N FFFFH) Đ
Ấ
ĐÁNH D U CÁC NHÃN CÓ
CH Đ NH LOCAL.
MOV DL, CHAR
REPEAT ‘*’, 20
INT 21H
LOOP L1
ENDM
Ợ Ị
S ĐẼ Ư C D CH RA
CHUONG 9 MACRO
CHUONG 9 MACRO
1717
ụ
ụ
ỉ
ỉ
ị
ọ
ọ
ị
Thí d minh h a ch th
Thí d minh h a ch th
Local
Local
MOV CX, 10
??0000 : MOV AH,2
MOV DL, ‘A’
INT 21H
G
0
LOOP ??0000
Ử
S
Ả
0
G I
A
MOV CX, 20
E
P
E
I :
Ọ
T ‘ A ’, 1
T ‘ * ’, 2
R
A
E
P
??0001 : MOV AH,2
E
R
MOV DL, ‘*’
INT 21H
LOOP ??0001
CHUONG 9 MACRO
CHUONG 9 MACRO
1818
ụ
ụ
ừ
t 1 macro
l n h
vào
ọ
Thí d minh h a
ọ
Thí d minh h a
ừ ớ ơn trong 2 t
đưa t
ế
Vi
AX
GETMAX MACRO WORD1, WORD2
LOCAL EXIT
Ả Ử
MOV AX, WORD1
Ế GI S FIRST,SECOND, THIRD LÀ
CÁC BI N WORD.
CMP AX, WORD2
Ư C Ợ
JG EXIT
Ự
Ở Ộ S THAM CHI U MACRO Đ
M R NG NH Ế
Ư SAU :
MOV AX, FIRST
MOV AX, WORD2
CMP AX, SECOND
EXIT :
JG ??0000
ENDM
MOV AX, SECOND
CHUONG 9 MACRO
CHUONG 9 MACRO
1919
??0000:
ụ
ụ
ọ
Thí d minh h a
ọ
Thí d minh h a
ế
Vi
t 1 macro
đưa t
ừ ớ ơn trong 2 vào AX
l n h
Ờ Ọ
Ế
L I G I MACRO TI P THEO :
Ế Ự
GETMAX SECOND, THIRD
Ế
Ế Ị
Ở Ộ
Ợ
ĐƯ C M R NG NH
Ư SAU :
MOV AX, SECOND
Ậ
CMP AX, THIRD
JG ??0001
??0001 :
CHUONG 9 MACRO
CHUONG 9 MACRO
2020
Ế
S THAM CHI U LIÊN TI P
MACRO NÀY HAY Đ N MACRO
KHÁC KHI N TRÌNH BIÊN D CH
CHÈN CÁC NHÃN ??0002, ??0003 VÀ
ƯƠNG
Ư V Y TRONG CH
C NHỨ
TRÌNH CÁC NHÃN NÀY LÀ DUY
NH T. Ấ
Ệ
THTHƯƯ VI N MACRO
Ệ VI N MACRO
Ể Ặ Ở FILE
Ể Ạ Ệ CÁC MACRO MÀ CHƯƠNG TRÌNH THAM CHI U CÓ TH Đ T
RIÊNG TA CÓ TH T O 1 FILE TH Ế
Ư VI N CÁC MACRO.
Ạ Ả Ể DÙNG 1 EDITOR Đ SO N TH O MACRO
Ữ LƯU TR TÊN FILE MACRO.LIB
Ế Ế Ỉ ị KHI C N THAM CHI U Đ N MACRO TA DÙNG CH TH INCLUDE
Ầ
TÊN FILE THƯ VI NỆ
Ộ Ủ Ạ
CHUONG 9 MACRO
CHUONG 9 MACRO
2121
Ệ Ọ
Ụ
M T CÔNG D NG QUAN TR NG C A MACRO LÀ T O RA
Ớ
CÁC L NH M I.
Ữ
Ữ
Ờ
Ờ
Ị
Ị
Ủ
Ủ
SO SÁNH GI A MACRO & TH
SO SÁNH GI A MACRO & TH
T CỤT CỤ
Ị
Ị
TH I GIAN BIÊN D CH.
TH I GIAN BIÊN D CH.
Ờ
Ố
Ờ
Ố
MACRO ÍT T N TH I GIAN BIÊN D CH
MACRO ÍT T N TH I GIAN BIÊN D CH
HHƠƠN PROCEDURE
N PROCEDURE
Ự
Ự
Ờ
Ờ
Ệ
Ệ
Ờ
Ờ
Ố
Ố
Ạ
Ạ
Ố Ộ
Ố Ộ
Ợ
Ợ
ƠƠN N
TH I GIAN TH C HI N : NHANH H
TH I GIAN TH C HI N : NHANH H
PROCEDURE VÌ KHÔNG T N TH I GIAN
PROCEDURE VÌ KHÔNG T N TH I GIAN
Ụ
Ụ
KHÔI PH C TR NG THÁI THÔNG TIN KHI
KHÔI PH C TR NG THÁI THÔNG TIN KHI
Ọ T C Đ NHANH H
ĐĐƯƯ C G I
ỌC G I
T C Đ NHANH H
ƠƠN. N.
Ớ
KÍCH THƯƯ C : KÍCH TH
ỚC : KÍCH TH
KÍCH TH
Ớ
ƯƯ C CT DÀI
ỚC CT DÀI
HHƠƠN N
CHUONG 9 MACRO
CHUONG 9 MACRO
2222
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
Ứ
Ứ
Ể
Ể
REP :
REP :
......
ENDM
ENDM
Ố Ệ
Ố Ệ
Ụ
Ụ
Ặ Ạ
Ặ Ạ
Ể
Ể
Ứ
Ứ
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
Ớ Ố Ầ
Ớ Ố Ầ
V I S L N LÀ
V I S L N LÀ
EX : MSHL MACRO OPER, BITS Ọ G I MSHL BX, 3
REPT BITS Ế Ằ Ợ S ĐẼ Ư C THAY TH B NG :
SHL DEST, 1 SHL BX, 1
ENDM SHL BX, 1
CHUONG 9 MACRO
CHUONG 9 MACRO
2323
ENDM SHL BX, 1
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
Ặ
Ặ Ọ
Ọ Ố
Ố Ị
Ị
IRP
, :
IRP , :
......
ENDMENDM
Ố Ệ
Ố Ệ
Ố Ị
Ố Ị
Ặ
Ặ
Ặ Ạ Ẽ
Ặ Ạ Ẽ
Ị
Ị
Ợ Ấ
Ợ Ấ
Ẽ Ầ
Ẽ Ầ
Ế
Ế
Ị
Ị
Ụ
Ụ
TÁC D NG :
TÁC D NG :
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
Ị
Ặ Ạ
Ị
Ặ Ạ
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
Ố Ầ
Ố Ầ
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
M I L N L P L I S THAY B NG 1 TR TRONG
Ố Ằ
Ỗ Ầ
Ố Ằ
Ỗ Ầ
M I L N L P L I S THAY B NG 1 TR TRONG
ƯƯ T L Y H T CÁC TR TRONG DANH
T L Y H T CÁC TR TRONG DANH
DANH SÁCH VÀ S L N L
DANH SÁCH VÀ S L N L
SÁCH.
SÁCH.
EX : PROCTABLE LABEL WORD
IRP PROCNAME,
DW PROCNAME
CHUONG 9 MACRO
CHUONG 9 MACRO
2424
ENDM
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
ƠƠN LÀ
N LÀ
Ờ
TUY NHIÊN CÁCH KHAI BÁO NÀY RƯƯ M RÀ H
ỜM RÀ H
TUY NHIÊN CÁCH KHAI BÁO NÀY R
DÙNG :
DÙNG :
PROCTABLE DW MOVUP,
PROCTABLE DW MOVUP,
MOVDOWN,MOVLEFT,MOVRIGHT
MOVDOWN,MOVLEFT,MOVRIGHT
Ệ Ử Ụ
Ặ
Ỏ
Ả
Ả
Ề
Ề
Ệ
VI C S D NG CÁC MACRO L P VÒNG NÀY CHO CÓ HI U
Ệ
QU LÀ ĐI U KHÓ, ĐÒI H I PH I CÓ NHI U KINH NGHI 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 t n USCLN nh sau :
WHILE N <> 0 DO
M = M MOD N
H n v M và N
END_WHILE
CHUONG 9 MACRO
CHUONG 9 MACRO
2626
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)
ế Bài 3 :Vi t macro chuyen tu chuoi thanh so chua trong ax
; in : DI =offset chuoi
; out : AX =so da doi
ứ ế t MACRO xu t s hecxa ch a trong AL ra màn hình *
ứ ố ầ ấ ấ ố
Bài 4 : Vi
; INPUT : AL ch a s c n xu t; OUTPUT: nothing
ứ ạ ế ố t Macro in s hecxa ch a trong BL ra d ng binary
ứ ố ầ
CHUONG 9 MACRO
CHUONG 9 MACRO
2727
Bài 5 : Vi
;Input: BL ch a s c n in
;Output: Nothing
Có thể bạn quan tâm
Tài liêu mới
MACRO_NAME MACRO MACRO_NAME STATEMENTS STATEMENTS ENDMENDM Ọ
Ố Ự Ố Ự
ỌG I MACRO :
G I MACRO :
[, ...]
MACRO_NAME [ , ...]
MACRO_NAME
Ố Ấ Ị Ứ Ụ Ỉ
Ọ Ố Ấ Ị
CHUONG 9 MACRO
CHUONG 9 MACRO
77
THÔNG S HÌNH TH C CH CÓ TÁC D NG ĐÁNH D U V TRÍ
Ủ
C A THÔNG S TRONG MACRO. QUAN TR NG NH T LÀ V TRÍ
CÁC THÔNG S .Ố
Ề
Ề
Ố
Ố
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
CHUONG 9 MACRO
88
Ế
Ế
Ế
Ế
SWAP MACRO BI N1, BI N2
SWAP MACRO BI N1, BI N2
MOV AX, BIEN1
MOV AX, BIEN1
XCHG AX, BIEN2
XCHG AX, BIEN2
MOV BIEN1, AX
MOV BIEN1, AX
ENDMENDM
Ọ
ỌG I : SWAP TRI1, TRI2
G I : SWAP TRI1, TRI2
CHUONG 9 MACRO
CHUONG 9 MACRO
99
Ố Ủ
Ố Ủ
Ổ
Ổ
TRAO Đ I THAM S C A MACRO
TRAO Đ I THAM S C A MACRO
Ộ
Ố
Ặ
Ể
Ố
M T MACRO CÓ TH CÓ THÔNG S HO C KHÔNG CÓ THÔNG S .
MACRO CÓ THÔNG SỐ
Ử Ụ S D 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
CHUONG 9 MACRO
1010
...
Ề Ố 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
CHUONG 9 MACRO
CHUONG 9 MACRO
1111
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
……..
Ụ Ề
Ụ Ề
THÍ D V MACRO
THÍ D V 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
CHUONG 9 MACRO
CHUONG 9 MACRO
1212
Ọ G I : DISPLAY CHUOI
Ố Ủ
Ố Ủ
Ổ
Ổ
TRAO Đ I THAM S C A MACRO
TRAO Đ I THAM S C A MACRO
Ị
Ị
MACRO LOCATE : Đ NH V CURSOR MÀN HÌNH
Ử Ụ S D NG MACRO
Ử Ụ
Ạ
TA CÓ CÁC D NG S D NG
SAU :
LOCATE 10,20
LOCATE ROW, COL
LOCATE CH, CL
Ẽ Ụ
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
Ử Ụ
CHUONG 9 MACRO
CHUONG 9 MACRO
1313
CHÚ Ý : KHÔNG DÙNG CÁC
THANH GHI AH,AL,BH,BL VÌ
Ộ Ớ
S Đ NG Đ V I CÁC THANH
GHI ĐÃ S D NG TRONG
MACRO
Ồ
Ồ
MACRO L NG NHAU
MACRO L NG NHAU
Ự
Ả
Ự
Ể
Ộ
ƠN GI N Đ XÂY D NG MACRO LÀ XÂY D NG 1
Ớ Ừ
M T CÁCH Đ
MACRO M I T MACRO ĐÃ CÓ.
Ị
Ị
Ổ Ạ
Ổ Ạ
Ạ Ộ
Ạ Ộ
Ể
Ể
EX : HI N TH 1 CHU I T I 1 TO Đ CHO
EX : HI N TH 1 CHU I T I 1 TO Đ CHO
TRTRƯƯ C ỚC Ớ
DISPLAY_AT MACRO ROW, COL, STRING
ọ
ị
LOCATE ROW, COL ;G i macro
ị
đ nh v cursor
ọ
ấ
DISPLAY STRING ; G i Macro xu t string
ENDM
Ộ
Ế
Ế
Ọ
Ữ
Ậ
Ệ
M T MACRO CÓ TH THAM CHI U Đ N CHÍNH NÓ,
NH NG MACRO NH
Ể
Ư V Y G I LÀ MACRO Đ QUI.
CHUONG 9 MACRO
CHUONG 9 MACRO
1414
Ị
ỊĐ NH NGHĨA NHÃN BÊN TRONG MACRO
Đ NH NGHĨA NHÃN BÊN TRONG MACRO
Ể TRONG MACRO CÓ TH CÓ NHÃN.
Ọ Ề Ợ Ạ G I MACRO NHI U L N Ầ NHI U NHÃN Đ
Ề Ư C T O RA
Ả Ả Ề Ế Ề Ể LÀM SAO GI I QUY T V N Đ NH Y ĐI U KHI N?
Ấ
Ả Ằ Ấ Ỉ Ị
Ế
Ạ Ỡ Ứ Ấ
CÚ PHÁP : LOCAL LABEL_NAME
CHUONG 9 MACRO
CHUONG 9 MACRO
1515
Ợ Ọ Ề
ASSEMBLY GI I QUY T V N Đ NÀY B NG CH TH LOCAL
CƯ NG B C MASM T O RA 1 TÊN DUY NH T CHO M I M T
Ỗ Ộ
LABEL KHI MACRO ĐƯ C G I..
ầ
ầ
ị
ữ
đ nh nghĩa các thành ph n d
ộ ố
ệ
ị
ủ
M t s Macro yêu c u user
li u và các nhãn bên trong
đ nh nghĩa c a Macro.
ế ử ụ
ầ
ầ ữ ệ
ị
ố
ỗ ầ ử ụ các tên gi ng nhau l p l
ỗ
ế
ộ
ơn 1 l n trong cùng m t
ề
N u s d ng Macro này nhi u h
ặ
chương trình, trình ASM đ nh nghĩa thành ph n d li u ho c
ặ ạ
nhãn cho m i l n s d ng
i
khi n cho ASM báo l
i.
ả
ợ ạ
ả
ỉ
Đ ể đ m b o tên nhãn ch
ị
ỉ đư c t o ra 1 l n, ta dùng ch th
ầ
ể
LOCAL ngay sau phát bi u Macro
ị
ấ
ế ế
ạ
ố
ữ ố ế
ệ
ề
ể
ử ụ
ể
t
đ trong CT chính ta không s d ng
ớ
ế
ạ
CHUONG 9 MACRO
CHUONG 9 MACRO
1616
ẽ
ế đư c ợ đ nh nghĩa là LOCAL nó s
Khi ASM th y 1 bi n
ằ
thay th bi n này b ng 1 ký hi u có d ng ??n, trong
đó n
là 1 s có 4 ch s . N u có nhi u nhãn có th là ??0000, ??
0001, ??0002 ...
ề
ế đi u này
ầ
Ta c n bi
các bi n hay nhãn
đư i cùng 1 d ng.
ụ
ụ
ỉ
ỉ
ị
ị
ọ
ọ
Thí d minh h a ch th Local
Thí d minh h a ch th Local
ự
ệ
ầ ố
ự
ụ xu tấ count l n s ký t
Xây d ng Macro REPEAT có nhi m v
char ra màn hình.
REPEAT MACRO CHAR, COUNT
Ẽ
Ơ CH Ế
LOCAL L1
MOV CX, COUNT
Ả Ử Ọ
GI S G I :
L1: MOV AH,2
REPEAT ‘A’, 10
Ỉ
Ị
ASM S DÙNG C
Ố
Ừ
ĐÁNH S CÁC NHÃN (T
Ể
Ế
0000H Đ N FFFFH) Đ
Ấ
ĐÁNH D U CÁC NHÃN CÓ
CH Đ NH LOCAL.
MOV DL, CHAR
REPEAT ‘*’, 20
INT 21H
LOOP L1
ENDM
Ợ Ị
S ĐẼ Ư C D CH RA
CHUONG 9 MACRO
CHUONG 9 MACRO
1717
ụ
ụ
ỉ
ỉ
ị
ọ
ọ
ị
Thí d minh h a ch th
Thí d minh h a ch th
Local
Local
MOV CX, 10
??0000 : MOV AH,2
MOV DL, ‘A’
INT 21H
G
0
LOOP ??0000
Ử
S
Ả
0
G I
A
MOV CX, 20
E
P
E
I :
Ọ
T ‘ A ’, 1
T ‘ * ’, 2
R
A
E
P
??0001 : MOV AH,2
E
R
MOV DL, ‘*’
INT 21H
LOOP ??0001
CHUONG 9 MACRO
CHUONG 9 MACRO
1818
ụ
ụ
ừ
t 1 macro
l n h
vào
ọ
Thí d minh h a
ọ
Thí d minh h a
ừ ớ ơn trong 2 t
đưa t
ế
Vi
AX
GETMAX MACRO WORD1, WORD2
LOCAL EXIT
Ả Ử
MOV AX, WORD1
Ế GI S FIRST,SECOND, THIRD LÀ
CÁC BI N WORD.
CMP AX, WORD2
Ư C Ợ
JG EXIT
Ự
Ở Ộ S THAM CHI U MACRO Đ
M R NG NH Ế
Ư SAU :
MOV AX, FIRST
MOV AX, WORD2
CMP AX, SECOND
EXIT :
JG ??0000
ENDM
MOV AX, SECOND
CHUONG 9 MACRO
CHUONG 9 MACRO
1919
??0000:
ụ
ụ
ọ
Thí d minh h a
ọ
Thí d minh h a
ế
Vi
t 1 macro
đưa t
ừ ớ ơn trong 2 vào AX
l n h
Ờ Ọ
Ế
L I G I MACRO TI P THEO :
Ế Ự
GETMAX SECOND, THIRD
Ế
Ế Ị
Ở Ộ
Ợ
ĐƯ C M R NG NH
Ư SAU :
MOV AX, SECOND
Ậ
CMP AX, THIRD
JG ??0001
??0001 :
CHUONG 9 MACRO
CHUONG 9 MACRO
2020
Ế
S THAM CHI U LIÊN TI P
MACRO NÀY HAY Đ N MACRO
KHÁC KHI N TRÌNH BIÊN D CH
CHÈN CÁC NHÃN ??0002, ??0003 VÀ
ƯƠNG
Ư V Y TRONG CH
C NHỨ
TRÌNH CÁC NHÃN NÀY LÀ DUY
NH T. Ấ
Ệ
THTHƯƯ VI N MACRO
Ệ VI N MACRO
Ể Ặ Ở FILE
Ể Ạ Ệ CÁC MACRO MÀ CHƯƠNG TRÌNH THAM CHI U CÓ TH Đ T
RIÊNG TA CÓ TH T O 1 FILE TH Ế
Ư VI N CÁC MACRO.
Ạ Ả Ể DÙNG 1 EDITOR Đ SO N TH O MACRO
Ữ LƯU TR TÊN FILE MACRO.LIB
Ế Ế Ỉ ị KHI C N THAM CHI U Đ N MACRO TA DÙNG CH TH INCLUDE
Ầ
TÊN FILE THƯ VI NỆ
Ộ Ủ Ạ
CHUONG 9 MACRO
CHUONG 9 MACRO
2121
Ệ Ọ
Ụ
M T CÔNG D NG QUAN TR NG C A MACRO LÀ T O RA
Ớ
CÁC L NH M I.
Ữ
Ữ
Ờ
Ờ
Ị
Ị
Ủ
Ủ
SO SÁNH GI A MACRO & TH
SO SÁNH GI A MACRO & TH
T CỤT CỤ
Ị
Ị
TH I GIAN BIÊN D CH.
TH I GIAN BIÊN D CH.
Ờ
Ố
Ờ
Ố
MACRO ÍT T N TH I GIAN BIÊN D CH
MACRO ÍT T N TH I GIAN BIÊN D CH
HHƠƠN PROCEDURE
N PROCEDURE
Ự
Ự
Ờ
Ờ
Ệ
Ệ
Ờ
Ờ
Ố
Ố
Ạ
Ạ
Ố Ộ
Ố Ộ
Ợ
Ợ
ƠƠN N
TH I GIAN TH C HI N : NHANH H
TH I GIAN TH C HI N : NHANH H
PROCEDURE VÌ KHÔNG T N TH I GIAN
PROCEDURE VÌ KHÔNG T N TH I GIAN
Ụ
Ụ
KHÔI PH C TR NG THÁI THÔNG TIN KHI
KHÔI PH C TR NG THÁI THÔNG TIN KHI
Ọ T C Đ NHANH H
ĐĐƯƯ C G I
ỌC G I
T C Đ NHANH H
ƠƠN. N.
Ớ
KÍCH THƯƯ C : KÍCH TH
ỚC : KÍCH TH
KÍCH TH
Ớ
ƯƯ C CT DÀI
ỚC CT DÀI
HHƠƠN N
CHUONG 9 MACRO
CHUONG 9 MACRO
2222
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
Ứ
Ứ
Ể
Ể
REP :
REP :
......
ENDM
ENDM
Ố Ệ
Ố Ệ
Ụ
Ụ
Ặ Ạ
Ặ Ạ
Ể
Ể
Ứ
Ứ
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
Ớ Ố Ầ
Ớ Ố Ầ
V I S L N LÀ
V I S L N LÀ
EX : MSHL MACRO OPER, BITS Ọ G I MSHL BX, 3
REPT BITS Ế Ằ Ợ S ĐẼ Ư C THAY TH B NG :
SHL DEST, 1 SHL BX, 1
ENDM SHL BX, 1
CHUONG 9 MACRO
CHUONG 9 MACRO
2323
ENDM SHL BX, 1
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
Ặ
Ặ Ọ
Ọ Ố
Ố Ị
Ị
IRP
, :
IRP , :
......
ENDMENDM
Ố Ệ
Ố Ệ
Ố Ị
Ố Ị
Ặ
Ặ
Ặ Ạ Ẽ
Ặ Ạ Ẽ
Ị
Ị
Ợ Ấ
Ợ Ấ
Ẽ Ầ
Ẽ Ầ
Ế
Ế
Ị
Ị
Ụ
Ụ
TÁC D NG :
TÁC D NG :
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
Ị
Ặ Ạ
Ị
Ặ Ạ
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
Ố Ầ
Ố Ầ
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
M I L N L P L I S THAY B NG 1 TR TRONG
Ố Ằ
Ỗ Ầ
Ố Ằ
Ỗ Ầ
M I L N L P L I S THAY B NG 1 TR TRONG
ƯƯ T L Y H T CÁC TR TRONG DANH
T L Y H T CÁC TR TRONG DANH
DANH SÁCH VÀ S L N L
DANH SÁCH VÀ S L N L
SÁCH.
SÁCH.
EX : PROCTABLE LABEL WORD
IRP PROCNAME,
DW PROCNAME
CHUONG 9 MACRO
CHUONG 9 MACRO
2424
ENDM
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
ƠƠN LÀ
N LÀ
Ờ
TUY NHIÊN CÁCH KHAI BÁO NÀY RƯƯ M RÀ H
ỜM RÀ H
TUY NHIÊN CÁCH KHAI BÁO NÀY R
DÙNG :
DÙNG :
PROCTABLE DW MOVUP,
PROCTABLE DW MOVUP,
MOVDOWN,MOVLEFT,MOVRIGHT
MOVDOWN,MOVLEFT,MOVRIGHT
Ệ Ử Ụ
Ặ
Ỏ
Ả
Ả
Ề
Ề
Ệ
VI C S D NG CÁC MACRO L P VÒNG NÀY CHO CÓ HI U
Ệ
QU LÀ ĐI U KHÓ, ĐÒI H I PH I CÓ NHI U KINH NGHI 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 t n USCLN nh sau :
WHILE N <> 0 DO
M = M MOD N
H n v M và N
END_WHILE
CHUONG 9 MACRO
CHUONG 9 MACRO
2626
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)
ế Bài 3 :Vi t macro chuyen tu chuoi thanh so chua trong ax
; in : DI =offset chuoi
; out : AX =so da doi
ứ ế t MACRO xu t s hecxa ch a trong AL ra màn hình *
ứ ố ầ ấ ấ ố
Bài 4 : Vi
; INPUT : AL ch a s c n xu t; OUTPUT: nothing
ứ ạ ế ố t Macro in s hecxa ch a trong BL ra d ng binary
ứ ố ầ
CHUONG 9 MACRO
CHUONG 9 MACRO
2727
Bài 5 : Vi
;Input: BL ch a s c n in
;Output: Nothing
Có thể bạn quan tâm
Tài liêu mới
Ố Ấ Ị Ứ Ụ Ỉ
Ọ Ố Ấ Ị
CHUONG 9 MACRO CHUONG 9 MACRO
77
THÔNG S HÌNH TH C CH CÓ TÁC D NG ĐÁNH D U V TRÍ Ủ C A THÔNG S TRONG MACRO. QUAN TR NG NH T LÀ V TRÍ CÁC THÔNG S .Ố
Ề Ề
Ố Ố
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 CHUONG 9 MACRO
88
Ế Ế
Ế Ế
SWAP MACRO BI N1, BI N2 SWAP MACRO BI N1, BI N2 MOV AX, BIEN1 MOV AX, BIEN1 XCHG AX, BIEN2 XCHG AX, BIEN2 MOV BIEN1, AX MOV BIEN1, AX ENDMENDM Ọ ỌG I : SWAP TRI1, TRI2 G I : SWAP TRI1, TRI2
CHUONG 9 MACRO CHUONG 9 MACRO
99
Ố Ủ Ố Ủ
Ổ Ổ
TRAO Đ I THAM S C A MACRO TRAO Đ I THAM S C A MACRO
Ộ
Ố
Ặ
Ể
Ố M T MACRO CÓ TH CÓ THÔNG S HO C KHÔNG CÓ THÔNG S .
MACRO CÓ THÔNG SỐ
Ử Ụ S D 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 CHUONG 9 MACRO
1010
...
Ề Ố 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
CHUONG 9 MACRO CHUONG 9 MACRO
1111
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 ……..
Ụ Ề Ụ Ề
THÍ D V MACRO THÍ D V 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
CHUONG 9 MACRO CHUONG 9 MACRO
1212
Ọ G I : DISPLAY CHUOI
Ố Ủ Ố Ủ
Ổ Ổ
TRAO Đ I THAM S C A MACRO TRAO Đ I THAM S C A MACRO
Ị
Ị
MACRO LOCATE : Đ NH V CURSOR MÀN HÌNH
Ử Ụ S D NG MACRO
Ử Ụ
Ạ TA CÓ CÁC D NG S D NG SAU :
LOCATE 10,20
LOCATE ROW, COL
LOCATE CH, CL
Ẽ Ụ
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
Ử Ụ
CHUONG 9 MACRO CHUONG 9 MACRO
1313
CHÚ Ý : KHÔNG DÙNG CÁC THANH GHI AH,AL,BH,BL VÌ Ộ Ớ S Đ NG Đ V I CÁC THANH GHI ĐÃ S D NG TRONG MACRO
Ồ Ồ MACRO L NG NHAU MACRO L NG NHAU Ự
Ả
Ự
Ể
Ộ
ƠN GI N Đ XÂY D NG MACRO LÀ XÂY D NG 1
Ớ Ừ
M T CÁCH Đ MACRO M I T MACRO ĐÃ CÓ.
Ị Ị
Ổ Ạ Ổ Ạ
Ạ Ộ Ạ Ộ
Ể Ể EX : HI N TH 1 CHU I T I 1 TO Đ CHO EX : HI N TH 1 CHU I T I 1 TO Đ CHO TRTRƯƯ C ỚC Ớ DISPLAY_AT MACRO ROW, COL, STRING
ọ
ị
LOCATE ROW, COL ;G i macro
ị đ nh v cursor
ọ
ấ
DISPLAY STRING ; G i Macro xu t string
ENDM
Ộ
Ế
Ế
Ọ
Ữ
Ậ
Ệ
M T MACRO CÓ TH THAM CHI U Đ N CHÍNH NÓ, NH NG MACRO NH
Ể Ư V Y G I LÀ MACRO Đ QUI.
CHUONG 9 MACRO CHUONG 9 MACRO
1414
Ị
ỊĐ NH NGHĨA NHÃN BÊN TRONG MACRO Đ NH NGHĨA NHÃN BÊN TRONG MACRO
Ể TRONG MACRO CÓ TH CÓ NHÃN.
Ọ Ề Ợ Ạ G I MACRO NHI U L N Ầ NHI U NHÃN Đ Ề Ư C T O RA
Ả Ả Ề Ế Ề Ể LÀM SAO GI I QUY T V N Đ NH Y ĐI U KHI N? Ấ
Ả Ằ Ấ Ỉ Ị
Ế Ạ Ỡ Ứ Ấ
CÚ PHÁP : LOCAL LABEL_NAME
CHUONG 9 MACRO CHUONG 9 MACRO
1515
Ợ Ọ Ề ASSEMBLY GI I QUY T V N Đ NÀY B NG CH TH LOCAL CƯ NG B C MASM T O RA 1 TÊN DUY NH T CHO M I M T Ỗ Ộ LABEL KHI MACRO ĐƯ C G I..
ầ
ầ
ị
ữ đ nh nghĩa các thành ph n d
ộ ố ệ
ị
ủ
M t s Macro yêu c u user li u và các nhãn bên trong
đ nh nghĩa c a Macro.
ế ử ụ
ầ
ầ ữ ệ
ị
ố
ỗ ầ ử ụ các tên gi ng nhau l p l
ỗ
ế
ộ ơn 1 l n trong cùng m t ề N u s d ng Macro này nhi u h ặ chương trình, trình ASM đ nh nghĩa thành ph n d li u ho c ặ ạ nhãn cho m i l n s d ng i khi n cho ASM báo l
i.
ả
ợ ạ
ả
ỉ
Đ ể đ m b o tên nhãn ch ị ỉ đư c t o ra 1 l n, ta dùng ch th ầ ể LOCAL ngay sau phát bi u Macro
ị
ấ ế ế
ạ
ố
ữ ố ế
ệ ề
ể
ử ụ
ể
t
đ trong CT chính ta không s d ng ớ
ế
ạ
CHUONG 9 MACRO CHUONG 9 MACRO
1616
ẽ ế đư c ợ đ nh nghĩa là LOCAL nó s Khi ASM th y 1 bi n ằ thay th bi n này b ng 1 ký hi u có d ng ??n, trong đó n là 1 s có 4 ch s . N u có nhi u nhãn có th là ??0000, ?? 0001, ??0002 ... ề ế đi u này ầ Ta c n bi các bi n hay nhãn
đư i cùng 1 d ng.
ụ ụ
ỉ ỉ
ị ị
ọ ọ Thí d minh h a ch th Local Thí d minh h a ch th Local
ự
ệ
ầ ố
ự
ụ xu tấ count l n s ký t
Xây d ng Macro REPEAT có nhi m v char ra màn hình.
REPEAT MACRO CHAR, COUNT
Ẽ
Ơ CH Ế
LOCAL L1
MOV CX, COUNT
Ả Ử Ọ GI S G I :
L1: MOV AH,2
REPEAT ‘A’, 10
Ỉ
Ị
ASM S DÙNG C Ố Ừ ĐÁNH S CÁC NHÃN (T Ể Ế 0000H Đ N FFFFH) Đ Ấ ĐÁNH D U CÁC NHÃN CÓ CH Đ NH LOCAL.
MOV DL, CHAR
REPEAT ‘*’, 20
INT 21H
LOOP L1
ENDM
Ợ Ị S ĐẼ Ư C D CH RA
CHUONG 9 MACRO CHUONG 9 MACRO
1717
ụ ụ
ỉ ỉ
ị ọ ọ ị Thí d minh h a ch th Thí d minh h a ch th Local Local
MOV CX, 10
??0000 : MOV AH,2
MOV DL, ‘A’
INT 21H
G
0
LOOP ??0000
Ử
S
Ả
0
G I
A
MOV CX, 20
E
P
E
I : Ọ T ‘ A ’, 1 T ‘ * ’, 2
R
A
E
P
??0001 : MOV AH,2
E
R
MOV DL, ‘*’
INT 21H
LOOP ??0001
CHUONG 9 MACRO CHUONG 9 MACRO
1818
ụ ụ
ừ
t 1 macro
l n h
vào
ọ Thí d minh h a ọ Thí d minh h a ừ ớ ơn trong 2 t đưa t ế Vi AX
GETMAX MACRO WORD1, WORD2
LOCAL EXIT
Ả Ử
MOV AX, WORD1
Ế GI S FIRST,SECOND, THIRD LÀ CÁC BI N WORD.
CMP AX, WORD2
Ư C Ợ
JG EXIT
Ự Ở Ộ S THAM CHI U MACRO Đ M R NG NH Ế Ư SAU :
MOV AX, FIRST
MOV AX, WORD2
CMP AX, SECOND
EXIT :
JG ??0000
ENDM
MOV AX, SECOND
CHUONG 9 MACRO CHUONG 9 MACRO
1919
??0000:
ụ ụ
ọ Thí d minh h a ọ Thí d minh h a
ế
Vi
t 1 macro
đưa t
ừ ớ ơn trong 2 vào AX
l n h
Ờ Ọ
Ế
L I G I MACRO TI P THEO :
Ế Ự
GETMAX SECOND, THIRD
Ế
Ế Ị
Ở Ộ
Ợ
ĐƯ C M R NG NH
Ư SAU :
MOV AX, SECOND
Ậ
CMP AX, THIRD
JG ??0001
??0001 :
CHUONG 9 MACRO CHUONG 9 MACRO
2020
Ế S THAM CHI U LIÊN TI P MACRO NÀY HAY Đ N MACRO KHÁC KHI N TRÌNH BIÊN D CH CHÈN CÁC NHÃN ??0002, ??0003 VÀ ƯƠNG Ư V Y TRONG CH C NHỨ TRÌNH CÁC NHÃN NÀY LÀ DUY NH T. Ấ
Ệ
THTHƯƯ VI N MACRO Ệ VI N MACRO
Ể Ặ Ở FILE
Ể Ạ Ệ CÁC MACRO MÀ CHƯƠNG TRÌNH THAM CHI U CÓ TH Đ T RIÊNG TA CÓ TH T O 1 FILE TH Ế Ư VI N CÁC MACRO.
Ạ Ả Ể DÙNG 1 EDITOR Đ SO N TH O MACRO
Ữ LƯU TR TÊN FILE MACRO.LIB
Ế Ế Ỉ ị KHI C N THAM CHI U Đ N MACRO TA DÙNG CH TH INCLUDE
Ầ TÊN FILE THƯ VI NỆ
Ộ Ủ Ạ
CHUONG 9 MACRO CHUONG 9 MACRO
2121
Ệ Ọ Ụ M T CÔNG D NG QUAN TR NG C A MACRO LÀ T O RA Ớ CÁC L NH M I.
Ữ Ữ
Ờ Ờ
Ị Ị
Ủ Ủ SO SÁNH GI A MACRO & TH SO SÁNH GI A MACRO & TH T CỤT CỤ Ị Ị TH I GIAN BIÊN D CH. TH I GIAN BIÊN D CH. Ờ Ố Ờ Ố MACRO ÍT T N TH I GIAN BIÊN D CH MACRO ÍT T N TH I GIAN BIÊN D CH HHƠƠN PROCEDURE N PROCEDURE
Ự Ự
Ờ Ờ
Ệ Ệ
Ờ Ờ
Ố Ố
Ạ Ạ Ố Ộ Ố Ộ
Ợ Ợ
ƠƠN N TH I GIAN TH C HI N : NHANH H TH I GIAN TH C HI N : NHANH H PROCEDURE VÌ KHÔNG T N TH I GIAN PROCEDURE VÌ KHÔNG T N TH I GIAN Ụ Ụ KHÔI PH C TR NG THÁI THÔNG TIN KHI KHÔI PH C TR NG THÁI THÔNG TIN KHI Ọ T C Đ NHANH H ĐĐƯƯ C G I ỌC G I T C Đ NHANH H
ƠƠN. N.
Ớ KÍCH THƯƯ C : KÍCH TH ỚC : KÍCH TH KÍCH TH
Ớ ƯƯ C CT DÀI ỚC CT DÀI
HHƠƠN N
CHUONG 9 MACRO CHUONG 9 MACRO
2222
Ệ Ệ
Ặ Ặ
CÁC L NH L P TRONG CÁC L NH L P TRONG MACRO MACRO
Ứ Ứ
Ể
Ể
REP :
REP :
......
ENDM
ENDM
Ố Ệ Ố Ệ
Ụ Ụ
Ặ Ạ Ặ Ạ Ể Ể
Ứ Ứ
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
TÁC D NG : L P L I CÁC KH I L NH TRONG MACRO
Ớ Ố Ầ
Ớ Ố Ầ
V I S L N LÀ
V I S L N LÀ
EX : MSHL MACRO OPER, BITS Ọ G I MSHL BX, 3
REPT BITS Ế Ằ Ợ S ĐẼ Ư C THAY TH B NG :
SHL DEST, 1 SHL BX, 1
ENDM SHL BX, 1
CHUONG 9 MACRO CHUONG 9 MACRO
2323
ENDM SHL BX, 1
Ệ Ệ
Ặ Ặ
CÁC L NH L P TRONG CÁC L NH L P TRONG MACRO MACRO
Ặ Ặ Ọ Ọ Ố Ố Ị Ị
IRP
Ố Ệ Ố Ệ
Ố Ị Ố Ị
Ặ Ặ
Ặ Ạ Ẽ Ặ Ạ Ẽ
Ị Ị
Ợ Ấ Ợ Ấ
Ẽ Ầ Ẽ Ầ
Ế Ế
Ị Ị
Ụ
Ụ
TÁC D NG :
TÁC D NG :
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
Ị
Ặ Ạ
Ị
Ặ Ạ
L P L I KH I L NH TÙY THEO DANH SÁCH TR .
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
Ố Ầ
Ố Ầ
S L N L P CHÍNH LÀ S TR TRONG DANH SÁCH
M I L N L P L I S THAY B NG 1 TR TRONG
Ố Ằ
Ỗ Ầ
Ố Ằ
Ỗ Ầ
M I L N L P L I S THAY B NG 1 TR TRONG
ƯƯ T L Y H T CÁC TR TRONG DANH
T L Y H T CÁC TR TRONG DANH
DANH SÁCH VÀ S L N L
DANH SÁCH VÀ S L N L
SÁCH.
SÁCH.
EX : PROCTABLE LABEL WORD
IRP PROCNAME,
DW PROCNAME
CHUONG 9 MACRO
CHUONG 9 MACRO
2424
ENDM
Ệ
Ệ
Ặ
Ặ
CÁC L NH L P TRONG
CÁC L NH L P TRONG
MACRO
MACRO
ƠƠN LÀ
N LÀ
Ờ
TUY NHIÊN CÁCH KHAI BÁO NÀY RƯƯ M RÀ H
ỜM RÀ H
TUY NHIÊN CÁCH KHAI BÁO NÀY R
DÙNG :
DÙNG :
PROCTABLE DW MOVUP,
PROCTABLE DW MOVUP,
MOVDOWN,MOVLEFT,MOVRIGHT
MOVDOWN,MOVLEFT,MOVRIGHT
Ệ Ử Ụ
Ặ
Ỏ
Ả
Ả
Ề
Ề
Ệ
VI C S D NG CÁC MACRO L P VÒNG NÀY CHO CÓ HI U
Ệ
QU LÀ ĐI U KHÓ, ĐÒI H I PH I CÓ NHI U KINH NGHI 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 t n USCLN nh sau :
WHILE N <> 0 DO
M = M MOD N
H n v M và N
END_WHILE
CHUONG 9 MACRO
CHUONG 9 MACRO
2626
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)
ế Bài 3 :Vi t macro chuyen tu chuoi thanh so chua trong ax
; in : DI =offset chuoi
; out : AX =so da doi
ứ ế t MACRO xu t s hecxa ch a trong AL ra màn hình *
ứ ố ầ ấ ấ ố
Bài 4 : Vi
; INPUT : AL ch a s c n xu t; OUTPUT: nothing
ứ ạ ế ố t Macro in s hecxa ch a trong BL ra d ng binary
ứ ố ầ
CHUONG 9 MACRO
CHUONG 9 MACRO
2727
Bài 5 : Vi
;Input: BL ch a s c n in
;Output: Nothing
Có thể bạn quan tâm
Tài liêu mới
EX : PROCTABLE LABEL WORD
IRP PROCNAME,
DW PROCNAME
CHUONG 9 MACRO CHUONG 9 MACRO
2424
ENDM
Ệ Ệ
Ặ Ặ
CÁC L NH L P TRONG CÁC L NH L P TRONG MACRO MACRO
ƠƠN LÀ N LÀ
Ờ TUY NHIÊN CÁCH KHAI BÁO NÀY RƯƯ M RÀ H ỜM RÀ H TUY NHIÊN CÁCH KHAI BÁO NÀY R DÙNG : DÙNG : PROCTABLE DW MOVUP, PROCTABLE DW MOVUP, MOVDOWN,MOVLEFT,MOVRIGHT MOVDOWN,MOVLEFT,MOVRIGHT
Ệ Ử Ụ
Ặ
Ỏ
Ả
Ả
Ề
Ề
Ệ
VI C S D NG CÁC MACRO L P VÒNG NÀY CHO CÓ HI U Ệ QU LÀ ĐI U KHÓ, ĐÒI H I PH I CÓ NHI U KINH NGHI 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 t n USCLN nh sau : WHILE N <> 0 DO M = M MOD N H n v M và N END_WHILE
CHUONG 9 MACRO CHUONG 9 MACRO
2626
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)
ế Bài 3 :Vi t macro chuyen tu chuoi thanh so chua trong ax
; in : DI =offset chuoi ; out : AX =so da doi
ứ ế t MACRO xu t s hecxa ch a trong AL ra màn hình *
ứ ố ầ ấ ấ ố Bài 4 : Vi ; INPUT : AL ch a s c n xu t; OUTPUT: nothing
ứ ạ ế ố t Macro in s hecxa ch a trong BL ra d ng binary
ứ ố ầ
CHUONG 9 MACRO CHUONG 9 MACRO
2727
Bài 5 : Vi ;Input: BL ch a s c n in ;Output: Nothing