assembly 在浮点比较指令的MIPS机器代码中,FC字段表示什么?请参阅下图

avkwfej4  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(139)

你还能告诉我,对于FC= 00、01、10和11的值,汇编程序如何工作吗?
当我在我的汇编器上执行指令时-我发现FC=11。但我不知道它意味着什么。

2w3kk1z5

2w3kk1z51#

2位fc字段和后面的4位加在一起,实际上就是6位func字段。
我不知道为什么那些作者选择把它分成两个并排的领域,因为它似乎没有什么特殊的目的,我可以看到。
此外,虽然它们仅针对这几个指令将func字段一分为二,但是它们针对所有其它指令描述回复到6位func字段的描述。
由于这种表示法,在查找fc字段0x 0、0x 1、0x 2、0x 3时,后续4位为0xc,我们还可以查找func字段值0x 0 c、0x 1c、0x 2c和0x 3c,其中一些可以找到。
func的值为0x 3c是针对c.lt.s/d的(当然,对于单通道和双通道,正确的opcode = 0x 11和fmt = 0x 10/0x 11)。
func字段值0x 0 c表示round.w.s/d
其他值,0x 1c和0x 2c在文档中找不到,这种省略是未使用操作码的典型情况,因此一种可能性是,这些确实是R2000的未使用操作码。
https://disasm.pro/(MIPS/big-endian)中输入46 00 00 3c会产生正确的c.lt.s,而46 00 00 0 c会产生预期的round.w.s,而以1c或2c结尾则不会产生反汇编。
另一个来源MIPS green sheet也给出了同样的答案:0x 0 c用于舍入,0x 3c用于比较,而0x 1c和0x 2c显示为未分配。
对于未赋值的操作码,我们期望处理器做什么?这是不清楚的,而且通常没有详细说明。检测这些事情需要工作,因此设计者可以允许实现做最方便的事情因此,未指定可以通过省略或甚至通过明确定义为未定义的行为!执行的可能性范围从导致某种异常/错误(未实现)到不正确地解码指令,这可能意味着运行编码非常相似的指令。

相关问题