一段代码与自己想要的结果不符,求教

chanshimudingxi 2010-06-03 11:52:11

CODES SEGMENT
ASSUME CS:CODES
START:
;此处输入代码段代码
call hexibin
call crlf
call binidec
call crlf


hexibin proc near
mov bx,0
newchar:
mov ah,01h
int 21h
sub al,30h
jl exit
cmp al,10d
jl add_to
sub al,27h
cmp al,0ah
jl exit
cmp al,10h
jge exit
add_to:
mov cl,4
shl bx,cl
mov ah,0;ax由ah,al组成,而al中存的是输入字符所代表的十六进制的值,所以ah得初始化为0,这样ax的结果才正确
add bx,ax
jmp newchar
exit:
ret
hexibin endp



binidec proc near
mov cx,10000d;BX寄存器是16位,最大值也只有65535
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
binidec endp

dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al;商在AX寄存器中,而要显示的字符的ASCII码须放在dl寄存器中,因为商是在0~9之间,故只需把AX的低位AL给DL就可以
add dl,30h
mov ah,02h
int 21h
ret
dec_div endp

crlf proc near
mov al,0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp

CODES ENDS
END START

在masm下我输入30,为什么输出为000488呢?而不是00048
...全文
77 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2010-06-04
  • 打赏
  • 举报
回复
crlf proc near
mov al,0ah ;* 因为这里应该是 mov dl, 0ah
mov ah,02h
int 21h
mov dl,0dh
mov ah,02h
int 21h
ret
crlf endp

21,459

社区成员

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

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