Nasm: 如何从内存中将 long double 加载到 FPU
Nasm: how to load a long double into the FPU from memory
我正在 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 编译器对 long double 使用 12 个字节,如何将它放入 80 位?
要明确指定大小,请在 NASM 中使用以下形式:
fld TWORD [eax] ; load 10 bytes from [eax]
正如您所指出的,FPU 堆栈寄存器是 80 位宽。 C编译器选择12字节,是因为栈帧的数据对齐要求。
我正在 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 编译器对 long double 使用 12 个字节,如何将它放入 80 位?
要明确指定大小,请在 NASM 中使用以下形式:
fld TWORD [eax] ; load 10 bytes from [eax]
正如您所指出的,FPU 堆栈寄存器是 80 位宽。 C编译器选择12字节,是因为栈帧的数据对齐要求。