2013-04-29 48 views
2

我遇到的大多數ARM彙編程序都使用.data和.text段指令。不過,我注意到兩兩件事:ARM Assembly中是否需要.text和.data?

  1. 多次被GCC編譯器本身產生將只使用的.text指令的彙編代碼,通過無。數據指令某處分組變量的代碼。

  2. 即使我沒有使用.text節我的程序仍然編譯並運行良好。

我的問題:需要這些指令?如果是,爲什麼?如果是的話,我的程序如何在沒有它們的情況下仍然有效?

+1

你確定**變量** gcc組不是**常量**嗎?這有時被稱爲'.rodata'等。這些部分與'.bss'相當。正如Etienne所說,你的*鏈接器*和操作系統(或缺乏)決定了他們是否需要。例如,使用解析* Elf *文件的Linux,它們將是必需的。對於*裸機*應用程序,只要符合鏈接器的符號,就可以調用任何您喜歡的部分。 – 2013-04-29 17:03:02

回答

3

當您想要決定將您的程序傳輸到何處以及它們被執行的位置,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 
} 

如果使用默認鏈接的行爲,我不認爲你需要用指令顯式聲明的部分。