Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
756,56 KB
Nội dung
Macro là gì? Chöông 6: Vieát caùc Macro - Macro là một định nghĩa cụ thể cho một nhóm chỉ thị - Sử dụng Macro nhằm mục đích: * Đơn giản hóa và giảm số lần lặp lại của các chỉ thị được lặp lại * Giảm các lỗi gây ra * Sắp xếp chương trình hợp lý Định nghĩa Macro - Yêu cầu: * Một macro phải xuất hiện trước bất kỳ segment nào được định nghĩa * Tên macro tuân theo quy ước chung - Cấu trúc macro: <Tên macro> MACRO <Tham số> ;Định nghĩa ;Thân Macro ENDM ;Kết thúc macro Code 1: .DATA MSG DB ‘Hello$’ .CODE MOV AH,9 LEA DX,MSG INT 21h Code 2: THONGBAO MACRO MSG MOV AH,9 LEA DX,MSG INT 21h ENDM .DATA MSG DB ‘Hello$’ .CODE THONGBAO MSG Chöông 6: Vieát caùc Macro Định nghĩa một số Macro cho một số nhóm lệnh thường dùng 1. Nhập ký tự từ bàn phím: a. Macro: NHAPLIEU MACRO MOV AH,1 INT 21h ENDM b.Sử dụng: NHAPLIEU MACRO MOV AH,1 INT 21h ENDM .CODE NHAPLIEU Chöông 6: Vieát caùc Macro Định nghĩa một số Macro cho một số nhóm lệnh thường dùng 2. Xuất ký tự ra màn hình: a. Macro: INKT MACRO KYTU MOV AH,2 MOV DL,KYTU INT 21h ENDM b.Sử dụng: INKT MACRO KYTU MOV AH,2 MOV DL,KYTU INT 21h ENDM .CODE INKT ‘?’ Chöông 6: Vieát caùc Macro Định nghĩa một số Macro cho một số nhóm lệnh thường dùng 3. Xuất chuỗi ra màn hình: a. Macro: INCHUOI MACRO CHUOI MOV AH,9 LEA DX,CHUOI INT 21h ENDM b.Sử dụng: INCHUOI MACRO CHUOI MOV AH,9 LEA DX,CHUOI INT 21h ENDM .CODE INCHUOI ‘I love ASM$’ Chöông 6: Vieát caùc Macro Định nghĩa một số Macro cho một số nhóm lệnh thường dùng 4. Thoát khỏi chương trình: a. Macro: THOAT MACRO MOV AH,4Ch INT 21h ENDM b.Sử dụng: THOAT MACRO MOV AH,4Ch INT 21h ENDM .CODE THOAT Chöông 6: Vieát caùc Macro Định nghĩa một số Macro cho một số nhóm lệnh thường dùng 4. Thoát khỏi chương trình: a. Macro: INCHUOI MACRO CHUOI MOV AH,9 LEA DX,CHUOI INT 21h ENDM NHAPLIEU MACRO MOV AH,1 INT 21h ENDM THOAT MACRO INCHUOI MSG NHAPLIEU MOV AH,4Ch INT 21h ENDM • Sử dụng Macro để định nghĩa một Macro: Bằng cách sử dụng một Macro tham chiếu đến một macro đã định nghĩa b.Sử dụng: {Macro đã định nghĩa ở bên} .DATA MSG DB ‘Nhan phim $’ .CODE THOAT Chöông 6: Vieát caùc Macro Chỉ dẫn LOCAL - Sử dụng định nghĩa các thành phần/nhãn của chỉ thị bên trong Macro - Đối số/nhãn được định bởi chỉ dẫn LOCAl chỉ hoạt động trong phạm vi Macro - Cú pháp: LOCAL <đối số/nhãn> - Ví dụ: Viết hàm chức năng chia lấy số nguyên bằng phép tính trừ Phương pháp: - Lấy số bị chia trừ số chia - Kiểm tra số bị chia nhỏ hơn số chia? - Nếu chưa, tăng biến đếm lên 1 - Nếu nhỏ hơn, lưu kết quả Ví dụ: Tính kết quả chia lấy nguyên của 9/2 bằng phép tính trừ 9<2 (Sai) 9-2=7 Đếm =1 7<2 (Sai) 7-2=5 Đếm = Đếm+1=2 5<2 (Sai) 5-2=3 Đếm=3 3<2 (Sai) 3-2=1 Đếm=4 1<2 (Đúng) Kết quả: 9/2=4 Chöông 6: Vieát caùc Macro Chỉ dẫn LOCAL CHIA MACRO SBC,SC,KQ LOCAL SOSANH LOCAL THOAT MOV AX,SBC MOV BX,SC XOR CX,CX SOSANH: CMP AX,BX JL THOAT SUB AX,BX INC CX JMP SOSANH THOAT: MOV KQ,CX ENDM .MODEL SMALL .DATA S1 DW 9 S2 DW 2 KQ DW ? .CODE MOV AX,@DATA MOV DS,AX CHIA S1,S2,KQ MOV BX,KQ Chöông 6: Vieát caùc Macro Chỉ dẫn INCLUDE - Trên thực tế, các Macro thường được sử dụng lặp lại trong nhiều chương trình - Để tránh lặp lại việc định nghĩa Macro, liệt kê các Macro trong một thư viện - Phương pháp: Tập hợp các Macro đã định nghĩa là lưu trong một tập tin (Ví dụ: MACRO.LIB) - Sử dụng bằng cách gọi chỉ dẫn INCLUDE: INCLUDE <đường dẫn>\<Tên thư viện> - Ví dụ: File MACRO.LIB lưu tại D:\ASM\LIB, để sử dụng: INCLUDE D:\ASM\LIB\MACRO.LIB INCHUOI MSG NHAPLIEU Chöông 6: Vieát caùc Macro [...]...Chöông 6: Vieát caùc Macro Chỉ dẫn PURGE - Chỉ dẫn INCLUDE xác định tất cả các Macro có trong thư viện Hiện tượng dư thừa với những Macro không sử dụng trong thư viện Chỉ dẫn PURGE giúp xóa đi các Macro không cần thiết Cú pháp: PURGE [ ,Macro2 ,Macro3 , ] - Ví dụ: File MACRO. LIB lưu tại D:\ASM\LIB, có 3 Macro INCHUOI, NHAPLIEU, XUATKYTU, nhưng chương trình chỉ sử dụng macro NHAPLIEU:... D:\ASM\LIB \MACRO. LIB INCHUOI,XUATKYTU MSG ;Xóa Macro ;Không hợp lệ ;Hợp lệ Chöông 6: Vieát caùc Macro Các chỉ dẫn lặp lại trong Macro Chỉ dẫn REPT - Lặp lại một nhóm các chỉ thị Kết thúc bởi khóa ENDM Cú pháp: REPT ENDM - Ví dụ: Macro phát ra 5 lần tiếng Beep: BEEP MACRO MOV AH,2 MOV DL,7 REPT 5 INT 21H ENDM ENDM ;Mã ký tự Beep ;Lặp 5 lần Chöông 6: Vieát caùc Macro Các chỉ dẫn điều kiện trong Macro. .. MOV DX,OFFSET DXADDRESS ENDIF INT 21h ENDM Macro DOS21 lúc này có thể sử dụng để nhập liệu: DOS21 01h Macro DOS21 cũng có thể sử dụng để in chuỗi: DOS21 09h,MSG Chöông 6: Vieát caùc Macro Chỉ dẫn EXITM - - Với điều kiện đúng, trình dịch thoát khỏi Macro/ chỉ thị lặp và tiếp tục xử lý chỉ thị sau ENDM Cấu trúc: IFxx (điều kiện) EXITM ENDM Ví dụ: CHIA MACRO SBC,SC,KQ LOCAL SOSANH LOCAL THOAT IFB SBC... khác chuỗi arg2 - Có thể sử dụng IF và IFE với các toán tử quan hệ EQ (bằng), NE (không bằng), LT (nhỏ hơn), LE (nhỏ hơn hoặc bằng), GT (lớn hơn) và GE (lớn hơn hoặc bằng) Ví dụ: IF exp1 EQ exp2 Chöông 6: Vieát caùc Macro Các chỉ dẫn điều kiện trong Macro Ví dụ: Một số chỉ thị INT 21h cần giá trị trong DX Kiểm tra đối số không rỗng để nạp cho DX DOS21 MACRO DOSFUNC,DXADDRESS MOV AH,DOSFUNC IFNB DXADDRESS... Macro - Cú pháp: IFxx (điều kiện) ELSE ENDIF - Các chỉ dẫn thường dùng 1 IF expression : Thực thi khi biểu thức cho kết quả khác 0 2 IFE expression: Thực thi khi biểu thức cho kết quả bằng 0 3 IFB argument: Thực thi khi đối số trống 4 IFNB argument: Thực thi khi đối số không trống 5 IFIDN arg1,arg2: Thực thi khi chuỗi arg1 giống chuỗi agr2 6 IFDIF arg1,arg2: Thực thi khi chuỗi arg1 khác chuỗi arg2 - Có . Chöông 6: Vieát caùc Macro Chỉ dẫn INCLUDE - Trên thực tế, các Macro thường được sử dụng lặp lại trong nhiều chương trình - Để tránh lặp lại việc định nghĩa Macro, liệt kê các Macro trong. thư viện - Hiện tượng dư thừa với những Macro không sử dụng trong thư viện - Chỉ dẫn PURGE giúp xóa đi các Macro không cần thiết. - Cú pháp: PURGE < ;Macro1 > [ ,Macro2 ,Macro3 , ] - Ví dụ:. lệ Chöông 6: Vieát caùc Macro Các chỉ dẫn lặp lại trong Macro - Lặp lại một nhóm các chỉ thị - Kết thúc bởi khóa ENDM - Cú pháp: REPT <Số lần lặp> ENDM - Ví dụ: Macro phát ra