1
我知道,程序的BSS部分存儲全局未初始化的變量。那麼爲什麼我(在分支指令「clearzi
」中的啓動代碼內部)必須檢查該部分大小是否等於「0
」,然後繼續?我發現這部分的啓動代碼,這是我需要了解的。BSS部分和clearzi
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:
這只是啓動代碼的一小部分。
我明白**如何**此功能檢查BSS部分的結束是否等於BSS部分的開始,但我不知道**爲什麼**會有人去檢查此? **爲什麼這個這麼重要?是否有可能,這是我們如何檢查程序是否剛剛開始,因爲在atartup中沒有初始化變量,這些變量在BSS部分中都是通用的? – 71GA 2012-03-11 10:01:10
此架構保證在程序啓動之前清除BSS。這是爲了保證,如果程序在寫入BSS之前從位於BSS中的變量中讀取,則返回零。 – hirschhornsalz 2012-03-11 20:02:39
@ 71GA此外,如果BSS是零大小,這不是檢查。這是一個循環,如果BSS大小爲零,則該循環不會執行。 – hirschhornsalz 2012-03-11 20:08:40