-1

我对以下浮点指令和正在传输到 f2(浮点寄存器)的“0”有疑问

fld f2,0(Rx)

我从研究中了解到这条指令是 fld 将 0(Rx) 的内容加载到 f2 并且我知道 Rx 是一个整数/地址寄存器。如果数字 0 被存储到 f2 或 Rx 的内容为 0,我只是感到困惑

4

1 回答 1

1

这些操作数看起来有点像 MIPSl.d,而不是 x86。

AT&T 语法中的x86fld看起来像fld 0(%esi),隐含目的地为st0.

x87 堆栈寄存器名称为 st0..st7。x86+x87 没有称为 f2 的寄存器。


另一方面,MIPS 具有整数/指针寄存器 r0..r31 和 FP 寄存器 f0..f31,imm16 + register使用该语法是(经典)MIPS 唯一的寻址模式。


但它也不是 MIPS,因为fld它不是 MIPS 助记符(它是 x87),而且大多数 MIPS 汇编器都将$其用作寄存器名称的前缀。

Like l.d $f2, 0($4)or0($a0)是将与 GAS 或 MARS 组合的正常 MIPS 语法。(并且l.d是 2 个寄存器的双精度加载的伪指令。)

您想要的 MIPS 的实际机器指令是ldc1 $f2, 0($4), 用于将需要对齐的 64 位加载到 $f2 和 $f3 中。


如果它用于任何实际的 ISA,它可能不是 MIPS 或 x86,但我不认识特定的。

但无论如何,这种 asm 语法非常通用:它是加载到 FP 寄存器中,源地址是0 + Rx

于 2019-04-14T21:27:39.287 回答