Я пытаюсь выполнить различные операции с ассемблером для блока FPU процессоров Intel, внутри интерфейса с C. Выполняемые операции:
43.001 * 0.00751
0.00000001 * 1.4142135623730951
0.1 + 0.1 + 0.1 − 0.3
Это код C с ассемблером.interface:
#include <stdio.h>
int main(void)
{
double r;
double s;
const double a = 1;
const double b = 0.1;
const double c = 43.001;
const double d = 0.00751;
const double e = 0.00000001;
const double f = 1.4142135623730951;
const double g = 0.3;
__asm__ ("fldl %1;" //cargo a
"fldl %2;" //cargo b
"fldl %3;" //cargo c
"fldl %4;" //cargo d
"faddp;" // suma a con b y lo guarda en st(0)
"fmul st2,st3" // c*d y lo guarda en st(2)
"fstl %0;" : "=m" (r) : "m" (a), "m" (b)
"fstl %1;" : "=m" (s) : "m" (c), "m" (d) //acá creí que se se podia hacer la multiplicación
);
printf("%.16e\n", r);
printf("%.16e\n", s);
return 0;
}
Идея состоит в том, что результат каждой операции сохраняется в позиции стека, но я не смог этого сделать, потому что я не уверен, что синтаксис, например, fmul st2, st3 правильно.Как сохранить каждую операцию в позиции стека, а затем распечатать результаты?