【问题标题】:Are .text and .data required in ARM Assembly?ARM 程序集需要 .text 和 .data 吗?
【发布时间】:2013-04-29 16:34:55
【问题描述】:

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

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

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

我的问题:这些指令是必需的吗?如果是,为什么?如果是,为什么没有它们我的程序仍然可以运行?

【问题讨论】:

  • 您确定 variables gcc 组不是 constants 吗?这有时称为.rodata 等。这些部分和.bss 一样是相当标准的。正如 Etienne 所指出的,您的 linker 和操作系统(或缺少)决定了它们是否需要。例如,对于解析 Elf 文件的 Linux,将需要它们。对于 bare metal 应用程序,您可以随意调用这些部分,只要它与链接器的符号匹配即可。

标签: assembly arm


【解决方案1】:

当您想决定在传输程序时定义的节的位置以及它们在哪里执行时,有时需要使用这些节指令,在 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  
}

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

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多