0
下面的代码返回的“448070899”取代SQRT的值(4),它是2FSQRT没有返回正确的值
segment .data
heeder: db "%d", 0
x dd 16
y dd 4
segment .bss
array resd 10
sum resd 1
SECTION .text
global _main
extern _scanf
extern _printf
_main:
push ebp
mov ebp, esp
fldz
fld dword[y]
fsqrt
fst dword[sum]
mov eax, [sum]
push eax
push heeder
call _printf
add esp, 8
pop ebp
ret
其不返回正确的数.......数它的返回值是448070899.这是不正确的,正确的应该是2 ..因为4的平方根是2。
由于您正在编写程序集,因此您应该找出发现问题的最佳方法 - 并在此过程中学习捆绑包!我建议你调试代码,看看FPU内部发生了什么:如果它按照它应该做的(用平方根替换栈顶值),那么你就会知道FPU运行正常。如果最初的TOS值 - 输入值 - 结果不是您所期望的,那么您必须检查前面的步骤以找出原因。我最后一次听说x86 FPU没有正确执行,是在九十年代的前半期 –