我是汇编语言的新手并试图通过代码学习它,我找到了一段代码,它说它将二进制转换为十进制并输出为ascii到屏幕.Below是代码
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,这在代码流程中很明显。
如果这是一个问题,那么我应该做出哪些改变来纠正这个问题。
答案 0 :(得分:1)
程序看起来很好。
但是,您的输入不正确。在这条指令中:
mov dx,10
您将输入设置为10
十进制,但您打算将其设置为10
二进制。此时dx
中的二进制值为1010
(因为您将其设置为10
十进制)。所以输出结果是10
,这是你所期望的。如果您想将dx
设置为10
二进制文件,则可以执行以下操作:
mov dx,10b
然后,当您运行程序时,输出应为2
。