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

问题描述 投票:-1回答:1

我有一个关于以下浮点指令的问题和'0'被转移到f2(浮点寄存器)

fld f2,0(Rx)

我从研究中得到的这条指令的知识是fld将0(Rx)的内容加载到f2,我知道Rx是整数/地址寄存器。如果将数字0存储到f2或将Rx的内容存储在0,我感到很困惑

assembly mips intel
1个回答
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汇编器使用$作为寄存器名称的前缀。

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

© www.soinside.com 2019 - 2024. All rights reserved.