我对以下浮点指令以及正在转移到f2(浮点寄存器)中的“ 0”有疑问
fld f2,0(Rx)
根据我的研究,我对该指令的了解是fld将0(Rx)的内容加载到f2,并且我知道Rx是整数/地址寄存器。如果将数字0存储到f2或将Rx的内容存储在0,我只是感到困惑
答案 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