关于简单浮点加载指令的困惑

时间:2019-04-14 19:20:40

标签: assembly mips intel

我对以下浮点指令以及正在转移到f2(浮点寄存器)中的“ 0”有疑问

fld f2,0(Rx)

根据我的研究,我对该指令的了解是fld将0(Rx)的内容加载到f2,并且我知道Rx是整数/地址寄存器。如果将数字0存储到f2或将Rx的内容存储在0,我只是感到困惑

1 个答案:

答案 0 :(得分:1)

这些操作数看起来像MIPS l.d ,而不是x86。

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

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


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


但这不是MIPS,因为fld不是MIPS助记符(x87),并且大多数MIPS汇编程序都将$用作寄存器名称的前缀。 / p>

类似于l.d $f2, 0($4)0($a0)的普通MIPS语法,将与GAS或MARS结合在一起。 (并且l.d是2寄存器双精度加载的伪指令。)

对于MIPS来说,实际的机器指令是ldc1 $f2, 0($4),用于将对齐要求的64位装入$ f2和$ f3。


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

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