-1

我是汇编语言的新手,并试图通过代码来学习它,我发现一段代码说它将二进制转换为十进制并作为 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,根据代码流,这很明显。

如果这是一个问题,那么我应该做些什么改变来纠正这个问题。

4

1 回答 1

1

该程序看起来不错。

但是,您的输入不正确。在本说明中:

mov     dx,10

您将输入设置为10十进制,但您打算将其设置为10二进制。dx此时的二进制值为1010(因为您将其设置为10十进制)。所以输出出来了10,这是你所期望的。如果要设置dx10二进制,可以这样做:

mov     dx,10b

然后当你运行你的程序时,输出应该是2.

于 2013-07-27T20:26:20.453 回答