BSS部分和clearzi

时间:2012-03-10 19:07:54

标签: assembly arm startup

我知道,程序的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:

这只是启动代码的一小部分。

1 个答案:

答案 0 :(得分:2)

此代码段清除BSS部分。它转换为

for (int* p = __gnu_bssstart; p < __gnu_bssend; ++p) *p=0;

如果大小为零,则条件永远不会为真,因此跳过初始化部分。