Bài giảng Công nghệ thông tin - Chương 9: Macro

ppt 27 trang huongle 3260
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Công nghệ thông tin - Chương 9: Macro", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptbai_giang_cong_nghe_thong_tin_chuong_9_macro.ppt

Nội dung text: Bài giảng Công nghệ thông tin - Chương 9: Macro

  1. MACROMACRO Định nghĩa Macro và gọi Macro Vấn đề truyền thông số trong Macro. Macro lồng nhau. Sử dụng Macro để gọi chương trình con. 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 9 MACRO 1
  2. ĐỊNHĐỊNH NGHĨANGHĨA MACROMACRO Macro là 1 ký hiệu được gán cho 1 nhóm lệnh ASM – Macro là tên thay thế cho 1 nhóm lệnh. Tại sao cần có Macro : Trong lập trình nhiều lúc ta cần phải viết những lệnh na ná nhau nhiều lần mà ta không muốn viết dưới dạng hàm vì dùng hàm tốn thời gian thực thi, thay vì ta phải viết đầy đủ nhóm lệnh này vào CT, ta chỉ cần viết Macro mà ta đã gán cho chúng. CHUONG 9 MACRO 2
  3. 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
  4. 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 MOV AH,2 cần xuống dịng, ta chỉ cần gọi macro INT 21H @NewLine. MOV DL,10 @NewLine MOV AH,2 INT 21H ENDM CHUONG 9 MACRO 4
  5. MACROMACRO ((tttt)) 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ơi có tên macro trước khi CT được hợp dịch thành file OBJ. Ex1 : nhiều khi ta phải viết lại nhiều lần đoạn lệnh xuất ký tự trong DL ra màn hình. MOV AH, 2 INT 21H Thay vì phải viết cả 1 cặp lệnh trên mỗi khi cần xuất ký tự trong DL, ta có thể viết Macro PUTCHAR như sau : PUTCHAR MACRO MOV AH,2 INT 21H ENDM CHUONG 9 MACRO 5
  6. MỞ RỘNG CỦA MACRO CÓ THỂ XEM TRONG FILE.LIST. 3 DIRECTIVE BIÊN DỊCH SAU SẼ QUYẾT ĐỊNH MỞ RỘNG MACRO NHƯ THẾ NÀO. .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. .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 2 DẤU ;; CHUONG 9 MACRO 6
  7. ĐỊNHĐỊNH NGHĨANGHĨA MACROMACRO CÚ PHÁP KHAI BÁO MACRO : MACRO_NAME MACRO [ ] STATEMENTS ENDM GỌI MACRO : MACRO_NAME [ , ] 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 9 MACRO 7
  8. MACRO TRUYỀN THAM SỐ .MODEL SMALL MOV AH,4CH .STACK 100H PUTCHAR MACRO KT INT 21H MOV DL,KT MAIN ENDP MOV AH,2 INT 21H END MAIN ENDM .CODE MAIN PROC MOV DL, ‘A’ PUTCHAR MOV DL, ‘*” PUTCHAR CHUONG 9 MACRO 8
  9. SWAP MACRO BIẾN1, BIẾN2 MOV AX, BIEN1 XCHG AX, BIEN2 MOV BIEN1, AX ENDM GỌI : SWAP TRI1, TRI2 CHUONG 9 MACRO 9
  10. 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 MACRO CHAR MOV AH, 2 MOV DL, CHAR PUTCHAR ‘A’ INT 21H PUTCHAR ‘B’ ENDM PUTCHAR ‘C’ CHUONG 9 MACRO 10
  11. MACRO TRUYỀN THƠNG SỐ Thí dụ : macro @Printstr Viết chương trình in 2 chuổi ‘Hello’ và ‘Hi”. .DATA MSG1 DB ‘Hello’,13,10 Ta thấy đoạn 1 MSG2 DB‘Hi’,13,10 và đoạn 2 gần .CODE giống nhau . cĩ thể tạo macro MOV DX, OFFSET MSG1 ;1 cĩ tham số như MOV AH,9 ;1 sau : INT 21H ;1 MOV DX, OFFSET MSG2 ;2 MOV AH,9 ;2 INT 21H ;2 CHUONG 9 MACRO 11
  12. THÍTHÍ DỤDỤ VỀVỀ MACROMACRO DISPLAYDISPLAY MACROMACRO STRINGSTRING PUSHPUSH AXAX PUSHPUSH DXDX LEALEA DX,DX, STRINGSTRING MOVMOV AH,9AH,9 INTINT 21H21H POPPOP DXDX POPPOP AXAX GỌI : DISPLAY CHUOI ENDMENDM CHUONG 9 MACRO 12
  13. TRAO ĐỔI THAM SỐ CỦA MACRO MACRO LOCATE : ĐỊNH VỊ CURSOR MÀN HÌNH LOCATE MACRO ROW, COLUMN SỬ DỤNG MACRO PUSH AX PUSH BX TA CÓ CÁC DẠNG SỬ DỤNG PUSH DX SAU : MOV BX, 0 MOV BX, 0 LOCATE 10,20 MOV AH, 2 MOV DH, ROW LOCATE ROW, COL MOV DL, COLUMN LOCATE CH, CL INT 10H POP DX CHÚ Ý : 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 TRONGCHUONG MACRO9 MACRO 13
  14. MACRO LỒNG NHAU MỘT CÁCH ĐƠN GIẢN ĐỂ XÂY DỰNG MACRO LÀ XÂY DỰNG 1 MACRO MỚI TỪ MACRO ĐÃ CÓ. EX : HIỂN THỊ 1 CHUỔI TẠI 1 TOẠ ĐỘ CHO TRƯỚ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 14
  15. ĐỊNHĐỊNH NGHĨANGHĨA NHÃNNHÃN BÊNBÊN TRONGTRONG MACROMACRO 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? 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 CÚ PHÁP : LOCAL LABEL_NAME CHUONG 9 MACRO 15
  16. Một số Macro yêu cầu user định nghĩa các thành phần dữ liệu và các nhãn bên trong định nghĩa của Macro. Nếu sử dụng Macro này nhiều hơn 1 lần trong cùng một 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 các tên giống nhau lặp lạ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 Khi ASM thấy 1 biến được định nghĩa là LOCAL nó sẽ 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 Ta cần biết điều này để trong CT chính ta không sử dụng các biến hay nhãn đưới cùngCHUONG 1 dạng 9 MACRO . 16
  17. ThíThí dụdụ minhminh họahọa chỉchỉ thịthị LocalLocal Xây dựng Macro REPEAT có nhiệm vụ xuất count lần số ký tự char ra màn hình. REPEAT MACRO CHAR, COUNT LOCAL L1 ASM SẼ DÙNG CƠ CHẾ ĐÁNH SỐ CÁC NHÃN (TỪ MOV CX, COUNT GIẢ SỬ GỌI : 0000H ĐẾN FFFFH) ĐỂ L1: MOV AH,2 REPEAT ‘A’, 10 ĐÁ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 17
  18. Thí dụ minh họa chỉ thị Local MOV CX, 10 ??0000 : MOV AH,2 MOV DL, ‘A’ INT 21H LOOP ??0000 MOV CX, 20 GIẢ SỬ GỌI : REPEAT ‘A’, 10 ??0001 : MOV AH,2 REPEAT ‘*’, 20 MOV DL, ‘*’ INT 21H LOOP ??0001 CHUONG 9 MACRO 18
  19. Thí dụ minh họa Viết 1 macro đưa từ lớn hơn trong 2 từ vào AX GETMAX MACRO WORD1, WORD2 GIẢ SỬ FIRST,SECOND, THIRD LÀ LOCAL EXIT CÁC BIẾN WORD. MOV AX, WORD1 SỰ THAM CHIẾU MACRO ĐƯỢC MỞ RỘNG NHƯ SAU : CMP AX, WORD2 MOV AX, FIRST JG EXIT CMP AX, SECOND MOV AX, WORD2 JG ??0000 EXIT : MOV AX, SECOND ENDM ??0000: CHUONG 9 MACRO 19
  20. Thí dụ minh họa Viết 1 macro đưa từ lớn hơn trong 2 vào AX LỜI GỌI MACRO TIẾP THEO : SỰ THAM CHIẾU LIÊN TIẾP GETMAX SECOND, THIRD MACRO NÀY HAY ĐẾN MACRO KHÁC KHIẾN TRÌNH BIÊN DỊCH ĐƯỢC MỞ RỘNG NHƯ SAU : CHÈN CÁC NHÃN ??0002, ??0003 VÀ CỨ NHƯ VẬY TRONG CHƯƠNG MOV AX, SECOND TRÌNH CÁC NHÃN NÀY LÀ DUY CMP AX, THIRD NHẤT. JG ??0001 ??0001 : CHUONG 9 MACRO 20
  21. THƯ VIỆN MACRO CÁC MACRO MÀ CHƯƠNG TRÌNH THAM CHIẾU CÓ THỂ ĐẶT Ở FILE 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 MỘT CÔNG DỤNG QUAN TRỌNG CỦA MACRO LÀ TẠO RA CÁC LỆNH MỚI. CHUONG 9 MACRO 21
  22. SO SÁNH GIỮA MACRO & THỦ TỤC THỜI GIAN BIÊN DỊCH. MACRO ÍT TỐN THỜI GIAN BIÊN DỊCH HƠN PROCEDURE 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. KÍCH THƯỚC : KÍCH THƯỚC CT DÀI HƠN CHUONG 9 MACRO 22
  23. CÁCCÁC LỆNHLỆNH LẶPLẶP TRONGTRONG MACROMACRO REP : ENDM TÁC DỤNG : LẶP LẠI CÁC KHỐI LỆNH TRONG MACRO 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 ENDM SHL BX, 1 CHUONG 9 MACRO 23
  24. CÁCCÁC LỆNHLỆNH LẶPLẶP TRONGTRONG MACROMACRO IRPIRP ,SỐ>, NHỌN> :: ENDMENDM 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 1 TRỊ TRONG DANH SÁCH VÀ SẼ LẦN LƯỢT LẤY HẾT CÁC TRỊ TRONG DANH SÁCH. EX : PROCTABLE LABEL WORD IRP PROCNAME, DW PROCNAME ENDM CHUONG 9 MACRO 24
  25. CÁCCÁC LỆNHLỆNH LẶPLẶP TRONGTRONG MACROMACRO TUY NHIÊN CÁCH KHAI BÁO NÀY RƯỜM RÀ HƠN LÀ DÙNG : PROCTABLE DW MOVUP, 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 25
  26. BÀI TẬP MACRO Bài 1 : 1. Viết một MACRO tính USCLN của 2 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 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
  27. 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