2010-06-14 2 views
3

Удивительно, как встроить использование fbstp в 32-битную архитектуру I86. Я пробовал что-то вродеC встроенная сборка инструкции x86 fbstp

int main() 
{ 
    double foo = 100.0; 

    long bar = 0; 

    asm("pushl %1; fbstp %0" 
     : "=m"(bar) 
     : "r"(foo) 
     ); 

    ... 

Но бар не изменился. Я пробовал читать все, что я могу найти на этом, но в большинстве случаев просто делайте такие вещи, как добавление двух целых чисел. Я не могу найти какой-либо разговор о том, как нажимать операнды на стек, и что я должен делать, когда инструкция, например fbstp, записывает 80 бит данных обратно в память (т. Е. Какой тип C использовать) и как указывать ее в синтаксисе asm ,

Также на x86-64, похоже, есть pushq и нет pushl, но fbstp все еще существует, а fbstq - нет. Есть еще одна магия для 64 бит.

+0

Я не эксперт, но на PushL выталкивает значение пользовательского стека во время fbstp выскакивает из стек с плавающей точкой, так что вы не должны сначала делать fld och fild вместо push? – Olof

ответ

Смежные вопросы