问题描述
假设我正在处理ARM Cortex M7。现在来看一下:
int a[4][4];
a[i][j]=5;
在汇编语言中,函数将计算a[j][j]地址,还是使用可查找(相同大小的指针数组)或某种神奇的方法将5
放置在正确的位置?
这是反汇编程序的输出:
136 array1[i][i+1]=i;
08000da6: ldr r3, [r7, #36] ; 0x24
08000da8: adds r3, #1
08000daa: ldr r2, [r7, #36] ; 0x24
08000dac: uxtb r1, r2
08000dae: ldr r2, [r7, #36] ; 0x24
08000db0: lsls r2, r2, #2
08000db2: add.w r0, r7, #40 ; 0x28
08000db6: add r2, r0
08000db8: add r3, r2
08000dba: subs r3, #36 ; 0x24
08000dbc: mov r2, r1
08000dbe: strb r2, [r3, #0]
推荐答案
如果您按照示例中的方式编写索引,编译器将在编译时计算所需的确切内存地址。
如果索引是变量,则将在运行时计算地址。
这里是comparison of assembly output for both cases。