Doc va xuat gio bang hop ngu


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