我正在做一个简单的程序,我得到一个数字基和基数的用户输入,然后处理它输出基-2,基-8,基-10和基-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,但这是问题所在的部分。再一次,转换为基-2,基-8和基-16是完美的。它总是与基础-10,这是出现的。
发布于 2015-02-17 21:16:11
DIV EBX不仅将EAX除以EBX,还将EDX:EBX中的64位数除以。在接收DL的提醒后,您的代码应该将EDX设置为零。
此外,您的寄存器翻车器需要修复,因为它没有输出EAX的全部内容(应该是40000013h / Ah,即66666668h ),或者您使用的是16位分隔指令(DIV BX),而不是32位分隔指令,后者不会触及EAX的上半部分。
https://stackoverflow.com/questions/28570856
复制相似问题