You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS PC相对寻址中beq/bne无后续指令时立即数与编码计算问题

问题解答

规则适用性说明

PC+4的基准规则始终适用,和beq/bne指令后有没有其他指令无关。这个规则是MIPS五级流水线的硬件设计决定的:当beq/bne进入译码阶段计算跳转地址时,取指阶段已经完成了下一条指令的读取,此时PC寄存器的值天然就是当前beq/bne指令的地址+4,和后续地址是否存放有效指令没有任何关系。

示例代码立即数与机器码计算

你给出的示例代码先按地址对齐标注如下(假设第一条指令起始地址为0x00000000,MIPS指令固定4字节长,地址逐次加4):

地址          指令
0x00000000    addi $4, $3, 40
0x00000004    addi $5, $3, 0
0x00000008    loop:lw $6, 0($5)
0x0000000C    addi $6, $6, 1
0x00000010    sw $6, 0($5)
0x00000014    addi $5, $5, 4
0x00000018    slt $6, $5, $4
0x0000001C    bne $6, $zero, loop

立即数字段计算逻辑

beq/bne的16位立即数存储的是字偏移量,也就是字节偏移量除以4,计算公式为:
立即数 = (目标跳转地址 - (当前指令地址 + 4)) / 4
代入示例参数:

  1. 当前bne指令地址:0x1C,因此PC+4 = 0x1C + 4 = 0x20
  2. 目标跳转地址是loop标签的地址:0x08
  3. 立即数 = (0x08 - 0x20) /4 = -0x18 /4 = -6
  4. -6的16位补码表示为0xFFFA,就是bne指令的立即数字段值。

完整机器码计算

bne指令的操作码为0x05,源寄存器rs是$6(编号0x06),目标寄存器rt是$zero(编号0x00),拼接后完整32位机器码为:
000101 00110 00000 1111111111111010,转十六进制为0x14C0FFFA。


内容的提问来源于stack exchange,提问作者kingsbane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:27:01