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

ARM处理器中持续执行pop/push栈指令的CPU行为探究

ARM裸机环境下栈指令循环执行的行为分析

持续执行pop {r1}的行为

在32位ARM裸机环境中:

  • 每次pop {r1}会使栈指针sp递增4字节(ARM栈默认向下生长,pop操作从栈顶恢复数据,因此sp向上移动)。
  • 当sp递增至0xFFFFFFFF后,下一次递增会触发32位寄存器溢出回绕,sp变为0x00000000,后续pop指令会从0x00000000地址开始读取数据。
  • 裸机环境没有操作系统的内存保护机制,处理器不会抛出任何异常,会持续执行合法的内存读取操作——这就是你的功耗传感器未检测到异常、功耗保持恒定的核心原因:处理器始终在执行正常指令流程,没有触发异常处理的额外开销。

持续执行push {r1}的行为

若循环执行push {r1}:

  • 每次push会使sp递减4字节,同样遵循32位寄存器的溢出规则。
  • 当sp从0x00000000递减时,会回绕到0xFFFFFFFF,后续push会将数据写入该地址及更低的内存区域。
  • 同样,裸机环境下无内存保护,处理器会持续执行写入操作,功耗保持稳定;只有当写入地址恰好是外设寄存器等敏感区域时,才可能触发硬件层面的异常,但单纯的内存写入本身不会中断指令流程。

额外说明

你通过.rept 200生成循环指令,再配合末尾的绝对跳转,确保了控制流的稳定性,因此处理器会持续重复栈操作指令,不会因内存访问问题中断执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:05:11