我正在做一个简单的程序,我获取数字基数和基数的用户输入,然后处理它输出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一起出现。
答案 0 :(得分:2)
DIV EBX
不只是将EAX除以EBX,而是将EDX中的64位数字划分为:EAX。从DL获取提醒后,您的代码应将EDX设置为零。
此外,您的寄存器转储器需要修复,因为它不输出EAX的全部内容(它应该是40000013h / Ah,即66666668h,或者您使用的是16位除法指令(DIV BX
)而不是32位除法指令,它不会触及EAX的上半部分。