注册 登录
编程论坛 汇编论坛

请帮忙解决"取系统时间"问题

Karl168 发布于 2008-02-14 08:59, 1126 次点击
用汇编取系统时间却发现取出来的时间不对,自己调试了很久却找不到问题的原因.请大侠们帮忙解决呀!另外采用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
1 回复
#2
Karl1682008-02-16 09:19
怎么没人回应啊?5555555
1