指令区别
请问:
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的位置。
故有此一问,请大虾们给说说。