标签:当前时间 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
运行截图:
标签:当前时间 lang 端口 src ado asm 年月日 图片 png
原文地址:https://www.cnblogs.com/zhengyuanblog/p/14449118.html