看见过ARM汇编用[PC+xxx]的形式表示某个变量,而且不同行XXX值不同,为什么会设计成这样?解决办法

看见过ARM汇编用[PC+xxx]的形式表示某个变量,而且不同行XXX值不同,为什么会设计成这样?
引用同一个变量(通过指定其地址),不同代码行xxx值不同。让人很难通过代码一下分析出来。X86在这方面就很一致,容易理解。请问ARM为什么会这样?

------解决方案--------------------
xxx也是类似于$之类的东东吧???

这也正常,不同语言的特性往往差别较大,比如一些语言还带有类似C的++,--指令。
------解决方案--------------------
因为PC(指令寄存器)的值是在变化的。:)

------解决方案--------------------
x86-64 也喜欢搞这个,至少 gcc 喜欢。
Assembly code
  4004c8:    c7 05 56 0b 20 00 00     mov    DWORD PTR [rip+0x200b56],0x0        # 601028 <n>
  4004cf:    00 00 00 
  4004d2:    c7 05 4c 0b 20 00 01     mov    DWORD PTR [rip+0x200b4c],0x1        # 601028 <n>
  4004d9:    00 00 00

------解决方案--------------------
估计这样做是地址编码空间的限制造成的,编码在x86-64指令中的地址仍然最大32位,不允许64位(可以放在64位寄存器中,间接寻址),使用这种方式可以寻址相对下一条指令正负2GB的地址范围,一般情况下是够用的。