我是新来的汇编语言,并试图通过代码的方式来学习它,我发现了一段代码,其表示将二进制到十进制和输出转换为ASCII上筛选。下面是代码这个程序很好吗?
org 100h
push ax
push cx
push dx
push si
mov dx,10
mov ax,dx ;Assuming number to print starts in DX
mov si,10 ;decimal 10
xor cx,cx ;Initialize count at 0
NonZero:
xor dx,dx ;Clear last remainder
div si
push dx ;Save digits in reverse order
inc cx
or ax,ax ;Is original number down to 0 yet?
jnz NonZero ;No, continue looping
mov ah,02h
WriteDigitLoop:
pop dx
add dx,"0" ;Convert to ASCII
int 21h ; and print
loop WriteDigitLoop
EndDecimal:
pop si
pop dx
pop cx
pop ax
现在我们假设,dx的初始值是10,所以我猜输出应该是2。 但实际产出是10,这是根据代码流明显。
如果这是一个问题,那么我应该做出什么样的改变来纠正这一点。
你是如何将'dx'设置为'10'的?如果它的字面意思是'10',那么你可能将它设置为十进制,它在输入处转换为'dx'中的'1010'二进制数,然后再转换回十进制数并打印。另外,只要确定并取决于您的汇编程序,请仔细检查'add dx,“0”'指令。 '“0”通常表示一个字符串,而“0”是一个字符(这是你想要的)。但我认为你的问题在于你给它一个十进制数字来开始。 – lurker
@mbratch刚刚更新了我在DosBOx0.7上使用NASM运行的代码,并且检查了添加dx,“0”(dx = 1)给了我49作为DosBox的输出。 –
投票关闭,为什么此代码无法正常工作。 –