Nasm:如何从内存中将一个long double加载到FPU中

时间:2016-11-09 21:21:45

标签: c nasm fpu long-double

我在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位?

1 个答案:

答案 0 :(得分:3)

要明确指定大小,请在NASM中使用以下格式:

fld TWORD [eax] ; load 10 bytes from [eax]

正如您所指出的,FPU堆栈寄存器为80位宽。由于堆栈帧的数据对齐要求,C编译器选择12个字节。