8086汇编 显示时间 --- 王爽 《汇编语言》实验14

; 在某行显示日期,时间
; 代码里面我写死成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
原文地址:https://www.cnblogs.com/Blithe-Chiang/p/13596899.html