x86 fbstp指令的C内联汇编
想知道如何在 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 位还有其他魔法吗?
Was wondering how to inline a usage of fbstp on a 32 bit I86 architecture. I tried something like
int main( )
{
double foo = 100.0;
long bar = 0;
asm( "pushl %1; fbstp %0"
: "=m"(bar)
: "r"(foo)
);
...
But bar is unchanged. I have tried reading everything I can find on this but most example simply do things like add two integers together. I can’t find any that talk about pushing operands onto the stack and what I should be doing when an instruction like fbstp writes 80 bits of data back to memory ( i.e. what C type to use ) and how to specify it in the asm syntax.
Also on x86-64 there seems to be a pushq and no pushl but fbstp still exists whereas fbstq does not. Is there some other magic for 64 bit.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里有一个例子: http://bap .ece.cmu.edu/download/bap-0.1/VEX/test/test-i386.c
这似乎建议这样做:
There's an example here: http://bap.ece.cmu.edu/download/bap-0.1/VEX/test/test-i386.c
which seems to suggest doing something like this: