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