帮帮忙,十进制转二进制

wibnmo 2010-05-25 10:35:03

decibin proc near
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

《IBM-PC汇编语言程序设计》里的一个小程序。是把十进制转换为十六进制,然后输出。
这一小块是程序的一部分,看不懂。大侠给解释解释呗。

这是整个程序:

;十进制转换为十六进制
;****************************
decihex segment
assume cs:decihex
main proc far
repeat: call decibin
call crlf
call binihex
call crlf
jmp repeat
main endp
;----------------------------
decibin proc near
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
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
ret
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
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wibnmo 2010-05-25
  • 打赏
  • 举报
回复
谢谢谢谢,我好好看看。。
zara 2010-05-25
  • 打赏
  • 举报
回复
decibin     proc    near
mov bx,0 ; 用来存放累加和的,初始为 0
newchar: mov ah,1
int 21h ; 读入一个字符按键
sub al,30h ; 小于 '0' ?
jl exit ; 是, 非数字字符,结束
cmp al,9d ; 大于 9 ?前面减过 30h 了,所以对应原始的 '9' 字符
jg exit ; 是, 非数字字符,结束
cbw ; AL 扩展到 AX. 由于 AL 我[0,9], 所以 AH=0
xchg ax,bx ; 上个累加和 与 当前值
mov cx,10d
mul cx ; 上个累加和×10
xchg ax,bx
add bx,ax ; 加现在的值
jmp newchar
exit: ret
decibin endp
; 这个, 还是进调试软件,单步运行, 注意看 AX 和 BX 中值的变化更直观.
; 比如输入 291 (123h), BX 中的值的变化为 0 - 1 - 12 - 123
wibnmo 2010-05-25
  • 打赏
  • 举报
回复
弄明白了。。结帖。。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧