主题 : Reset向量处汇编代码的疑惑 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 21714
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
综合积分: 84 分
注册时间: 2010-05-20
最后登录: 2015-04-12
楼主  发表于: 2011-02-25 17:27

 Reset向量处汇编代码的疑惑

mini2440,自己尝试汇编编程,
开放环境: Eclipse+Sourcery GCC

自己编写了一个小小的驱动LDE灯的汇编程序.成功
不过发现在中断向量位置,如果这样写:
_start:
    b ResetHandler
是可以正常运行的(LED灯闪烁)

但是如果这样写:
_start:
    ldr pc,Reset_Addr
...
Reset_Addr:     .word ResetHandler

则无法正常运行,其他地方的代码完全一样.

百思不得其解,这样写为什么会不行呢?
级别: 侠客
UID: 35785
精华: 0
发帖: 63
金钱: 325 两
威望: 65 点
综合积分: 126 分
注册时间: 2011-01-06
最后登录: 2014-07-22
1楼  发表于: 2011-02-27 13:32
ldr pc=Reset_Addr   这样应该就行了。。 试试看
级别: 新手上路
UID: 21714
精华: 0
发帖: 42
金钱: 210 两
威望: 42 点
综合积分: 84 分
注册时间: 2010-05-20
最后登录: 2015-04-12
2楼  发表于: 2011-02-28 09:08
真正的原因找到了.
是因为我没有指定.lds链接脚本文件.
导致ld将一些标号的地址默认为0x8000开始
因此ldr指令是用绝对地址的,而b指令是用相对地址的
所以ldr指令出错.