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

如何使用MIPS指令查找地址范围及beq指令可达地址范围查询

1. 如何用MIPS指令查找地址范围

在MIPS架构中,可通过以下几种实用方法确定地址范围:

  • 寄存器计算+访存验证:用add、sub等算术指令算出目标地址的边界值,再通过lw(加载字)、sw(存储字)等访存指令尝试访问该地址。若能正常执行读写操作,说明地址处于有效范围;若触发地址错误异常,则该地址超出可访问范围。
  • 分析分支/跳转指令的偏移特性:对于beq、bne这类条件分支指令,其16位立即数字段决定了跳转的偏移量,通过计算偏移量的取值范围,可直接推导该指令能到达的地址区间;对于j、jal这类无条件跳转指令,利用其26位地址段与PC高4位拼接的规则,也能算出指令覆盖的地址范围。
  • 伪指令辅助计算:借助la(加载地址)伪指令将符号地址直接加载到寄存器,再用sub指令计算两个地址的差值,即可得到地址范围的跨度。
2. 当PC为0x20000000时,beq指令可到达的地址范围

MIPS中beq指令的执行逻辑是:若指定的两个寄存器值相等,PC会更新为PC+4 + (立即数 << 2);若不相等,PC则保持为PC+4(即顺序执行下一条指令)。

其中,beq的立即数是16位有符号整数,取值范围为-2^15(即-32768)到2^15-1(即32767)。由于MIPS指令是字对齐(每个指令占4字节),需要将立即数左移2位得到实际偏移量,因此偏移量的范围是-2^17(即-131072)到(2^15-1)*4(即131068)。

已知当前PC为0x20000000,取指完成后PC会自动加4,变为0x20000004,由此计算:

  • 最小可达地址:0x20000004 - 0x20000 = 0x1FFE0004
  • 最大可达地址:0x20000004 + 0x1FFFC = 0x20020000

最终,beq指令执行后PC的可能取值集合是从0x1FFE0004到0x20020000之间所有4字节对齐的地址(顺序执行的0x20000004也包含在该范围内)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:40:25