【发布时间】:2018-04-15 23:48:36
【问题描述】:
我正在尝试理解 FPU,但我很困惑。问题是我从here 了解到,FPU 有自己的堆栈。但例如在这段代码(NASM)中:
global _main
extern _printf
section .data
hellomessage db `Hello World!\n`, 10, 0
numone dd 1.2
digitsign db '%f', 0xA, 0
section .text
_main:
;Greet the user
push hellomessage
call _printf
add esp,4
sub esp, 8
fld dword[numone]
fstp qword[esp]
push digitsign
call _printf
add esp, 12
ret
我必须让sub esp, 8 行为double“腾出空间”,否则程序会崩溃。但是通过这样做,我改变了“常规堆栈”的指针,这对我的两个独立堆栈的想法没有意义。
我确定我不明白某事,但我不知道这是什么。
【问题讨论】:
-
因为您使用了
fstp qword [esp],它从 FPU 堆栈传输到 CPU 堆栈。因此,您需要 CPU 堆栈上的空间。
标签: assembly x86 nasm cpu-registers x87