《汇编语言第三版》王爽学习历程——实验14

访问CMOS RAM

要求:
编程,以“年/月/日 时:分:秒”的格式,显示当前的日期,时间。

个人分析:
我是以一个输出模板’yy/mm/ss hh:mm:ss’, 0,然后把提取到的数字转换字符都’扔’到模板中,方便后续一起输出,调用一个输出的子程序就可以搞定。
提醒一点,读出来的数是一个2位的十进制数,由课本中提到的BCD码,可以知道,低4位代表的是十进制的个位,高4位是十进制的十位,分别转换成字符后,年月日时分秒其实一个占一个字型数据。
实验中大部分的知识甚至一些程序编写,前面的案列中都有提到,就不多说了。这里就直接上代码了。

汇编代码:

assume cs:code

data segment
    db 'yy/mm/ss hh:mm:ss', 0   ;输出模板
data ends

code segment
 start:
        mov ax, data
        mov ds, ax
        mov si, 0               ;初始化输出模板

        mov bx, 9               ;方便循环操作
        mov dx, 3               ;计数
        mov cl, 4

    y_m_s:
        mov al, bl
        out 70h, al             ;给70h端口送入9,访问CMOS-9号地址
        in al, 71h              ;拿出9号地址中间的内容
        mov ah, al

        shr ah, cl              ;只需要前面4个字节
        and al, 00001111b       ;只需要后面4个字节

        add ah, 30h
        add al, 30h

        mov [si], ah            ;放入模板字符串中
        mov [si+1], al
        add si, 3
        dec bx
        dec dx

        cmp dx, 0               ;判断循环是否结束
        je h_m_s_start

        jmp short y_m_s

    h_m_s_start:
        mov bx, 4
        mov dx, 3

    h_m_s:
        mov al, bl
        out 70h, al
        in al, 71h
        mov ah, al

        shr ah, cl
        and al, 00001111b

        add ah, 30h
        add al, 30h

        mov [si], ah
        mov [si+1], al
        add si, 3
        sub bx, 2
        dec dx

        cmp dx, 0
        je print_str_start
        jmp short h_m_s

        print_str_start:
        call print_str

        mov ax, 4c00h
        int 21h

---------------pirnt_str------------------
 print_str:
        push es
        push ax
        push cx
        push di
        push si

        mov ax, 0b800h
        mov es, ax                  ;初始化显存

        mov si, 0
        mov di, 36*2                ;确定列
        mov cx, 0                   ;结束输入的条件

    print_loop:
        mov cl, [si]
        jcxz print_ok
        mov es:[160*12][di], cl
        inc si
        add di, 2

        jmp short print_loop

    print_ok:
        pop si
        pop di
        pop cx
        pop ax
        pop es
        ret

code ends
end start

运行结果:
《汇编语言第三版》王爽学习历程——实验14_第1张图片

你可能感兴趣的:(《汇编语言第三版》王爽学习历程——实验14)