1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc Máy tính và Lập trình Assembly - Chương 9 potx

27 379 2

Đ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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 1,13 MB

Nội dung

CHUONG 9 MACRO CHUONG 9 MACRO 1 1 MACRO MACRO MACRO nh ngh nh ngh a Macro v a Macro v g g i Macro i Macro Va Va ỏ ỏ n n ủ ủ e e truye truye n n thoõng thoõng so so ỏ ỏ trong trong Macro. Macro. Macro Macro lo lo ng ng nhau nhau . . S S ửỷ ửỷ du du ù ù ng ng Macro Macro ủ ủ e e ồ ồ go go ù ù i i ch ch ử ử ụng ụng tr tr ỡ ỡ nh nh con. con. Ca Ca ự ự c c toa toa ự ự n n t t ửỷ ửỷ Macro. Macro. Th Th ử ử vie vie ọ ọ n n Macro Macro So So sa sa ự ự nh nh vie vie ọ ọ c c du du ứ ứ ng ng Macro Macro vụ vụ ự ự i i Procedure Procedure Mo Mo ọ ọ t t so so ỏ ỏ Macro Macro maóu maóu . . CHUONG 9 MACRO CHUONG 9 MACRO 2 2 ẹềNH NGHểA MACRO ẹ ẹ ềNH NGH ềNH NGH ể ể A MACRO A MACRO Macro Macro la la ứ ứ 1 1 ky ky ự ự hie hie ọ ọ u u ủử ủử ụ ụ ù ù c c ga ga ự ự n n cho cho 1 1 nho nho ự ự m m le le ọ ọ nh nh ASM ASM Macro Macro la la ứ ứ teõn teõn thay thay the the ỏ ỏ cho cho 1 1 nho nho ự ự m m le le ọ ọ nh nh . . Trong Trong la la ọ ọ p p tr tr ỡ ỡ nh nh nhie nhie u u lu lu ự ự c c ta ta ca ca n n pha pha ỷ ỷ i i vie vie ỏ ỏ t t nh nh ử ử ừng ừng le le ọ ọ nh nh na na na na ự ự nhau nhau nhie nhie u u la la n n ma ma ứ ứ ta ta khoõng khoõng muo muo ỏ ỏ n n vie vie ỏ ỏ t t d d ử ử ụ ụ ự ự i i da da ù ù ng ng ha ha ứ ứ m m v v ỡ ỡ du du ứ ứ ng ng ha ha ứ ứ m m to to ỏ ỏ n n thụ thụ ứ ứ i i gian gian th th ửù ửù c c thi thi , , thay thay v v ỡ ỡ ta ta pha pha ỷ ỷ i i vie vie ỏ ỏ t t ủ ủ a a y y ủ ủ u u ỷ ỷ nho nho ự ự m m le le ọ ọ nh nh na na ứ ứ y y va va ứ ứ o o CT, CT, ta ta ch ch ổ ổ ca ca n n vie vie ỏ ỏ t t Macro Macro ma ma ứ ứ ta ta ủ ủ aừ aừ ga ga ự ự n n cho cho chu chu ự ự ng ng . . Ta Ta ù ù i sao ca i sao ca n co n co ự ự Macro : Macro : CHUONG 9 MACRO CHUONG 9 MACRO 3 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 CHUONG 9 MACRO 4 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 MOV AH,2 INT 21H MOV DL,10 MOV AH,2 INT 21H ENDM Sau đó, bất kỳ chỗ nào cần xuống dòng, ta chỉ cần gọi macro @NewLine. @NewLine CHUONG 9 MACRO CHUONG 9 MACRO 5 5 MACRO (tt) MACRO ( MACRO ( tt tt ) ) Khi Khi hụ hụ ù ù p p dũch dũch no no ọ ọ i i dung dung nho nho ự ự m m le le ọ ọ nh nh na na ứ ứ y y ma ma ứ ứ ta ta ủ ủ aừ aừ ga ga ự ự n n cho cho macro macro seừ seừ ủử ủử ụ ụ ù ù c c thay thay the the ỏ ỏ va va ứ ứ o o nh nh ử ử ừng ừng nụi nụi co co ự ự teõn teõn macro macro tr tr ử ử ụ ụ ự ự c c khi khi CT CT ủử ủử ụ ụ ù ù c c hụ hụ ù ù p p dũch dũch tha tha ứ ứ nh nh file file OBJ. OBJ. Ex1 : Ex1 : nhie nhie u u khi khi ta ta pha pha ỷ ỷ i i vie vie ỏ ỏ t t la la ù ù i i nhie nhie u u la la n n ủ ủ oa oa ù ù n n le le ọ ọ nh nh xua xua ỏ ỏ t t ky ky ự ự t t ửù ửù trong trong DL DL ra ra ma ma ứ ứ n n h h ỡ ỡ nh nh . . MOV AH, 2 MOV AH, 2 INT 21H INT 21H Thay Thay v v ỡ ỡ pha pha ỷ ỷ i i vie vie ỏ ỏ t t ca ca ỷ ỷ 1 1 ca ca ở ở p p le le ọ ọ nh nh treõn treõn moói moói khi khi ca ca n n xua xua ỏ ỏ t t ky ky ự ự t t ửù ửù trong trong DL, DL, ta ta co co ự ự the the ồ ồ vie vie ỏ ỏ t t Macro Macro PUTCHAR PUTCHAR nh nh ử ử sau sau : : PUTCHAR MACRO MOV AH,2 INT 21H ENDM CHUONG 9 MACRO CHUONG 9 MACRO 6 6 MƠ MƠ Û Û RO RO Ä Ä NG CU NG CU Û Û A MACRO CO A MACRO CO Ù Ù THE THE Å Å XEM XEM TRONG FILE.LIST. TRONG FILE.LIST. 3 DIRECTIVE BIÊN DỊCH SAU SẼ QUYE 3 DIRECTIVE BIÊN DỊCH SAU SẼ QUYE Á Á T T Đ Đ ỊNH MƠ ỊNH MƠ Û Û RO RO Ä Ä NG MACRO NH NG MACRO NH Ư Ư THE THE Á Á NA NA Ø Ø O. O. .SALL (SUPRESS ALL) PHA .SALL (SUPRESS ALL) PHA À À N MƠ N MƠ Û Û RO RO Ä Ä NG MACRO NG MACRO KHÔNG KHÔNG ĐƯ ĐƯ Ơ Ơ Ï Ï C IN. S C IN. S Ử Ử DU DU Ï Ï NG KHI MACRO LƠ NG KHI MACRO LƠ Ù Ù N HAY N HAY MACRO MACRO ĐƯ ĐƯ Ơ Ơ Ï Ï C THAM CHIE C THAM CHIE Á Á U NHIE U NHIE À À U LA U LA À À N TRONG CT. N TRONG CT. .XALL CH .XALL CH Ỉ Ỉ NH NH Ư Ư ÕNG DO ÕNG DO Ø Ø NG MACRO TA NG MACRO TA Ï Ï O MÃ NGUO O MÃ NGUO À À N N MƠ MƠ Ù Ù I I ĐƯ ĐƯ Ơ Ơ Ï Ï C IN RA.TH C IN RA.TH Í Í DU DU Ï Ï CA CA Ù Ù C DO C DO Ø Ø NG CHU NG CHU Ù Ù TH TH Í Í CH CH ĐƯ ĐƯ Ơ Ơ Ï Ï C BO C BO Û Û QUA. QUA. Đ Đ ÂY LA ÂY LA Ø Ø TUY TUY Ø Ø CHO CHO Ï Ï N DEFAULT. N DEFAULT. .LALL (LIST ALL) TOA .LALL (LIST ALL) TOA Ø Ø N BO N BO Ä Ä CA CA Ù Ù C DO C DO Ø Ø NG TRONG NG TRONG MACRO MACRO ĐƯ ĐƯ Ơ Ơ Ï Ï C IN RA TR C IN RA TR Ừ Ừ NH NH Ư Ư ÕNG CHU ÕNG CHU Ù Ù TH TH Í Í CH BA CH BA É É T T Đ Đ A A À À U BA U BA È È NG 2 DA NG 2 DA Á Á U ;; U ;; CHUONG 9 MACRO CHUONG 9 MACRO 7 7 ĐỊNH NGHĨA MACRO Đ Đ ỊNH NGH ỊNH NGH Ĩ Ĩ A MACRO A MACRO CU CU Ù Ù PHA PHA Ù Ù P KHAI BA P KHAI BA Ù Ù O MACRO : O MACRO : MACRO_NAME MACRO_NAME MACRO MACRO [ <THÔNG SO [ <THÔNG SO Á Á HÌNH TH HÌNH TH Ứ Ứ C>] C>] STATEMENTS STATEMENTS ENDM ENDM GO GO Ï Ï I MACRO : I MACRO : MACRO_NAME MACRO_NAME [< [< THÔNG SO THÔNG SO Á Á TH TH Ự Ự C>, 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 CHUONG 9 MACRO 8 8 MACRO MACRO TRUY TRUY Ề Ề N THAM S 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, MOV DL, ‘ ‘ A 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 9 MACRO 9 9 SWAP MACRO BIE SWAP MACRO BIE Á Á N1, BIE N1, BIE Á Á N2 N2 MOV AX, BIEN1 MOV AX, BIEN1 XCHG AX, BIEN2 XCHG AX, BIEN2 MOV BIEN1, AX MOV BIEN1, AX ENDM ENDM GO GO Ï Ï I : SWAP TRI1, TRI2 I : SWAP TRI1, TRI2 CHUONG 9 MACRO CHUONG 9 MACRO 10 10 TRAO TRAO Đ Đ O O Å Å I THAM SO I THAM SO Á Á CU CU Û Û A MACRO A MACRO MỘT MACRO CÓ THỂ CÓ THÔNG SỐ HOẶC KHÔNG CÓ THÔNG SỐ. PUTCHAR MACRO PUTCHAR MACRO CHAR CHAR MOV AH, 2 MOV AH, 2 MOV DL, CHAR MOV DL, CHAR INT 21H INT 21H ENDM ENDM . CODE PUTCHAR ‘A’ PUTCHAR ‘B’ PUTCHAR ‘C’ MACRO CÓ THÔNG SỐ SỬ DỤNG MACRO [...]... macro @Printstr Viết chương trình in 2 chuổi ‘Hello’ và ‘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 …… ;1 ;1 ;1 ;2 ;2 ;2 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 : CHUONG 9 MACRO 11 THÍ DỤ VỀ MACRO DISPLAY MACRO STRING PUSH AX PUSH DX LEA DX, STRING MOV AH ,9 INT 21H POP DX GỌI... LIÊN TIẾP GETMAX SECOND, THIRD ĐƯC MỞ RỘNG NHƯ SAU : MOV AX, SECOND CMP AX, THIRD 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 JG ??0001 ??0001 : CHUONG 9 MACRO 20 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... 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 Ợ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 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ữ... CHUONG 9 MACRO 18 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 LOCAL EXIT MOV AX, WORD1 CMP AX, WORD2 GIẢ SỬ FIRST,SECOND, THIRD LÀ CÁC BIẾN WORD SỰ THAM CHIẾU MACRO ĐƯC MỞ RỘNG NHƯ SAU : JG EXIT MOV AX, FIRST MOV AX, WORD2 CMP AX, SECOND EXIT : JG ??0000 ENDM MOV AX, SECOND ??0000: CHUONG 9 MACRO 19 Thí dụ minh họa Viết 1 macro đưa từ lớn hơn trong 2 vào AX... MOVDOWN,MOVLEFT,MOVRGHT> DW PROCNAME ENDM CHUONG 9 MACRO 24 CÁC LỆNH LẶP TRONG NH CÁC LỆNH LẶP TRONG MACRO MACRO TUY NHIÊN CÁCH KHAI BÁO NÀY RƯỜM RÀ HƠN LÀ CH DÙNG : 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 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... 1 dạng CHUONG 9 MACRO 16 Thí dụ minh họa chỉ thò Local 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 MOV CX, COUNT GIẢ SỬ GỌI : L1: MOV AH,2 REPEAT ‘A’, 10 MOV DL, CHAR REPEAT ‘*’, 20 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 INT 21H LOOP L1 ENDM SẼ ĐƯC DỊCH RA  CHUONG 9 MACRO 17 Thí... CÔNG DỤNG QUAN TRỌNG CỦA MACRO LÀ TẠO RA CÁC LỆNH MỚI CHUONG 9 MACRO 21 SO SÁNH GIỮA MACRO & THỦ NH 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 NG 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 CÁC LỆNH LẶP TRONG NH CÁC LỆNH LẶP TRONG MACRO MACRO... BẰNG : SHL BX, 1 SHL BX, 1 SHL BX, 1 CHUONG 9 MACRO 23 CÁC LỆNH LẶP TRONG NH CÁC LỆNH LẶP TRONG MACRO MACRO IRP , : >, CH N> ENDM TÁC DỤNG : NG  LẶP LẠI KHỐI LỆNH TÙY THEO DANH SÁCH TRỊ NH CH  SỐ LẦN LẶP CHÍNH LÀ SỐ TRỊ TRONG DANH SÁCH CH  MỖI LẦN LẶP LẠI SẼ THAY BẰNG 1 TRỊ TRONG NG DANH SÁCH VÀ SẼ LẦN LƯT LẤY HẾT CÁC TRỊ TRONG DANH CH SÁCH... DỤNG TRONG MACRO CHUONG 9 MACRO 13 MACRO LỒNG NHAU NG 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 ĐỊNH NGHĨA... 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 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 . MACRO CÓ THÔNG SỐ SỬ DỤNG MACRO CHUONG 9 MACRO CHUONG 9 MACRO 11 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 MSG2. 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 CHUONG 9 MACRO 12 12 TH TH Í Í DU DU Ï Ï VE VE À À MACRO MACRO DISPLAY. : REPEAT ‘ A ’ , 10 REPEAT ‘ * ’ , 20 CHUONG 9 MACRO CHUONG 9 MACRO 19 19 Th Th í í du du ï ï minh minh ho ho ï ï a a Viết 1 macro đưa từ lớn hơn trong 2 từ vào AX GETMAX MACRO WORD1, WORD2 LOCAL EXIT MOV

Ngày đăng: 24/07/2014, 09:20

TỪ KHÓA LIÊN QUAN