; 在某行显示日期,时间 ; 代码里面我写死成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