Bài tập 1: đọc giờ hệ thống, xuất ra màn hình kết quả theo định dạng: Bay gio la: hh:mm
----------------------------
Các bước:
-
Xuất câu thông báo bằng hàm 9, ngắt 21
-
Đọc thời gian bằng hàm 2Ch, ngắt 21, giờ nằm
trên CH, phút trên CL
-
Đổi giờ (hệ 16) trên CH sang hệ 10, in ra màn
hình
-
Đổi phút (hệ 16) trên CL sang hệ 10, in ra màn
hình
------------------------------
//nhập chuỗi vào offset 300
//gõ lệnh “ a” để nhập mã hợp
ngữ
//gán offset của chuỗi kí tự
“Bay gio la:” tới thanh ghi DX
MOV DX, 300
//gọi hàm 9h của ngắt 21 để in
ra màn hình chuỗi kí tự trên
MOV AH, 9
INT 21
//gọi hàm 2Ch, ngắt 21
để đọc thời gian hệ thống
//giờ để trên CH (24
giờ), phút để trên CL
MOV AH, 2C
INT 21
//cất CX vào STACK, để giữ giá trị CX đã đọc được,
//vì các thao tác tiếp
theo sẽ làm thay đổi giá trị của CX
PUSH CX
//đổi giờ đang ở hệ 16
sang hệ 10 và xuất,
//thực hiện bằng
cách chia giờ cho 10
//thương nằm trên AL, số dư nằm trên AH
//viết [thương + số
dư] chính là kết quả ở hệ 10
//ví dụ: có một số hệ
16 là 13h, 13h/10 = 1 dư 9, nghĩa là 19 giờ.
//xóa thanh ghi AX
XOR
AX, AX
//chuyển giờ từ CH
sang AL (số
bị chia phải nằm trên AX)
MOV AL, CH
//số chia để trên CL,
giá trị là 10
MOV CL, A
//lấy AX/CL, nghĩa là lấy giờ/10, thương để trên AL,
//số dư để trên AH
DIV CL
//cất AX vào STACK, để
giữ lại kết quả của phép chia vừa thực hiện
PUSH AX
//Xuất AL và AH dạng ASCII, đây
chính là 2 số chỉ giờ
//Xuất AL
//xóa sạch DX
XOR DX, DX
//chuyển AL sang DL
MOV DL, AL
//chuyển DL sang dạng
ASCII
ADD DL, 30
//hàm 2 ngắt 21 để
xuất kí tự
MOV AH, 2
INT 21
//xuất AH
//xóa DX
XOR DX, DX
// lấy kết quả của
phép chia đã cất trong STACK, để xuất số dư nằm trên AH
POP DX
//xóa CX
XOR CX, CX
//gán số lần dịch phải
vào biến CL, dịch phải 8 bit
MOV CL, 8
//dịch phải DX 8 bit
SHR DX, CL
//chuyển DL sang mã ASCII
ADD DL, 30
//gọi hàm 2, ngắt 21
để xuất kí tự
MOV AH, 2
INT 21
//xuất dấu “:” mã ASCII
là 3A
MOV DL, 3A
MOV AH, 2
INT 21
//xuất phút
//xóa sạch AX
XOR AX, AX
//lấy phút trong STACK
ra AX
POP AX
//xóa AH
AND AX,
00FF
//gán 10 vào CL
MOV CL, A
//chia AL cho 10
DIV CL
//cất AX vào STACK, để
lần lượt xuất thương và số dư
//đang nằm trên AX
PUSH AX
//xuất thương trên AL
//xóa DX
XOR DX, DX
//chuyển thương qua DL
MOV DL, AL
//chuyển DL sang mã
ASCII
ADD DL, 30
//gọi hàm 2, ngắt 21
để xuất
MOV AH, 2
INT 21
//xuất số dư trên AH
//xóa DX
XOR DX, DX
//lấy thương + số dư
trong STACK ra DX
POP DX
//số lần dịch phải là
8
MOV CL, 8
//dịch phải DX, 8 bit
SHR DX, CL
//chuyển DL sang mã
ASCII
ADD DL, 30
//gọi hàm 2, ngắt 21
để xuất
MOV AH, 2
INT 21
--------------------
2014/4/1