在ARM汇编中, 索引式地址计算一般采用 [base, offset]
的形式,其中 base
是一个地址寄存器, offset
可以是一个立即数或者地址寄存器。在确定偏移量时,需要明确偏移量是相对于前面的地址还是后面的地址进行计算的。
例如,在将数组中的元素加载到寄存器中时,可以使用以下指令:
LDR r0, [r1, #4] ; 加载 r1+4 处的值到 r0 寄存器中
在这里, #4
表示偏移量,它是相对于 r1
寄存器的地址进行计算的。因此,偏移量是从 r1
开始计算的。
需要注意的是,计算偏移量时,需要确定是采用基址寄存器加上偏移量还是偏移量加上基址寄存器的形式。在 ARM 汇编中,基址寄存器在前偏移量在后的形式叫做前索引式地址计算,而基址寄存器在后偏移量在前的形式叫做后索引式地址计算。
示例代码:
SECTION .data
arr: DW 10, 20, 30, 40, 50 ; 定义一个数组
SECTION .text
GLOBAL _start
_start:
LDR r1, =arr ; 将数组的首地址写入 r1 寄存器
LDR r0, [r1, #4] ; 加载 arr[1] 的值到 r0 寄存器中