; 在某行显示日期,时间
; 代码里面我写死成12行了
assume cs:code
code segment
cmos_arr:
db 9, 8, 7, 4, 2, 0
char_arr:
; 这个第一个' ' 空格其实是一个占位置用的
db ' ', '/', '/', ' ', ':', ':'
start:
mov cx, 6 ; 总共有 年月日 时分秒 六个时间信息
mov si, 0 ; 当前访问的数组的下标
mov dx, 12 ; 存放列的位置
s: cmp si, 0
je jump ; 如果是第一次循环的话, 跳过打印符号
; 打印符号
mov ax, cs
mov ds, ax
mov bx, offset char_arr
mov al, [bx+si]
mov bx, 0b800h
mov es, bx
mov bx, dx
shl bx, 1
mov byte ptr es:[160*12+bx], al
inc dx ; 列号往后面移一个格子
jump:
; 获取cmos里面的时间信息
mov ax, cs
mov ds, ax
mov bx, offset cmos_arr
mov al, [bx+si]
out 70h, al
in al, 71h ; 读取
mov bx, cx ; 备份一下 cx
mov ah, al
and al, 00001111b
mov cl, 4
shr ah, cl
mov cx, bx ; 恢复 cx
add al, 30h ; 时间的个位
add ah, 30h ; 时间的十位
; 打印时间信息
mov bx, 0b800h
mov es, bx
mov bx, dx
shl bx, 1
mov byte ptr es:[160*12+bx], ah
mov byte ptr es:[160*12+2+bx], al
add dx, 2 ; 列号往后面移两个格子
inc si
loop s
mov ax, 4c00h
int 21h
code ends
end start