【发布时间】:2024-04-17 03:20:01
【问题描述】:
想知道如何在 32 位 I86 架构上内联 fbstp 的使用。我尝试了类似的东西
int main( )
{
double foo = 100.0;
long bar = 0;
asm( "pushl %1; fbstp %0"
: "=m"(bar)
: "r"(foo)
);
...
但是 bar 没有改变。我已经尝试阅读我能找到的所有内容,但大多数示例只是简单地将两个整数加在一起。我找不到任何关于将操作数推入堆栈以及当像 fbstp 这样的指令将 80 位数据写回内存时我应该做什么(即使用什么 C 类型)以及如何在 asm 语法中指定它的内容.
同样在 x86-64 上似乎有 pushq 而没有 pushl,但 fbstp 仍然存在,而 fbstq 不存在。 64 位还有其他的魔力吗?
【问题讨论】:
-
我在这里不是专家,但是 pushl 将值推送到用户堆栈,而 fbstp 从浮点堆栈中弹出,所以你不应该先执行 fld och fild 而不是 push ?
标签: gcc assembly x86 inline-assembly