请帮忙解决"取系统时间"问题
用汇编取系统时间却发现取出来的时间不对,自己调试了很久却找不到问题的原因.请大侠们帮忙解决呀!另外采用DOS 中断2AH,日期存放于DL中,教科书上说DL中的值为01-31,请问这01-31是以16进制存放的还是以10进制存放的,比如说今天是14号,DL中的值会是'14'还是'0E'.code segment
assume cs:code
start:
mov ah,2ah ;2ch号功能调用,取系统时间:ch,cl,dh中分别存放时分秒
int 21h
call disptime;调用disptime子程序显示时间
exit:
mov ax,4c00h ;结束程序,返回DOS
int 21h
;====================================================================
disptime proc ;disptime子程序显示时间
mov ax,cx
call bindec1
push dx
mov dl,'-' ;显示":"
mov ah,02h
int 21h
pop dx
mov al,dh ;分
cbw ;符号扩展
call bindec
push dx
mov dl,'-' ;显示":"
mov ah,02h
int 21h
pop dx
mov al,dl ;分
cbw
call bindec
ret
disptime endp
;================================================================================
bindec proc
push ax ;保存寄存器的值
push cx
push dx
mov dx,0 ;被除数高16位置0 Dx:ax
mov cx,10d ;除数为10d
div cx
mov bx,dx ;先保存余数
mov dl,ah ;显示商(即十进制二位数的十位)
or dl,30h ;转换成Ascii码
mov ah,02h ;2号功能调用,显示字符(十位)
int 21h
mov dx,bx ;恢复余数的值(十进制二位数的个位)
add dl,30h ;转换成ASCII码
mov ah,02h ;2号功能调用,显示字符(个位)
int 21h
pop dx ;恢复寄存器的值
pop cx
pop ax
ret ;子程序返回
bindec endp
bindec1 proc
push ax ;保存寄存器的值
push cx
push dx
mov dx,0 ;被除数高16位置0 Dx:ax
mov cx,10d ;除数为10d
div cx
push dx ;先保存余数
mov dx,0 ;被除数高16位置0 Dx:ax
mov cx,10d ;除数为10d
div cx
push dx ;先保存余数
mov dx,0 ;被除数高16位置0 Dx:ax
mov cx,10d ;除数为10d
div cx
push dx ;先保存余数
mov dl,al ;显示商(即十进制二位数的十位)
or dl,30h ;转换成Ascii码
mov ah,02h ;2号功能调用,显示字符(十位)
int 21h
pop dx
add dl,30h ;转换成ASCII码
mov ah,02h ;2号功能调用,显示字符(个位)
int 21h
pop dx
add dl,30h ;转换成ASCII码
mov ah,02h ;2号功能调用,显示字符(个位)
int 21h
pop dx
add dl,30h ;转换成ASCII码
mov ah,02h ;2号功能调用,显示字符(个位)
int 21h
pop dx ;恢复寄存器的值
pop cx
pop ax
ret ;子程序返回
bindec1 endp
code ends
end start