ARM 汇编中是否需要 .text 和 .data?

Dan*_*cco 2 assembly arm

我遇到的大多数 ARM 汇编程序都使用 .data 和 .text 部分指令。但是,我注意到两件事:

  1. 很多时候,由 GCC 编译器本身生成的汇编代码将只使用 .text 指令,将代码中某处的变量分组,而不使用 .data 指令。

  2. 即使我不使用 .text 部分,我的程序仍然可以正常编译和运行。

我的问题:是否需要这些指令?如果是,为什么?如果是的话,我的程序怎么在没有它们的情况下仍然可以工作?

Éti*_*nne 5

当您想决定在传输程序时将定义的部分放在哪里以及它们在何处执行时,有时需要使用这些部分指令,在 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  
}
Run Code Online (Sandbox Code Playgroud)

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