除以10时EAX寄存器的问题

时间:2015-02-17 20:50:02

标签: assembly masm cpu-registers

我正在做一个简单的程序,我获取数字基数和基数的用户输入,然后处理它输出base-2,base-8,base-10和base-16。例如,我将输入5的数字基数和1234的数字。我在处理基数为10的输出时涉及eax寄存器。所有其他基地(基地-2,8和16)正常运作。举一个特定问题的例子,我叫DumpRegs输出每次通过的寄存器。

因此,通过上面给出的示例,base-5和1234个EAX寄存器读取

EAX=000000C2
EAX=00000013
EAX=00006668        // This is obviously wrong because if 13h/Ah the answer 
                    // would be 9, and the EAX register would equal 00000001

我的代码很简单:

xor ebx, ebx
mov ebx, 10
mov esi, 0
Output:     
    div ebx
    mov finalVal[esi], dl
    inc esi
    cmp al, 0
    je EndOut
    jmp Output

在本节之后,我将值转换为ASCII值和WriteChar,但这是问题所在的部分。再次,转换为base-2,base-8和base-16是完美的。这种情况始终与基数10一起出现。

1 个答案:

答案 0 :(得分:2)

DIV EBX不只是将EAX除以EBX,而是将EDX中的64位数字划分为:EAX。从DL获取提醒后,您的代码应将EDX设置为零。

此外,您的寄存器转储器需要修复,因为它不输出EAX的全部内容(它应该是40000013h / Ah,即66666668h,或者您使用的是16位除法指令(DIV BX )而不是32位除法指令,它不会触及EAX的上半部分。