LDR和STR指令操作C语言变量时,首先要引入变量(符号)名,如:
IMPORT C_VARIABLE
然后,就可以使用如下方式获取变量地址:
LDR R0, =C_VARIABLE
注意,此时编译的话,有2种情况:
a. C_VARIABLE的地址刚好可以通过一个8位数移位获得,该指令会被翻译为:MOV R0, <变量的地址>
b. 否则,将通过当前PC的值加上一个常数获得,该指令不变,而第二个参数会被翻译为: LDR r0, [pc,#x相对PC的位置],x通常是数据段里的一个DCD单元,该单元里放了C_VARIABLE的地址。这种情况是最常见的。
我们要注意的是,情况b,LDR指令存放相对地址的空间只有12位,亦即4K的地址空间,所以,必须在用到C语言变量或函数的汇编代码附近处写好那些DCD单元,否则就很可能出现编译能通过,但运行不正确的情况!