koc*_*o84 3 assembly mips program-counter mars-simulator
我正在练习根据 Mips 参考表将 Mips 指令(beq $t5,$s0,循环)转换为二进制,并且有一系列指令(PC = PC + 4 + 分支地址)用于计算立即值“I”类型的指令,它一直引用“PC”。
电脑指的是什么?看来我应该寻找“循环”标签存储在内存中的位置:特别是找到该内存地址。
英特尔架构将其称为指令指针,而不是程序计数器。这两个名称都指代相同的事物:标识处理器要执行的当前/下一条指令的地址的寄存器。
在时钟周期开始时过度简化一点(即假设是非流水线处理器),PC 保存将在时钟周期期间执行的指令的地址,也称为当前指令。在时钟周期结束时,PC寄存器被更新以保存将在下一个时钟周期执行的指令的地址。
PC = PC + 4描述了 、add、addi和 未采用的条件分支所使用的顺序执行:它表示下一个PC 将引用当前指令之外 4 个字节的指令 - 对于(正常)顺序流,PC 向前前进 4一次字节。
这个表达式PC = PC + 4 + branch address有点用词不当——它应该说PC = PC + 4 + offsetoffset 是 I-Type 指令中的立即数,更具体地说是有符号(符号从 16 位扩展到 32 位)立即数 * 4。
在这个公式中,PC右边的 指的=是当前指令:指令的地址beq,而PC左边的 指的是后面要执行的下一个 PC beq。该公式描述了当分支被采用时接下来要执行的指令地址,因为这是一个条件分支(如果分支未被采用则PC = PC + 4描述顺序执行)。
对于条件分支,立即数 -1 的值将分支到自身,0 将分支到下一条指令,1 将向前跳过一条指令。