关于简单浮点加载指令的困惑
Confusion about simple floating point load instruction
我对以下浮点指令和正在传输到 f2(浮点寄存器)的“0”有疑问
fld f2,0(Rx)
根据我的研究,我对这条指令的了解是 fld 将 0(Rx) 的内容加载到 f2 并且我知道 Rx 是一个 integer/address 寄存器。我只是很困惑,如果数字 0 被存储到 f2 或 Rx 的内容在 0
这些操作数看起来有点像 MIPS l.d
,而不是 x86。
AT&T 语法中的 x86 fld
看起来像 fld 0(%esi)
,隐式目标是 st0
.
x87 堆栈寄存器名称为 st0..st7。 x86+x87 没有名为 f2 的寄存器。
另一方面,MIPS 有 integer/pointer 寄存器 r0..r31,FP 寄存器 f0..f31,imm16 + register
语法是(经典的)MIPS 的唯一寻址模式。
但它也不是 MIPS,因为 fld
不是 MIPS 助记符(它是 x87),而且大多数 MIPS assemblers 使用 $
作为寄存器名称的前缀。
与 l.d $f2, 0()
或 0($a0)
一样是正常的 MIPS 语法,它将 assemble 用于 GAS 或 MARS。 (并且 l.d
是用于双精度加载 2 个寄存器的伪指令。)
您想要的 MIPS 实际机器指令是 ldc1 $f2, 0()
,用于将需要对齐的 64 位加载到 $f2 和 $f3。
如果它用于任何实际的 ISA,它可能不是 MIPS 或 x86,但我不认识具体的。
但无论如何,这个 asm 语法非常通用:它是一个 FP 寄存器的加载,源地址是 0 + Rx
我对以下浮点指令和正在传输到 f2(浮点寄存器)的“0”有疑问
fld f2,0(Rx)
根据我的研究,我对这条指令的了解是 fld 将 0(Rx) 的内容加载到 f2 并且我知道 Rx 是一个 integer/address 寄存器。我只是很困惑,如果数字 0 被存储到 f2 或 Rx 的内容在 0
这些操作数看起来有点像 MIPS l.d
,而不是 x86。
x86 fld
看起来像 fld 0(%esi)
,隐式目标是 st0
.
x87 堆栈寄存器名称为 st0..st7。 x86+x87 没有名为 f2 的寄存器。
另一方面,MIPS 有 integer/pointer 寄存器 r0..r31,FP 寄存器 f0..f31,imm16 + register
语法是(经典的)MIPS 的唯一寻址模式。
但它也不是 MIPS,因为 fld
不是 MIPS 助记符(它是 x87),而且大多数 MIPS assemblers 使用 $
作为寄存器名称的前缀。
与 l.d $f2, 0()
或 0($a0)
一样是正常的 MIPS 语法,它将 assemble 用于 GAS 或 MARS。 (并且 l.d
是用于双精度加载 2 个寄存器的伪指令。)
您想要的 MIPS 实际机器指令是 ldc1 $f2, 0()
,用于将需要对齐的 64 位加载到 $f2 和 $f3。
如果它用于任何实际的 ISA,它可能不是 MIPS 或 x86,但我不认识具体的。
但无论如何,这个 asm 语法非常通用:它是一个 FP 寄存器的加载,源地址是 0 + Rx