我有一个关于以下浮点指令的问题和'0'被转移到f2(浮点寄存器)
fld f2,0(Rx)
我从研究中得到的这条指令的知识是fld将0(Rx)的内容加载到f2,我知道Rx是整数/地址寄存器。如果将数字0存储到f2或将Rx的内容存储在0,我感到很困惑
那些操作数看起来有点像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汇编器使用$
作为寄存器名称的前缀。
像l.d $f2, 0($4)
或0($a0)
一样是正常的MIPS语法,将与GAS或MARS组合。 (而l.d
是2个寄存器的双精度加载的伪指令。)
您想要MIPS的实际机器指令是ldc1 $f2, 0($4)
,需要对齐需要的64位加载到$ f2和$ f3。
如果它适用于任何实际的ISA,它可能不是MIPS或x86,但我不认识特定的。
但无论如何,这个asm语法非常普遍:它是FP寄存器的加载,源地址是0 + Rx