打印

菜鸟一个,求帮助

[复制链接]
1364|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dengch423|  楼主 | 2012-12-19 09:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
keil上电后pc不是0吗?怎么第二条指令弄成pc-12了,keil环境,ARM7
start
          MOV          r0,#10
          ADR          R4,start
经过汇编处理后
          处理成 MOV r0,#10
                 sub r4,pc,0x0000000c


相关帖子

沙发
阿南| | 2012-12-19 11:11 | 只看该作者
楼主不错,知道用这种方式研究。
楼主第二条指令应该不是在0x00000004的地址上,所以还需要查这个指令是哪里来的。

使用特权

评论回复
板凳
airwill| | 2012-12-19 12:09 | 只看该作者
目的想把 start 的地址赋值给 R4.
sub r4,pc,0x0000000c
效率很高. 弄成pc-12就对了
因为 ARM7 是3级流水线的. pc 的值并非指向当前指令, 而是指向的是向前两条指令的位置.  所以要减 12  而不是减 4 了.

使用特权

评论回复
评论
dengch423 2013-1-4 18:44 回复TA
谢谢 
地板
killvx| | 2012-12-19 14:16 | 只看该作者
同意3楼,楼主去查一下ARM流水线(pipeline)就明白了

使用特权

评论回复
5
jlass| | 2012-12-19 14:22 | 只看该作者
建议楼主可以直接把第二句前后的PC的地址取出来,不就清楚了

使用特权

评论回复
6
dengch423|  楼主 | 2012-12-19 15:10 | 只看该作者
不是,问题问错了。 谢谢大家,流水线我知道,是我在keil中用watch功能看pc的值,运行完第一句后始终是4.然后就开始怀疑怎么回事,后来把第二条指令换成mov r0,pc 发觉pc的值是12,难道是显示的问题?

使用特权

评论回复
7
QQ435965858| | 2012-12-19 15:58 | 只看该作者
留个脚印.等下回来看

使用特权

评论回复
8
dengch423|  楼主 | 2012-12-19 18:20 | 只看该作者
上图片

未命名.JPG (37.09 KB )

未命名.JPG

使用特权

评论回复
9
killvx| | 2012-12-20 13:50 | 只看该作者
难道watch窗口寄存器值没有及时更新 ?

使用特权

评论回复
评论
dengch423 2012-12-20 18:56 回复TA
那个keil在调试模式下显示的pc值总是按4递增,实际取出来看是按8递增的。难道这pc是个伪地址,指示当前正在运行的程序,还是说哪里要设置一下 
10
dengch423|  楼主 | 2012-12-20 18:52 | 只看该作者
本帖最后由 dengch423 于 2012-12-20 18:53 编辑

对啊,一直都是这样的。在调试模式下面,pc的值一直是+4(显示的),实际把值读出来是按加8来递增

123456.JPG (31.45 KB )

123456.JPG

使用特权

评论回复
11
killvx| | 2012-12-20 21:45 | 只看该作者
搜到一篇帖子 类似的问题
http://www.keil.com/forum/20381/
不过也没说明白是什么原因

楼主可以看下编译后的文件
看下 ADR          R4,start 这条指令是如何处理 的
start应该是相对于pc的偏移地址

或许可能是软件的问题

使用特权

评论回复
评论
dengch423 2013-1-4 17:20 回复TA
看到了,谢谢你。我估计是keil软件的问题 
评分
参与人数 1威望 +1 收起 理由
dengch423 + 1 赞一个!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝