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

求教一个问题:十进制到十六进制数转换的程序

小鸟向前飞 发布于 2007-12-04 20:54, 2571 次点击
转换几次以后就返回系统
从键盘取得一个十进制数,然后把这个十进制数转换成十六进制数显示出来
具体程序:
decihex   segment
   assume   cs:  decihex
main   proc   far
repeat:
   call   decibin
   call   crlf
   call   binihex
   call   crlf
   sub   dx,dx    ;用于控制转换次数
   push   dx
   mov   dx,3
   dec   dx
   cmp   dx,1
   jnb   repeat  
   ret
main   endp
decibin   proc   near         ;从键盘取得十进制数,保存在BX中
   mov   bx,0
newchar:
   mov   ah,1
   int   21h
   sub   al,30h
   jl   exit
   cmp   al,9d
   jg   exit
   cbw
   
   xchg   ax,bx
   mov   cx,10d
   mul   cx
   xchg   ax,bx
   add   bx,ax
   jmp   newchar
exit:
   ret
decibin   endp
binihex   proc   near           ;用十六进制形式显示BX中的数
   mov   ch,4
rotate:
   mov   cl,4
   rol   bx,cl
   mov   al,bl
   and   al,0fh
   add   al,30h
   cmp   al,3ah
   jl   printit
   add   al,7h
printit:
   mov   dl,al
   mov   ah,2
   int   21h
   dec   ch
   jnz   rotate
binihex   endp
crlf   proc   near
   mov   dl,0dh
   mov   ah,2
   int   21h
   mov   dl,0ah
   mov   ah,2
   int   21h
   ret
crlf   endp
decihex   ends
   end   main


为什么蓝色部分不能控制转换次数,程序每次都无限循环进行?
6 回复
#2
永夜的极光2007-12-04 20:56
mov   dx,3
   dec   dx
   cmp   dx,1
这三句反复执行到,dx的值一直在3和2之间变化
#3
小鸟向前飞2007-12-04 21:41
楼上能说具体点吗?
#4
轻飘飘2007-12-04 22:05
十进制转成十六进制程序
 PUSH DX
 MOV DX,OH
 INC COUNT
 CMP COUNT,5
#5
小鸟向前飞2007-12-05 09:27
sub   dx,dx
   push   dx
   mov   dx,3
repeat:
   call   decibin
   call   crlf
   call   binihex
   call   crlf
   dec   dx
   cmp   dx,1
   jnb   repeat
   ret
写成这样,还是无限次循环,等待解答...

[[italic] 本帖最后由 小鸟向前飞 于 2007-12-5 09:35 编辑 [/italic]]
#6
小鸟向前飞2007-12-05 21:10
继续等解答
#7
thinksoft2008-05-25 16:09
1