指令区别

louis_chen 2008-01-15 07:33:20
请问:
add r2,pc,#-(8+.-CInitData)是否跟ldr r2,=CInitData等效?
(我在仿真的时候能够正常执行)



起因,看到某兄在解释前者使用含义有如下文字:

#. 代表是当前pc值,CInitData是下面几行的dcd出来的
#这行意思是,将r2指针指到 dcd 那个区域中。
#他是以相对的差值来计算的,假设当前指针和CInitData的差值是X
#CInitData的指针是C, C = .+X ,但是这样无法直接赋值(不信,你mov r0, #CInitData试试,编译可以通过,但执行不通过),只能采用和pc相对值来换算,
#但因为arm有预取址(三级流水线),pc与当前指针的值差为8( . = PC-8 )
#所以 CInitData = . + (CInitData-.)
#= pc-8 +CInitData-.
#= pc - (8-CInitData+.)
#由此看出r2指向的就是CInitData的位置。

故有此一问,请大虾们给说说。
...全文
39 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧