MỘT SỐ VÍ DỤ
Ví dụ 1: Giả sử hàm X của ngắt Y khi được gọi sẽ trả về trong cặp thanh ghi ES:SI địa chỉ của vùng nhớ chứa tên của nhà sản xuất (nhãn hiệu) của vi xử lý đang sử dụng trên máy tính hiện tại, tên này dài không quá 8 kí tự.
Các lệnh sau đây sẽ in tên nhà sản xuất nói trên ra màn hình:
Mov Ah, X ; hàm cần gọi được đưa vào thanh ghi ah
Int Y ; gọi ngắt Y với hàm X
;--------------------
Mov Cx, 8 ; tên dài không quá 8 kí tự
Mov Ah, 02 ; dùng hàm 02/21h để in kí tự ra nàm hình
LapIn:
Mov Dl, Byte PTR ES:[SI]
Int 21h
INC SI ; đến kí tự tiếp theo
Loop LapIn
;------------------------------------
Ví dụ 2: Giả sử hàm X của ngắt Y khi được gọi với AL = 1 (được gọi là hàm con) sẽ trả về trong cặp thanh ghi ES:DI địa chỉ của vùng nhớ chứa ngày-tháng-năm sản xuất ROM-BIOS đang sử dụng trên máy tính hiện tại. Đồng thời hàm/ngắt này cũng cho biết số kí tự trong xâu ngày-tháng-năm trong thanh ghi BX.
Các lệnh sau đây sẽ in xâu ngày-tháng-năm nói trên ra màn hình:
Mov Ah, X ; hàm cần gọi được đưa vào thanh ghi ah
Mov Al, 1 ; gọi hàm X với Al = 1
Int Y ; gọi ngắt Y với hàm X
;--------------------
Mov Cx, Bx ; đưa số kí tự của xâu ngày-tháng-nămvào Cx
Mov Ah, 02 ; dùng hàm 02/21h để in kí tự ra nàm hình
LapIn:
Mov Dl, Byte PTR ES:[DI]
Int 21h
INC DI ; đến kí tự tiếp theo
Loop LapIn
;-------------------------------------
Ví dụ 3: Hàm 39h của ngắt 21h được sử dụng để tạo thư mục con trên đĩa. Hàm này quy định: DS:DX chứa xâu tên thư mục cần tạo, bao gồm cả đường dẫntìm đến thư mục này, xâu này kết thúc bởi trị 0. Nếu việc tạo không thành công thì Cf = 1, khi đó thanh ghi Ax sẽ chứa mã lỗi.
Các lệnh sau đây sẽ tạo ra thư mục con BTCB trong thư mục ASSEM trên thư mục gốc ổ đĩa D. Chương trình phải khai báo biến TenTM, chứa xâu tên thư mục cần tạo như sau:
TenTM DB ‘D:\ASSEM\BTCB’,0
Các lệnh:
Mov Ax, Seg TenTM
Mov DS, Ax
Mov Dx, Offset TenTM
Mov Ah, 39h
Int 21h
;-------------------------
Jc TB_Loi ; nếu CF = 1 thì việc tạo bị lỗi
<In ra thong bao hoan thanh>
Jmp KetThuc
TB_Loi:
<In ra thong bao khong tao duoc thu muc>
KetThuc:
...
;----------------------------------------------------
Ví dụ 4: Sau đây là chương trình dạng COM: In ra tất cả (256) các kí tự có trong bảng mã ASCII:
.Model Small
.Code
ORG 100h
Start:
Jmp Main
TB DB 'Noi dung Bang ma ASCII:',0Ah,0Dh,'$'
Main Proc
Mov Ah, 09h
Lea Dx, TB
Int 21h
;--------------------------
Mov Cx, 256
Mov Ah, 02
Mov Dl, 0
LapIn:
Int 21h
;-----------------
Mov Bl, Dl
Mov Dl, ' '
Int 21h
Mov Dl, Bl
;-----------------
INC Dl
Loop LapIn
;-------------------------
Int 20h
Main Endp
End Start
Ví dụ 5.1: Sau đây là chương trình dạng COM: Nhập vào một xâu kí tự bất kỳ. Sau đó in ra lại chính xâu kí tự vừa được nhập vào nhập. Sử dụng hàm 09/21h để in ra.
.Model Small
.Code
ORG 100h
Start:
JMP Main
TBN DB 'Nhap vao mot xau ki tu: $'
TBX DB 0Ah,0Dh,'Xau vua nhap: $'
Buff DB 100,0,100 Dup (' ')
Main Proc
Mov Ah, 09h
Lea Dx, TBN
Int 21h
;--------------------------
Mov Ah, 0Ah
Lea Dx, Buff
Int 21h
;-------------------------
Mov Cx, 0
Mov Cl, Buff[1]
Add Dx, 2
Mov DI, Dx
Add DI, Cx
Mov Byte PTR [DI], ‘$’
;-------------------------
Mov Ah, 09h
Lea Dx, TBX
Int 21h
;-------------------------
Mov Ah, 09h
Lea Dx, Buff
Add Dx, 2
Int 21h
;-------------------------
Int 20h
Main Endp
End Start
Ví dụ 5.2: Sau đây là chương trình dạng EXE: Nhập vào một xâu kí tự bất kỳ. Sau đó in ra lại chính xâu kí tự vừa được nhập vào nhập. Sử dụng hàm 02/21h để in ra.
.Model Small
.Stack 100h
.Data
TBN DB 'Nhap vao mot xau ki tu: $'
TBX DB 0Ah,0Dh,'Xau vua nhap: $'
Buff DB 100,0,100 Dup (' ')
.Code
Main Proc
Mov Ax,@Data
Mov DS, Ax
;-------------------------
Mov Ah, 09h
Lea Dx, TBN
Int 21h
;--------------------------
Mov Ah, 0Ah
Lea Dx, Buff
Int 21h
;-------------------------
Mov Cx, 0
Mov Cl, Buff[1]
Add Dx, 2
Mov DI, Dx
;--------------------------
Mov Ah, 09h
Lea Dx, TBX
Int 21h
;-------------------------
Mov Ah, 2
Lap_In:
Mov Dl, [DI]
Int 21h
INC DI
Loop Lap_In
;-------------------------
Mov Ah, 4Ch
Int 21h
Main Endp
End
Ví dụ 6: Sau đây là chương trình dạng COM: Nhập vào một kí tự thường, chương trình sẽ in ra kí tự in hoa tương ứng.
.Model Small
.Code
ORG 100h
Start:
Jmp Main
TB1 DB 'Nhap vao mot ki tu thuong: $'
TB2 DB 0Ah,0Dh,'Ki tu hoa tuong ung: $'
Main Proc
Mov Ah, 09h
Lea Dx, TB1
Int 21h
;----------------------
Mov Ah, 01
Int 21h
Mov Bl, Al
;-----------------------
Mov Ah, 09h
Lea Dx, TB2
Int 21h
;----------------------
Mov Ah, 02
Mov Dl, Bl
Sub Dl, 20h
Int 21h
;-------------------------
Int 20h
Main Endp
End Start
Ví dụ 7: Sau đây là chương trình dạng COM: Nhập vào một xâu kí tự sau đó in ra lại xâu đã nhập theo thứ tự đảo ngược.
.Model Small
.Code
ORG 100h
Start:
JMP Main
TBN DB 'Nhap vao mot xau ki tu: $'
TBX DB 0Ah,0Dh,'Xau vua nhap: $'
Buff DB 100,0,100 Dup (' ')
Main Proc
Mov Ah, 09h
Lea Dx, TBN
Int 21h
;--------------------------
Mov Ah, 0Ah
Lea Dx, Buff
Int 21h
;-------------------------
Mov Cx, 0
Mov Cl, Buff[1]
;---------------------------
Mov Ah, 09h
Lea Dx, TBX
Int 21h
;-------------------------
Lea Dx, Buff
Add Dx, 2
Mov DI, Dx
Add DI, Cx
Dec DI
Mov Ah, 02
Lap_In_Nguoc:
Mov Dl, [DI]
Int 21h
DEC DI
Loop Lap_In_Nguoc
;--------------------------------
Int 20h
Main Endp
End Start
Ví dụ 8:,Sau đây là chương trình dạng COM: Nhập vào hai số (số thứ nhất: nhỏ hơn 5; số thứ hai: nhỏ hơn hoặc bằng 5), sau đó in ra tổng của hai số vừa nhập.
.Model Small
.Code
ORG 100h
Start:
Jmp Main
TBN1 DB 'Nhap so hang thu nhat (nho hon 5): $'
TBN2 DB 0Ah,0Dh,'Nhap so hang thu hai (nho hon bang 5): $'
TBX DB 0Ah,0Dh,'Tong cua hai so la: $'
Main Proc
Mov Ah, 09h
Lea Dx, TBN1
Int 21h
Mov Ah, 01
Int 21h
Mov Bl, Al
Sub Bl, 30h
;-------------------------
Mov Ah, 09h
Lea Dx, TBN2
Int 21h
Mov Ah, 01
Int 21h
Sub Al, 30h
Add Bl, Al
;-------------------------
Mov Ah, 09h
Lea Dx, TBX
Int 21h
Mov Ah, 02
Mov Dl, Bl
Add Dl, 30h
Int 21h
;------------------------
Int 20
Main Endp
End Start
---------------------------------------------------
0 Comment:
Đăng nhận xét
Thank you for your comments!