Cấu trúc máy tính và ASM - Chương 9

27 616 3
Cấu trúc máy tính và ASM - Chương 9

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Sự cần thiết của lệnh nhảy trong lập trình ASM. Lệnh JMP (Jump) : nhảy không điều kiện. Lệnh LOOP : cho phép lặp 1 công việc với 1 số lần nào đó. Các lệnh so sánh và luận lý

CHUONG 9 MACROCHUONG 9 MACRO11MACROMACROMACROMACRO Định nghĩa Macro gọi MacroĐịnh nghĩa Macro 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 MacroThư viện Macro So sánh việc dùng Macro với ProcedureSo sánh việc dùng Macro với Procedure Một số Macro mẫu.Một số Macro mẫu. CHUONG 9 MACROCHUONG 9 MACRO22ĐỊNH NGHĨA MACRỊNH NGHĨA MACRỊNH NGHĨA MACRỊNH NGHĨA MACRO Macro là 1 ký hiệu được gán cho 1 nhóm 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 ASM – Macro là tên thay thế cho 1 nhóm lệnh.lệnh. Trong lập trình nhiều lúc ta cần phải viết những 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 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, 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, 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. ta chỉ cần viết Macro mà ta đã gán cho chúng. Tại sao cần có Macro :Tại sao cần có Macro : CHUONG 9 MACRO 3LÀM QUEN VỚI MACROKhi 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òngMOV AH,2INT 21HMOV DL,10 ; xuống dòng mớiMOV AH,2INT 21H CHUONG 9 MACRO 4Thay 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 MOV AH,2INT 21HMOV DL,10MOV AH,2INT 21HENDMSau đó, bất kỳ chỗ nào cần xuống dòng, ta chỉ cần gọi macro @NewLine. @NewLine CHUONG 9 MACROCHUONG 9 MACRO55MACRO (tt) MACRO (tt) 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ơi có 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 tên macro trước khi CT được hợp dòch thành file OBJ.OBJ. Ex1 : nhiều khi ta phải viết lại nhiều lần đoạn 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.lệnh xuất ký tự trong DL ra màn hình. MOV AH, 2MOV AH, 2 INT 21HINT 21HThay vì phải viết cả 1 cặp lệnh trên mỗi khi cần 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 xuất ký tự trong DL, ta có thể viết Macro PUTCHAR như sau :PUTCHAR như sau : PUTCHAR MACRO MOV AH,2 INT 21H ENDM CHUONG 9 MACRO 6MƠÛ 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Ư THẾ NÀO.ĐỊNH MƠÛ RỘNG MACRO NHƯ 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 KHÔNG ĐƯC IN. SƯÛ DỤNG KHI MACRO LỚN HAY MACRO ĐƯC THAM CHIẾU NHIỀU LẦN TRONG CT.MACRO ĐƯC THAM CHIẾU NHIỀU LẦN TRONG CT 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 ĐƯC IN RA.THÍ DỤ CÁC DÒNG CHÚ THÍCH MỚI ĐƯ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 MACRO ĐƯC IN RA TRỪ NHỮNG CHÚ THÍCH BẮT ĐẦU BẰNG 2 DẤU ;;ĐẦU BẰNG 2 DẤU ;; CHUONG 9 MACROCHUONG 9 MACRO77ĐỊNH NGHĨA MACRỊNH NGHĨA MACRỊNH NGHĨA MACRỊNH NGHĨA MACRO CÚ PHÁP KHAI BÁO MACRO :CÚ PHÁP KHAI BÁO MACRO : MACRO_NAMEMACRO_NAME MACROMACRO [ <THÔNG SỐ HÌNH THỨC>] [ <THÔNG SỐ HÌNH THỨC>] STATEMENTSSTATEMENTS ENDMENDM GỌI MACRO : GỌI MACRO : MACRO_NAMEMACRO_NAME [<THÔNG SỐ THỰC>, .] [<THÔNG SỐ THỰC>, .] 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 8MACRO 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 ENDM.CODE.CODE MAIN PROCMAIN PROC MOV DL, ‘A’MOV DL, ‘A’ PUTCHARPUTCHAR MOV DL, ‘*”MOV DL, ‘*” PUTCHARPUTCHAR MOV AH,4CHMOV AH,4CH INT 21HINT 21HMAIN ENDPMAIN ENDPEND MAINEND MAIN CHUONG 9 MACRO 9SWAP MACRO BIEN1, BIEN2SWAP MACRO BIEN1, BIEN2 MOV AX, BIEN1MOV AX, BIEN1 XCHG AX, BIEN2XCHG AX, BIEN2 MOV BIEN1, AXMOV BIEN1, AX ENDMENDMGOẽI : SWAP TRI1, TRI2 GOẽI : SWAP TRI1, TRI2 CHUONG 9 MACRO 10TRAO ĐỔI THAM SỐ CỦA MACROTRAO ĐỔI THAM SỐ CỦA MACROMỘT MACRO CÓ THỂ CÓ THÔNG SỐ HOẶC KHÔNG CÓ THÔNG SỐ.PUTCHAR MACRO PUTCHAR MACRO CHARCHAR MOV AH, 2MOV AH, 2 MOV DL, CHARMOV DL, CHAR INT 21HINT 21HENDMENDM. CODE . PUTCHAR ‘A’ PUTCHAR ‘B’ PUTCHAR ‘C’ .MACRO CÓ THÔNG SỐSƯÛ DỤNG MACRO [...]... ‘A’ PUTCHAR ‘B’ PUTCHAR ‘C’ MACRO CÓ THÔNG SỐ SỬ DỤNG MACRO CHUONG 9 MACRO 11 MACRO TRUYỀN THƠNG SỐ Thí dụ : macro @Printstr Viết chương trình in 2 chuổi ‘Hello’ ‘Hi”. .DATA 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 …… 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 26 BÀI TẬP MACRO BÀI TẬP MACRO Bài 1 : 1. Viết một MACRO tính USCLN của 2 biến số M N. Thuật toán USCLN như sau : WHILE N <> 0 DO M = M MOD N Hoán vị M 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 14 MACRO LỒNG NHAU MACRO... gian thực thi, thay vì ta phải viết đầy đủ nhóm lệnh này vào CT, 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. ta chỉ cần viết Macro mà ta đã gán cho chúng. Tại sao cần có Macro : Tại sao cần có Macro : CHUONG 9 MACRO 20 Thí dụ minh họa 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 : GETMAX SECOND, THIRD ĐƯC... ‘A’, 10 REPEAT ‘*’, 20 SẼ ĐƯC DỊCH RA  CHUONG 9 MACRO 18 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 LOOP ??0000 MOV CX, 20 ??0001 : MOV AH,2 MOV DL, ‘*’ INT 21H LOOP ??0001 G I A Û S Ö Û G O Ï I : R E P E A T ‘ A ’ , 1 0 R E P E A T ‘ * ’ , 2 0 CHUONG 9 MACRO CHUONG 9 MACRO 2 2 ĐỊNH NGHĨA MACRO ĐỊNH NGHĨA MACRO ĐỊ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 9 SWAP MACRO BIEÁN1, BIEÁN2 SWAP MACRO BIEÁN1, BIEÁN2 MOV AX, BIEN1 MOV AX, BIEN1 XCHG AX, BIEN2 XCHG AX, BIEN2 MOV BIEN1, AX MOV BIEN1, AX ENDM ENDM GOÏI : SWAP TRI1, TRI2 GOÏI : SWAP TRI1, TRI2 CHUONG 9 MACRO 15 ĐỊNH NGHĨA NHÃN BÊN TRONG MACRO ĐỊNH NGHĨA NHÃN BÊN TRONG MACRO TRONG MACRO... NHƯ SAU : MOV AX, SECOND CMP AX, THIRD JG ??0001 ??0001 : 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 CỨ NHƯ VẬY TRONG CHƯƠNG TRÌNH CÁC NHÃN NÀY LÀ DUY NHAÁT. CHUONG 9 MACRO 6 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... DỤNG TRONG MACRO CHUONG 9 MACRO 21 THƯ VIỆN MACRO 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 10 TRAO ĐỔI THAM SỐ... 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 19 Thí dụ minh họa Thí dụ minh họa Viết 1 macro đưa từ lớn hơn trong 2 từ vaøo AX GETMAX MACRO WORD1, WORD2 LOCAL EXIT MOV AX, WORD1 CMP AX, WORD2 ... KHI KHÔI PHỤC TRẠNG THÁI THÔNG TIN KHI ĐƯC GỌI ĐƯC GỌI   TỐC ĐỘ NHANH HƠN. TỐC ĐỘ NHANH HƠN. KÍCH THƯỚC : KÍCH THƯỚC CT DÀI KÍCH THƯỚC : KÍCH THƯỚC CT DÀI HÔN HÔN CHUONG 9 MACRO CHUONG 9 MACRO 7 7 ĐỊNH NGHĨA MACRO ĐỊNH NGHĨA MACRO ĐỊNH NGHĨA MACRO ĐỊNH NGHĨA MACRO CÚ PHÁP KHAI BÁO MACRO : CÚ PHÁP KHAI BÁO MACRO : MACRO_NAME MACRO_NAME MACRO MACRO [ <THÔNG SỐ HÌNH... CHUONG 9 MACRO 8 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 ENDM .CODE .CODE MAIN PROC MAIN PROC MOV DL, ‘A’ MOV DL, ‘A’ PUTCHAR PUTCHAR MOV DL, ‘*” MOV DL, ‘*” PUTCHAR PUTCHAR MOV AH,4CH MOV AH,4CH INT 21H INT 21H MAIN ENDP MAIN ENDP END MAIN END MAIN CHUONG 9 MACRO CHUONG . CHUONG 9 MACROCHUONG 9 MACRO11MACROMACROMACROMACRO Định nghĩa Macro và gọi MacroĐịnh nghĩa Macro và gọi Macro Vấn đề truyền thông. AH,9INT 21HMOV DX, OFFSET MSG2MOV AH,9INT 21H……..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

Ngày đăng: 15/10/2012, 14:34

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan