4160|7

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Arm 启动时第一条指令跳转问题 [复制链接]

ldr      pc,Reset_Addr ; = #Reset_Addr
Arm启动时在0地址的第一条指令都是0xe59ff018,将reset_addr的地址load到pc,不管reset_addr是多少,指令都是一样的,处理器是如何知道将要到哪个地址去?比如像jmp addr 或者bx addr都有一个确定的地址,而第一条指令并没有。我碰到了一个问题,软件仿真正常,但是在硬件平台上仿真时跳转不对,请哪位高手赐教,谢谢!

此帖出自ARM技术论坛

最新回复

是这样的,谢谢!  详情 回复 发表于 2010-2-2 17:44
点赞 关注
 

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
编译器编译的时候会将Reset_Addr这个函数的地址计算出来,并在生成机器码中使用的是这个地址,虽然你在调试过程中看到的仍然是ldr pc,Reset_Addr这样的命令,但是实际上已经有这个地址了。
此帖出自ARM技术论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你可以进行一下测试,在Reset_Addr标号前加些代码,导致Reset_Addr标号的位置不同,然后分别进行调试,看下ldr pc,Reset_Addr这句代码所在位置(比如说0地址)的内存数据,实际上代码数据是不一样的。
此帖出自ARM技术论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
但是不管要跳转的地址是什么,指令总是0xe59ff018,是没有地址信息的,而且arm中断向量表的前五条指令都是0xe59ff018
此帖出自ARM技术论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
不像单片机第一条指令是个ajmp addr,指令中就包含了addr的值
此帖出自ARM技术论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
因为那是以PC为基准的相对寻址,实际生成的指令是LDR PC, [PC,#NUM]的格式,而它要加载的目标地址表格总是紧接着跳转的指令,所以无论这些指令处于什么地址,指令编码都不会变
此帖出自ARM技术论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 great_bug 的回复:
因为那是以PC为基准的相对寻址,实际生成的指令是LDR PC, [PC,#NUM]的格式,而它要加载的目标地址表格总是紧接着跳转的指令,所以无论这些指令处于什么地址,指令编码都不会变


up
此帖出自ARM技术论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
是这样的,谢谢!
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表