Удивительно, как встроить использование 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 бит.
Я не эксперт, но на PushL выталкивает значение пользовательского стека во время fbstp выскакивает из стек с плавающей точкой, так что вы не должны сначала делать fld och fild вместо push? – Olof