Assembly 关于简单浮点加载指令的混淆

Assembly 关于简单浮点加载指令的混淆,assembly,mips,intel,Assembly,Mips,Intel,我对下面的浮点指令和正在传输到f2浮点寄存器的“0”有疑问 fld f2,0(Rx) 我从研究中了解到,fld将0Rx的内容加载到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和

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

fld f2,0(Rx)
我从研究中了解到,fld将0Rx的内容加载到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+寄存器是经典MIPS的唯一寻址模式

但它也不是MIPS,因为fld不是MIPS助记符,而是x87,而且大多数MIPS汇编程序在寄存器名上使用$作为前缀

与l.d$f2一样,0$4或0$a0是正常的MIPS语法,将与气体或火星组装。l.d是2寄存器双精度加载的伪指令

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

如果是针对任何实际的ISA,它可能不是MIPS或x86,但我不认识一个特定的


但是不管怎样,这个asm语法是非常通用的:它是一个加载到FP寄存器的程序,源地址是0+Rx

0只是应用到Rx的一个偏移量。内存访问中使用的地址为Rx+0。fld不是有效的MIPS助记符。更新了我的答案。你从哪里得到这个指令的,为什么你认为它是x86?也许不是MIPS,而是RISC-V或其他什么?许多机器都有f寄存器。