Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
7,55 MB
Nội dung
om MACRO Si nh Vi en Zo ne C Định nghĩa Macro gọi Macro Vấn đề truyền thông số Macro Macro lồng Sử dụng Macro để gọi chương trình Các toán tử Macro Thư viện Macro So sánh việc dùng Macro với Procedure Một số Macro mẫu CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn om ĐỊNH NGHĨA MACRO Zo ne C Macro ký hiệu gán cho nhóm lệnh ASM – Macro tên thay cho nhóm lệnh nh Vi en Tại cần có Macro : Si Trong lập trình nhiều lúc ta cần phải viết lệnh na ná nhiều lần mà ta không muốn viết dạng hàm dùng hàm tốn thời gian thực thi, thay ta phải viết đầy đủ nhóm lệnh vào CT, ta cần viết Macro mà ta gán cho chuùng CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn LÀM QUEN VỚI MACRO om Khi ta có nhiều đoạn code giống nhau, dùng macro để thay thế, giống ta dùng define C Thí dụ thay đọan lệnh sau macro để in dấu xuống dòng ne C MOV DL,13 ; đầu dòng Zo MOV AH,2 nh Vi en INT 21H MOV AH,2 INT 21H Si MOV DL,10 ; xuống dòng CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn om Thay phải viết lại dịng lệnh trên, ta tạo macro có tên @Newline để thay đoạn code : C @NewLine Macro MOV DL,13 ne Sau đó, chỗ cần xuống dòng, ta cần gọi macro @NewLine MOV AH,2 INT 21H ENDM nh Vi en MOV AH,2 @NewLine Si MOV DL,10 Zo INT 21H CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn MACRO (tt) Si nh Vi en Zo ne C om Khi hợp dịch nội dung nhóm lệnh mà ta gán cho macro thay vào nơi có tên macro trước CT hợp dịch thành file OBJ Ex1 : nhiều ta phải viết lại nhiều lần đoạn lệnh xuất ký tự DL hình MOV AH, INT 21H Thay phải viết cặp lệnh cần xuất ký tự DL, ta viết Macro PUTCHAR sau : PUTCHAR MACRO MOV AH,2 INT 21H ENDM SinhVienZone.com CHUONG MACRO https://fb.com/sinhvienzonevn .C om MỞ RỘNG CỦA MACRO CÓ THỂ XEM TRONG FILE.LIST DIRECTIVE BIÊN DỊCH SAU SẼ QUYẾT ĐỊNH MỞ RỘNG MACRO NHƯ THẾ NÀO nh Vi en Zo ne SALL (SUPRESS ALL) PHẦN MỞ RỘNG MACRO KHÔNG ĐƯC IN SỬ DỤNG KHI MACRO LỚN HAY MACRO ĐƯC THAM CHIẾU NHIỀU LẦN TRONG CT .XALL CHỈ NHỮNG DÒNG MACRO TẠO MÃ NGUỒN MỚI ĐƯC IN RA.THÍ DỤ CÁC DÒNG CHÚ THÍCH ĐƯC BỎ QUA ĐÂY LÀ TUỲ CHỌN DEFAULT Si LALL (LIST ALL) TOÀN BỘ CÁC DÒNG TRONG MACRO ĐƯC IN RA TRỪ NHỮNG CHÚ THÍCH BẮT ĐẦU BẰNG DẤU ;; CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn CÚ PHÁP KHAI BÁO MACRO : om ĐỊNH NGHĨA MACRO nh Vi en Zo ne C MACRO_NAME MACRO [ ] STATEMENTS ENDM GỌI MACRO : MACRO_NAME [, ] Si 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Ố CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn MACRO TRUYỀN THAM SỐ Zo ne C om MOV AH,4CH INT 21H MAIN ENDP END MAIN Si nh Vi en MODEL SMALL 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 MACRO SinhVienZone.com https://fb.com/sinhvienzonevn Si nh Vi en Zo ne C om SWAP MACRO BIEÁN1, BIEÁN2 MOV AX, BIEN1 XCHG AX, BIEN2 MOV BIEN1, AX ENDM GOÏI : SWAP TRI1, TRI2 CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn TRAO ĐỔI THAM SỐ CỦA MACRO C om MỘT MACRO CÓ THỂ CÓ THÔNG SỐ HOẶC KHÔNG CÓ THÔNG SỐ MACRO CÓ THÔNG SỐ CODE nh Vi en PUTCHAR MACRO CHAR MOV AH, MOV DL, CHAR INT 21H ENDM Zo ne SỬ DỤNG MACRO Si PUTCHAR ‘A’ PUTCHAR ‘B’ PUTCHAR ‘C’ CHUONG MACRO SinhVienZone.com 10 https://fb.com/sinhvienzonevn TRAO ĐỔI THAM SỐ CỦA MACRO om MACRO LOCATE : ĐỊNH VỊ CURSOR MÀN HÌNH Si nh Vi en Zo ne C LOCATE MACRO ROW, COLUMN SỬ DỤNG MACRO PUSH AX PUSH BX TA CÓ CÁC DẠNG SỬ DUÏNG PUSH DX SAU : MOV BX, LOCATE 10,20 MOV AH, LOCATE ROW, COL MOV DH, ROW MOV DL, COLUMN LOCATE CH, CL INT 10H POP DX CHUÙ Ý : KHÔNG DÙNG CÁC POP BX THANH GHI AH,AL,BH,BL VÌ POP AX SẼ ĐỤNG ĐỘ VỚI CÁC ENDM THANH GHI ĐÃ SỬ DỤNG TRONG CHUONGMACRO MACRO SinhVienZone.com https://fb.com/sinhvienzonevn 13 MACRO LỒNG NHAU om MỘT CÁCH ĐƠN GIẢN ĐỂ XÂY DỰNG MACRO LÀ XÂY DỰNG MACRO MỚI TỪ MACRO ĐÃ CÓ ne C EX : HIỂN THỊ CHUỔI TẠI TOẠ ĐỘ CHO TRƯỚC Zo DISPLAY_AT MACRO ROW, COL, STRING nh Vi en LOCATE ROW, COL ;Goïi macro định vị cursor ENDM Si DISPLAY STRING ; Gọi Macro xuất string MỘT MACRO CÓ THỂ THAM CHIẾU ĐẾN CHÍNH NÓ, NHỮNG MACRO NHƯ VẬY GỌI LÀ MACRO ĐỆ QUI CHUONG MACRO SinhVienZone.com 14 https://fb.com/sinhvienzonevn ĐỊNH NGHĨA NHÃN BÊN TRONG MACRO om TRONG MACRO CÓ THỂ CÓ NHÃN GỌI MACRO NHIỀU LẦN NHIỀU NHÃN ĐƯC TẠO RA C LÀM SAO GIẢI QUYẾT VẤN ĐỀ NHẢY ĐIỀU KHIỂN? nh Vi en Zo ne SEMBLY GIẢI QUYẾT VẤN ĐỀ NÀY BẰNG CHỈ THỊ LOCAL ỢNG BỨC MASM TẠO RA TÊN DUY NHẤT CHO MỖI MỘT BEL KHI MACRO ĐƯC GỌI LOCAL LABEL_NAME Si CÚ PHÁP : CHUONG MACRO SinhVienZone.com 15 https://fb.com/sinhvienzonevn Một số Macro yêu cầu user định nghóa thành phần liệu nhãn bên định nghóa Macro ne C om Nếu sử dụng Macro nhiều lần chương trình, trình ASM định nghóa thành phần liệu nhãn cho lần sử dụng tên giống lặp lại khiến cho ASM báo lỗi nh Vi en Zo Để đảm bảo tên nhãn tạo lần, ta dùng thị LOCAL sau phát biểu Macro Si Khi ASM thấy biến định nghóa LOCAL thay biến ký hiệu có dạng ??n, n số có chữ số Nếu có nhiều nhãn ??0000, ??0001, ??0002 Ta cần biết điều để CT ta không sử dụng biến hay nhãn đưới cùnCHUONG g ng MACRO 16 SinhVienZone.com https://fb.com/sinhvienzonevn Thí dụ minh họa thị Local C om Xây dựng Macro REPEAT có nhiệm vụ xuất count lần số ký tự char hình ne REPEAT MACRO CHAR, COUNT LOCAL L1 GIẢ SỬ GỌI : L1: MOV AH,2 REPEAT ‘A’, 10 INT 21H LOOP L1 ENDM REPEAT ‘*’, 20 Si MOV DL, CHAR nh Vi en Zo MOV CX, COUNT ASM SẼ DÙNG CƠ CHẾ ĐÁNH SỐ CÁC NHÃN (TỪ 0000H ĐẾN FFFFH) ĐỂ ĐÁNH DẤU CÁC NHÃN CÓ CHỈ ĐỊNH LOCAL SẼ ĐƯC DỊCH RA CHUONG MACRO SinhVienZone.com 17 https://fb.com/sinhvienzonevn Thí dụ minh họa thị Local om MOV CX, 10 C ??0000 : MOV AH,2 ne MOV DL, ‘A’ INT 21H MOV CX, 20 MOV DL, ‘*’ INT 21H LOOP ??0001 Si ??0001 : MOV AH,2 nh Vi en Zo LOOP ??0000 CHUONG MACRO SinhVienZone.com 18 https://fb.com/sinhvienzonevn Thí dụ minh họa MACRO WORD1, WORD2 ne GETMAX LOCAL EXIT GIẢ SỬ FIRST,SECOND, THIRD LÀ CÁC BIEÁN WORD EXIT : ENDM nh Vi en MOV AX, WORD2 SỰ THAM CHIẾU MACRO ĐƯC MỞ RỘNG NHƯ SAU : MOV AX, FIRST CMP AX, SECOND Si JG EXIT Zo MOV AX, WORD1 CMP AX, WORD2 C om Vieát macro đưa từ lớn từ vào AX JG ??0000 MOV AX, SECOND ??0000: CHUONG MACRO SinhVienZone.com 19 https://fb.com/sinhvienzonevn Thí dụ minh họa om Viết macro đưa từ lớn vào AX MOV AX, SECOND JG ??0001 ??0001 : ne Si CMP AX, THIRD nh Vi en ĐƯC MỞ RỘNG NHƯ SAU : 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À CỨ NHƯ VẬY TRONG CHƯƠNG TRÌNH CÁC NHÃN NÀY LÀ DUY NHẤT Zo GETMAX SECOND, THIRD C LỜI GỌI MACRO TIẾP THEO : SỰ THAM CHIẾU LIÊN TIẾP CHUONG MACRO SinhVienZone.com 20 https://fb.com/sinhvienzonevn THƯ VIỆN MACRO C om CÁC MACRO MÀ CHƯƠNG TRÌNH THAM CHIẾU CÓ THỂ ĐẶT Ở FILE RIÊNG TA CÓ THỂ TẠO FILE THƯ VIỆN CÁC MACRO LƯU TRỮ TÊN FILE MACRO.LIB ne DÙNG EDITOR ĐỂ SOẠN THẢO MACRO nh Vi en Zo KHI CẦN THAM CHIẾU ĐẾN MACRO TA DÙNG CHỈ THị INCLUDE TÊN FILE THƯ VIỆN Si MỘT CÔNG DỤNG QUAN TRỌNG CỦA MACRO LÀ TẠO RA CÁC LỆNH MỚI CHUONG MACRO SinhVienZone.com 21 https://fb.com/sinhvienzonevn SO SÁNH GIỮA MACRO & THỦ TỤC ne C om THỜI GIAN BIÊN DỊCH MACRO ÍT TỐN THỜI GIAN BIÊN DỊCH HƠN PROCEDURE nh Vi en Zo THỜI GIAN THỰC HIỆN : NHANH HƠN PROCEDURE VÌ KHÔNG TỐN THỜI GIAN KHÔI PHỤC TRẠNG THÁI THÔNG TIN KHI ĐƯC GỌI TỐC ĐỘ NHANH HƠN Si KÍCH THƯỚC : KÍCH THƯỚC CT DÀI HƠN CHUONG MACRO SinhVienZone.com 22 https://fb.com/sinhvienzonevn om CÁC LỆNH LẶP TRONG MACRO ne C REP : ENDM nh Vi en Zo TÁC DỤNG : LẶP LẠI CÁC KHỐI LỆNH TRONG MACRO VỚI SỐ LẦN LÀ REPT BITS SHL DEST, ENDM Si EX : MSHL MACRO OPER, BITS ENDM GOÏI MSHL BX, SẼ ĐƯC THAY THẾ BẰNG : SHL BX, SHL BX, SHL BX, CHUONG MACRO SinhVienZone.com 23 https://fb.com/sinhvienzonevn om CÁC LỆNH LẶP TRONG MACRO ne C IRP , : ENDM nh Vi en Zo TÁC DỤNG : 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 MỖI LẦN LẶP LẠI SẼ THAY BẰNG TRỊ TRONG DANH SÁCH VÀ SẼ LẦN LƯT LẤY HẾT CÁC TRỊ TRONG DANH SÁCH Si EX : PROCTABLE LABEL WORD IRP PROCNAME, DW PROCNAME ENDM CHUONG MACRO SinhVienZone.com 24 https://fb.com/sinhvienzonevn om CÁC LỆNH LẶP TRONG MACRO Zo ne C TUY NHIÊN CÁCH KHAI BÁO NÀY RƯỜM RÀ HƠN LÀ DÙNG : PROCTABLE DW MOVUP, MOVDOWN,MOVLEFT,MOVRIGHT Si nh Vi en 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 MACRO SinhVienZone.com 25 https://fb.com/sinhvienzonevn ... 21H CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn MACRO (tt) Si nh Vi en Zo ne C om Khi hợp dịch nội dung nhóm lệnh mà ta gán cho macro thay vào nơi có tên macro trước CT hợp dịch... TRONG MACRO ĐƯC IN RA TRỪ NHỮNG CHÚ THÍCH BẮT ĐẦU BẰNG DẤU ;; CHUONG MACRO SinhVienZone.com https://fb.com/sinhvienzonevn CÚ PHÁP KHAI BÁO MACRO : om ĐỊNH NGHĨA MACRO nh Vi en Zo ne C MACRO_ NAME MACRO. .. GHI ĐÃ SỬ DỤNG TRONG CHUONGMACRO MACRO SinhVienZone.com https://fb.com/sinhvienzonevn 13 MACRO LỒNG NHAU om MỘT CÁCH ĐƠN GIẢN ĐỂ XÂY DỰNG MACRO LÀ XÂY DỰNG MACRO MỚI TỪ MACRO ĐÃ CÓ ne C EX : HIỂN