找回密码
 注册
搜索
查看: 930|回复: 5

[讨论] arm7 pc问题

[复制链接]
发表于 2006-11-15 16:36:18 | 显示全部楼层 |阅读模式
很多资料都是描述,当前的pc值与当前执行指令的偏移为8 byte,
但在ads1.2 中调试跟踪,发现当前执行的指令地址与pc的偏移为4 byte,
请问该如何理解?
 楼主| 发表于 2006-11-15 20:15:35 | 显示全部楼层
弱弱的问题,没有人愿意回答[em03]
点评回复

使用道具 举报

发表于 2006-11-15 21:05:21 | 显示全部楼层
我也不懂,不过,路过,总要顶的[em05][em05][em05]
点评回复

使用道具 举报

发表于 2006-11-16 12:58:54 | 显示全部楼层
我是这样理解的: 程序在仿真器中跑时, 使用者控制程序运行是通过ARM软件断点来实现的, 而当执行到你所看到当前的PC时,其时仿真器已用另一条指令将当前PC地址的指令替换, 而当地址的指令在断点过后, 才能执行; 也就是说要插入一条指令实现控制程序运行, 但用户是不可能看到插入的指令的, 但其却是在流水线中存在的,所以说原来取指是PC+8, 而现在是PC+4
点评回复

使用道具 举报

 楼主| 发表于 2006-11-16 16:48:37 | 显示全部楼层
多谢楼上的答复!

如下代码(一般的子程序调用):

                        ….
Label1              BL      Label4
Label2              MOV  R0, R0
Label3              MOV  R1, R1
                        …..
Label4               ……
                        MOV PC, LR
                        …..

当程序执行到Label1时,PC=Label1+8,即指向label3;
LR=PC ,即LR 值为label3
B  label4
当从子程序返回式,执行MOV PC,LR时, PC= label3;

显然,返回地址是错误的。

但当程序执行到Label1时,PC=Label1+4, 即指向label2,
显然是正确的

所以不知道到底 说法那种是正确?
点评回复

使用道具 举报

发表于 2006-11-17 15:01:09 | 显示全部楼层
没看懂楼上写的东东
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-27 06:40 , Processed in 0.045147 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表