我在nasm中编写一个函数,将从32位ansi C调用。
C中的函数原型如下所示:
long double scalar(int n, long double *x)
其中x是指向long doubles
数组的指针。
当我尝试将单个long double
加载到FPU时会出现问题:
mov ecx, [esp+8] ; n
mov eax, [esp+12] ; *x
fld [eax] ; ERROR: operation size not specified
我应该如何指定尺寸?我的C编译器使用12个字节作为long double,如何将它装入80位?
答案 0 :(得分:3)
要明确指定大小,请在NASM中使用以下格式:
fld TWORD [eax] ; load 10 bytes from [eax]
正如您所指出的,FPU堆栈寄存器为80位宽。由于堆栈帧的数据对齐要求,C编译器选择12个字节。