2
我遇到的大多數ARM彙編程序都使用.data和.text段指令。不過,我注意到兩兩件事:ARM Assembly中是否需要.text和.data?
多次被GCC編譯器本身產生將只使用的.text指令的彙編代碼,通過無。數據指令某處分組變量的代碼。
即使我沒有使用.text節我的程序仍然編譯並運行良好。
我的問題:需要這些指令?如果是,爲什麼?如果是的話,我的程序如何在沒有它們的情況下仍然有效?
我遇到的大多數ARM彙編程序都使用.data和.text段指令。不過,我注意到兩兩件事:ARM Assembly中是否需要.text和.data?
多次被GCC編譯器本身產生將只使用的.text指令的彙編代碼,通過無。數據指令某處分組變量的代碼。
即使我沒有使用.text節我的程序仍然編譯並運行良好。
我的問題:需要這些指令?如果是,爲什麼?如果是的話,我的程序如何在沒有它們的情況下仍然有效?
當您想要決定將您的程序傳輸到何處以及它們被執行的位置,ROM,RAM等中時,有時需要使用這些部分指令。然後您可以編寫自己的就像下面這個例子鏈接腳本(在ld
鏈接腳本格式):
MEMORY
{
RAM (rw) : ORIGIN = 0x00000000, LENGTH = 128M
ROM (rx) : ORIGIN = 0xffff0000, LENGTH = 64K
}
SECTIONS
{
.startup :
{
*(.text.vectors)
sdram_init.o(.sdram_init)
main.o(.text_main)
} > ROM
.data :
{
*(.data*)
} > RAM
}
如果使用默認鏈接的行爲,我不認爲你需要用指令顯式聲明的部分。
你確定**變量** gcc組不是**常量**嗎?這有時被稱爲'.rodata'等。這些部分與'.bss'相當。正如Etienne所說,你的*鏈接器*和操作系統(或缺乏)決定了他們是否需要。例如,使用解析* Elf *文件的Linux,它們將是必需的。對於*裸機*應用程序,只要符合鏈接器的符號,就可以調用任何您喜歡的部分。 – 2013-04-29 17:03:02