我正在使用测试 C 文件为嵌入式 ARM 芯片编译一些测试代码。
test.c
如下:
int main(){
*(int*)0xFFFFF400 = 7;
}
我使用以下命令编译文件
arm-none-eabi-gcc -march=armv4 -mtune=arm7tdmi -specs=nosys.specs -Wall -o test test.c
编译时没有抱怨,然后我检查程序集
arm-none-eabi-objdump -d ./test
这会产生以下main()
部分的长输出:
00008018 <main>:
8018: e3e03000 mvn r3, #0
801c: e3a02007 mov r2, #7
8020: e3a00000 mov r0, #0
8024: e5032bff str r2, [r3, #-3071] ; 0xfffff401
8028: e1a0f00e mov pc, lr
为什么它说 0xfffff401 而不是 0xfffff400?为什么减去 3071 而不是 3072?