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

ARM ALP调试时出现00080000H地址预取中止错误是什么原因?

错误产生原因
  • 你代码里的END是汇编伪指令,作用仅为告知汇编器源代码编译到此结束,不是让CPU停止执行的有效指令。
  • 当MOV r1,#5、MOV r2,#6、ADD r3,r1,r2三条指令执行完成后,CPU会继续按照程序计数器PC的指向,读取后续内存地址的内容作为指令执行。你编写的程序没有覆盖后续地址空间,这些地址要么存储的是无效的乱码数据,要么是未被内存映射的非法区域,CPU尝试读取这些位置的内容作为ARM指令执行时,就会触发Prefetch Abort(预取中止)异常。
  • 你可以观测到r3寄存器的运算结果正确,也印证了前三条指令已经正常执行完成,报错是指令执行完后CPU继续跑飞导致的。
修复方法

在最后一条运算指令后添加程序终止逻辑即可,嵌入式调试场景下最简单的处理是加死循环让CPU停在当前位置,避免跑飞:

AREA prog,CODE
    ENTRY
l1
    MOV r1,#5
    MOV r2,#6
    ADD r3,r1,r2
    B .  ; 新增语句:跳转到当前地址,形成死循环
    END

如果是运行在Linux用户态的ARM程序,可以调用exit系统调用终止进程:

MOV r7, #1  ; exit系统调用号
MOV r0, #0  ; 传入退出状态码0
SWI 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:15:03