关于中断向量表的傻问题,麻烦各位了

aeiou   2009-11-24 17:42 楼主
本人新手,见笑了!

.extern main
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
b Reset

@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
b HandleUndef

@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
b HandleSWI

@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
b HandlePrefetchAbort

@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
b HandleDataAbort

@ 0x14: 保留
HandleNotUsed:
b HandleNotUsed

@ 0x18: 中断模式的向量地址
b HandleIRQ

@ 0x1c: 快中断模式的向量地址
HandleFIQ:
b HandleFIQ


这是中断向量表的设置!0x0,0x4,.....,0x1c都是对应的中断,在这里系统复位后会自动从0x0运行!
传闻中断向量表的设置是不能变的,它放在Rom的0的位置,0x0始终代表复位,0x4始终代表Undef,......
我在想,这里要是改改,改成:

.extern main
.text
.global _start
_start:
@******************************************************************************
@ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用
@******************************************************************************
b Reset

@ 0x04: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
b HandleSWI

@ 0x08: 未定义指令中止模式的向量地址
HandleUndef:
b HandleUndef

那难道说0x4既变成了SWI了?
本人愚钝,望各位指点一二,不胜感激。

回复评论 (6)

这样改的结果是:发生未定义指令异常时,会跳到你的"HandleSWI"去,至于你的"HandleSWI"是做什么的,处理器是不会管的
点赞  2009-11-24 18:00
哦,原来处理器人的地址是定死了的啊。谢谢了。。呵呵
点赞  2009-11-24 19:27
是的,处理器只知道出现异常跳到固定的位置,它才不管你在那里写什么呢。
点赞  2009-11-24 20:04
同意楼上,在编译时地址也就已经定下来了。
点赞  2009-11-24 21:00
不是编译时定的吧,是芯片出厂时就有了。
点赞  2009-11-25 12:30
恩,很好,很强大。。麻烦各位去看看我的例外一个问题啊。谢谢了
点赞  2009-11-25 12:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复