王爽《汇编语言》实验14:访问CMOS RAM

2021-03-01 07:29

阅读:469

标签:当前时间   lang   端口   src   ado   asm   年月日   图片   png   

编程,以“年/月/日 时:分:秒”的格式打印当前时间

代码如下:

assume cs:codesg
datasg segment
str:db ‘0123/56/89 bc:ef:gh$‘
s_p:dw 0,2,5,8,0bh,0eh,11h  ;用来指向str中打印时间的位置
c_p:dw 32h,9,8,7,4,2,0      ;用来指向CMOSRAM中时间信息的位置
datasg ends                 ;CMOSRAM中32h地址存储着纪年信息(年份/100)
                            ;记录c_p和s_p的目的是为了在一个循环中完成所有时间信息的处理
codesg segment              ;c_p和s_p的内容相当于指针
start:
    mov ax,datasg
    mov ds,ax
    xor dx,dx           ;ds:dx->字符串,为调用21h中断9功能做准备

    mov si,offset s_p
    mov di,offset c_p

    mov cx,7            ;纪年、年、月、日、时、分、秒共7次           
s:  mov ax,ds:[di]      ;ds:di->c_p中保存着时间信息在CMOSRAM中的地址,相当于指针的指针
    out 70h,al          ;将从c_p中取出的地址送入70h端口
    in al,71h           ;将时间信息取出到(al)
    call bcd_to_dec     
    add ah,30h          
    add al,30h          ;将数字转换为字符
    mov bx,ds:[si]      ;ds:si->s_p中保存着str中需要被时间信息填充的地址
    mov ds:[bx],ah      
    mov ds:[bx+1],al    ;每个时间信息均为两位数(0-99)
    add di,2            ;ds:di->c_p下一个时间信息在CMOSRAM中的地址
    add si,2            ;ds:si->s_p下一个需要被时间信息填充的地址
    loop s

    mov ah,9            ;9功能
    int 21h             

    mov ax,4c00h
    int 21h

bcd_to_dec:             ;将(al)z中BCD码转换为十进制码,转化后保存到(ah)(al)
    push cx
    mov ah,al
    mov cl,4
    shr ah,cl
    and al,00001111B
    pop cx
    ret
codesg ends
end start

运行截图:
技术图片

王爽《汇编语言》实验14:访问CMOS RAM

标签:当前时间   lang   端口   src   ado   asm   年月日   图片   png   

原文地址:https://www.cnblogs.com/zhengyuanblog/p/14449118.html


评论


亲,登录后才可以留言!