一个获取系统时间的汇编小程序

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:25:43
程序其实很简单,但我不知道在用mov ah,2ch ;
int 21h
取得系统时间后为什么不能直接显示出来,还要进行换算
原代码如下

code segment
assume cs:code
start:
mov ah,2ch ;2ch号功能调用,取系统时间:ch,cl,dh中分别存放时分秒
int 21h
call disptime;调用disptime子程序显示时间
exit:
mov ax,4c00h ;结束程序,返回DOS
int 21h

disptime proc
mov al,ch ;小时的值赋给al
cbw ;al扩展成ax,用做除法的被除数
call bindec
mov dl,':' ;显示":"
mov ah,02h
int 21h
mov al,cl ;分
cbw
call bindec
mov dl,':' ;显示":"
mov ah,02h
int 21h
mov al,dh;秒
cbw
call bindec
ret
disptime endp

bindec proc ////////////?
push ax ;保存寄存器的值(一定要的)
push cx
push dx
mov dx,0 ;被除数高16位置0//////////////?
mov cx,10d ;除数为10d/////////////?
div cx /////////////?
mov bx,dx ;先保存余数/////////////?
mov dl,al ;显示商(即十进制二位数的十位)/////////////?
add dl,30h ;转换成Ascii码/////////////?

取出来的时间是2进制的,如果想显示出来,就要转换成十进制的,然后还要将每一位十进制数转换成相应的ASCII码,才能用2号功能进行显示啊!(因为2号功能的入口参数DL中存放的时待显示字符的ASCII码,也就是说,2号功能只能显示字符)

因为时间都是两位数,所以,把取出来的2进制格式的“时”除以10,商就是十位,余数就是各位喽。然后再分别加上30H不就成了ASCII码了嘛。
“分”和“秒”也是这样变换的。