实验需求如下:
编程,以“年/月/日 时:分:秒”的格式显示时间
注意:CMOS RAM中储存着系统的配置信息,除了保存时间信息的单元外,不要向其他单元写入内容,否则将引起一些系统错误
代码如下:
【注意】int 7ch为实验13(1)中自定义的子程序,功能为“在屏幕上显示以0结尾的一个字符串”,代码详见:【汇编语言 王爽】实验13代码 中的实验(1)lab13-1.Asm 代码
assume cs:code
code segment
char:
db "yy/mm/dd hh:mm:ss",0
unit_no:
db 9,8,7,4,2,0
start:
;ds:bx指向unit_no
;ds:si指向char
mov ax,cs
mov ds,ax
mov bx,offset unit_no
mov si,offset char
mov cx,6
s:
mov al,[bx]
;从CMOS处获取时间
call get_time
;修改char字符串中的值
mov [si],ah
inc si
mov [si],al
add si,2
;ds:bx指向下一个时间单位
inc bx
loop s
;设置参数,int 7ch来显示字符串
mov dh,12 ;行号0
mov dl,40 ;列号0
mov cl,2 ;颜色:Green
mov si,offset char ;ds:si指向要显示的字符串首地址
int 7ch
mov ax,4c00h
int 21h
;子程序名称:get_time
;功能:从CMOS RAM中获取相应unit_no的时间
;参数:al=unit_no
;返回值:ah=十位数,al=个位数
get_time:
push cx
;从CMOS中取出相应数值
out 70h,al
in al,71h
;对BCD码值进行处理(移位、+30h),使其转换为ASCII码
;移位
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
;+30h
add ah,30h
add al,30h
pop cx
ret
code ends
end start
在win 10 dosbox环境下的运行结果(红框中显示系统时间):