除以 10 时 EAX 寄存器的问题

Issues with EAX register when dividing by 10

我正在做一个简单的程序,我在其中获取用户输入的数字基数和基数,然后处理它以输出基数 2、基数 8、基数 10 和基数 16。例如,我将输入 5 的数字基数和 1234 的数字。我遇到的问题涉及在处理以 10 为基数的输出时的 eax 寄存器。所有其他碱基(碱基 2、8 和 16)均正常工作。举个具体问题的例子,我调用DumpRegs输出每次通过的寄存器。

因此,对于上面给出的示例,以 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 为底。

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

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