我有此作业:
在示例中,第三行的0/32, 22, 16, 12
数字是什么?
在上面,为什么PC = 4?我认为它应该等于指令的当前位置= LC?
我在某处读到,对于BNE指令,PC计数器的处理方式有所不同,因此它是字地址。那么,对于BNE指令,PC栏中会出现什么?我知道4个字节= 1个字,所以如果BNE在PC = 28个字节处,那么它将是7个字?但是,它需要返回到next
标签,该标签为8个字节= 2个单词...所以该列中有什么内容?我是否输入-5表示下一条指令位于第二个单词?
编辑
我已经填写好了,但是我仍然卡住了:
答案 0 :(得分:2)
我认为他们正在使用PC列指示 下一台PC 值 之后的指令
对于大多数指令(例如算术和逻辑),next-PC是LC + 4,这就是顺序执行的工作方式。
但是,对于条件分支指令,它要么是next-PC(LC + 4),要么是分支目标地址(PC + 4 + immediate * 4)。
对于(无条件)跳转指令,下一个PC是通过标签(j label
或jal label
)计算的地址或寄存器中的值(jr $ra
)。
对于BNE指令,由于它是有条件的分支,因此抽象上,next-PC可能是两个不同值之一,因此,我们需要知道状态-值在寄存器中-在我们选择两个可能的next-PC值之一之前,因为我们需要知道是否采用了条件分支。如果采用下一个PC,则为PC+4+immediate*4
,如果不采用,则仅为PC+4
。如果指定的条件为真(即两个寄存器的“ vs.”与“ v ..在位模式上不相等”),则会采用这种方法。
0 / 32、22、17、12是:
opcode = 0 ... 0表示R型指令。操作码字段在位31-26中。因此,当这些位全为0时,我们就有一个R型指令。 R-Type指令具有3个寄存器字段(位25-21、20-16、15-11),SHAMT字段(位10-6)和FUNC字段(位5-0)。
所有R-Type指令的操作码均为0,并由FUNC字段区分。 ADD指令的FUNC值为 32 (二进制为100000,您可以在ADD
指令的二进制扩展中识别该值吗?)。
22 , 17 和 12 >是寄存器号,它们分别对应于$s6
,$s1
和$t4
的友好汇编程序名称。