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沒有正確執行,是在九十年代的前半期 –