"PC" 关于 Mips 参考 Sheet

"PC" on Mips Reference Sheet

我正在练习根据 Mips 参考 sheet 将 Mips 指令 (beq $t5, $s0, loop) 转换为二进制,并且有一系列指令 (PC=PC + 4 + branch address) 用于计算 "I" 类型指令的立即数并且它一直引用 "PC."

PC指的是什么?看来我应该寻找 "loop" 标签在内存中的存储位置-:专门查找该内存地址。

英特尔架构称其为指令指针,而不是程序计数器。这两个名称指的是同一个东西:一个寄存器,用于标识处理器要执行的 current/next 指令的地址。

在时钟周期开始时过度简化位(i.e.assuming s 非流水线处理器),PC 保存将在时钟周期内执行的指令的地址,也就是当前指令。在时钟周期结束时,更新 PC 寄存器以保存将在 下一个 时钟周期执行的指令的地址。

PC = PC + 4 描述了 addaddi 和未采用的条件分支所使用的顺序执行:它表示 next PC 将引用超出当前指令 4 个字节的指令 — 对于(正常)顺序流,PC 一次向前移动 4 个字节。

表达式 PC = PC + 4 + branch address 有点用词不当 — 它应该说 PC = PC + 4 + offset 其中偏移量是 I 型指令中的立即数,更具体地说是带符号的(符号从 16 位扩展到32 位)立即数 * 4.

在这个公式中,=右边的PC指的是当前指令:beq指令的地址,而PC 左侧是指 下一个 PC 在 beq 之后执行。这个公式描述的是当分支发生时接下来要执行的指令地址,因为这是一个条件分支(如果分支没有发生那么PC = PC + 4描述顺序执行)。

对于条件分支,-1 的立即数值将分支到自身,0 将分支到下一条指令,1 将向前跳过一条指令。