2

私が目にするほとんどの ARM アセンブリ プログラムは、.data および .text セクション ディレクティブを使用しています。ただし、次の 2 つの点に気付きました。

  1. 多くの場合、GCC コンパイラ自体によって生成されたアセンブリ コードは .text ディレクティブのみを使用し、.data ディレクティブを使用せずにコード内のどこかで変数をグループ化します。

  2. .text セクションを使用しなくても、プログラムは正常にコンパイルおよび実行されます。

私の質問:これらの指令は必要ですか? はいの場合、なぜですか? はいの場合、なぜ私のプログラムはそれらがなくても機能するのですか?

4

1 に答える 1

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  
}

デフォルトのリンカ動作を使用する場合、セクションをディレクティブで明示的に宣言する必要はないと思います。

于 2013-04-29T16:39:18.927 に答える