我知道,程序的BSS部分存储全局未初始化的变量。那么为什么我(分支指令“clearzi
”中的启动代码内部)必须检查此部分大小是否等于“0
”然后继续?我发现了这部分启动代码,这是我需要理解的。
LDR r0, =__gnu_bssstart
LDR r1, =__gnu_bssend
MOV r2, #0
clearzi:
CMP r0, r1
BEQ clearzi_exit
STR r2, [r0]
ADD r0, r0, #4
B clearzi
clearzi_exit:
这只是启动代码的一小部分。
答案 0 :(得分:2)
此代码段清除BSS部分。它转换为
for (int* p = __gnu_bssstart; p < __gnu_bssend; ++p) *p=0;
如果大小为零,则条件永远不会为真,因此跳过初始化部分。