Assembly I';我正在制作一个程序,需要用10除法,但它会抛出浮点错误

Assembly I';我正在制作一个程序,需要用10除法,但它会抛出浮点错误,assembly,x86,x86-64,nasm,Assembly,X86,X86 64,Nasm,我在NASM中使用汇编x86,我想让它做的是将2个数字除以10,但它会抛出一个浮点异常(内核转储) 它是如何写的,现在它应该只要求我两个数字,然后它应该把字符变成整数,然后再变成字符。但是,它只给了我一个浮点错误。您的一条div指令位于toAscii,div eax。div指令将edx:eax中的无符号数除以操作数(eax)。对于您的值,它将导致溢出(因为结果太大,无法放入eax)和您得到的异常 看起来您想将edx除以ecx。这应该是 mov eax,edx xor edx,edx ; z

我在NASM中使用汇编x86,我想让它做的是将2个数字除以10,但它会抛出一个浮点异常(内核转储)


它是如何写的,现在它应该只要求我两个数字,然后它应该把字符变成整数,然后再变成字符。但是,它只给了我一个浮点错误。

您的一条
div
指令位于
toAscii
div eax
div
指令将
edx:eax
中的无符号数除以操作数(
eax
)。对于您的值,它将导致溢出(因为结果太大,无法放入
eax
)和您得到的异常

看起来您想将
edx
除以
ecx
。这应该是

mov eax,edx
xor edx,edx    ; zero out upper 32 bits of numerator
div ecx        ; divide edx:eax by ecx
这将在
eax
中留下结果,其余部分在
edx
中。该过程的其余部分将需要一些适当的更改以获得预期的输出,我将此作为练习留给读者

mov eax,edx
xor edx,edx    ; zero out upper 32 bits of numerator
div ecx        ; divide edx:eax by ecx