2010-06-14 93 views
3

想知道如何在32位I86體系結構上內聯使用fbstp。我試過類似C inline彙編x86 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位還有其他的魔法嗎?

+0

我在這裏不是什麼專家,但pushl推的值到用戶棧,而FBSTP持久性有機污染物從浮點堆棧,所以你不應該先做一個fld或者fild而不是push? – Olof 2010-06-14 21:08:33

回答