2013-04-29 43 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 
} 

如果使用默认链接的行为,我不认为你需要用指令显式声明的部分。