我正在尝试为与浮点寄存器有关的机器指令写出MIPS二进制代码。但是虽然我可以找到浮点指令的操作码,但我找不到哪些数字指的是哪个浮点寄存器。我的书和互联网可以告诉我,如果我想参考$ t1,我会使用哪个数字寄存器,但我找不到任何关于如何引用$ f1的信息。
答案 0 :(得分:2)
有32个浮点寄存器:$f0
.. $f31
。但是每个浮点运算都是在单独的处理单元FPU(浮点单元)中完成(在早期的MIPS处理器中),因此您无法使用普通(整数)命令访问浮点寄存器。 FPU命令用于FPU命令,CPU寄存器用于CPU命令。
有图片和透明的描述 http://www.cim.mcgill.ca/~langer/273/12-coprocessors.pdf
所有FPU命令都编码为协处理器指令,用于协处理器1(CP1) 查看http://www.cs.sunysb.edu/~lw/spim/MIPSinstHex.pdf
的第一页和最后一页字段ft(5)fs(5)fd(5)是寄存器代码(全部为5位宽)。 $ f0将被编码为0; $ f31为31(十进制)或0x1f(十六进制)。对于双寄存器值(64位双精度格式),仅记录寄存器对中的第一个寄存器的数量(仅允许偶数寄存器:0,2 ..30)。
操作码的详细表格如下:http://www.math.unipd.it/~sperduti/ARCHITETTURE-1/mips32.pdf(第A-73页)