組み込み: ARM シンボル定義の疑似操作の詳細

ARMアセンブリ言語の疑似演算、マクロ命令、疑似命令

ARM アセンブリ言語ソース プログラムのステートメントは、通常、命令、疑似演算、マクロ命令、および疑似命令で構成されます.
疑似演算は、ARM アセンブリ言語プログラムの特殊な命令ニーモニックです. その役割は主に、アセンブリの完了を準備することです.これは、コンピューターの実行中にマシンによって実行されるのではなく、ソース プログラムがアセンブルされるときにアセンブラーによって処理されます。

マクロ命令は、ソースプログラムに挿入できる独立したプログラムコードであり、疑似演算によって定義されます。マクロは、使用する前に事前に定義する必要があります. マクロは、相互に呼び出したり、自分自身を再帰的に呼び出したりできます. マクロ名を直接記述してマクロを使用し、マクロコマンドのフォーマットに従って、対応する入力パラメータを設定します。マクロ定義自体はコードを生成しませんが、呼び出し時にマクロ本体をソース プログラムに挿入します。

疑似命令も ARM アセンブリ言語プログラムの特別な命令ニーモニックであり、プロセッサ操作中にマシンによって実行されることはありません. これらは、実際の命令操作を実現するために、アセンブリ中に ARM または Thumb 命令への適切なマシン命令に置き換えられます.

2 つのコンパイル モードを備えた統合開発環境 IDE の紹介

ADS/SDT IDE 開発環境

CodeWarrior のコンパイラを使用して、ARM によって開発されました。

GNU 開発ツールと統合された IDE 開発環境

GNUアセンブラas、クロスコンパイラgcc、リンカldで構成されています。

ADS コンパイル環境での ARM 疑似演算とマクロ命令

ADS コンパイル環境での疑似操作は次のとおりです。

  • シンボル定義疑似操作
  • データ定義疑似操作
  • 組立管理疑似操作
  • フレーム 説明 疑似操作
  • 情報レポーティング (Reporting) 疑似操作
  • その他の (その他の) 疑似操作

シンボル定義疑似操作

  1. グローバル変数定義ディレクティブ GBLA、GBLL、GBLS
  2. ローカル変数定義ディレクティブ LCLA、LCLL、LCLS
  3. 変数代入指令 SETA、SETL、SETS
  4. 登録リスト定義指令 RLIST

GBLA、GBLL、GBLS

GBLA、GBLL、および GBLS 疑似操作は、ARM プログラムでグローバル変数を宣言し、デフォルトで初期化するために使用されます。

GBLA 疑似演算は、グローバル算術変数を宣言し、それを 0 に初期化します。

GBLL 疑似操作は、グローバル論理変数を宣言し、それを {FALSE} に初期化します。

GBLS 擬似操作は、グローバル文字列変数を宣言し、それを空の文字列 "" に初期化します。

文法形式

<GBLX>  Variable

その中で:
<GBLX>は GBLA、GBLL または GBLS の 3 つの疑似演算の 1 つです; 変数はグローバル変数の名前です。スコープ内で一意である必要があります。つまり、同じ変数名はスコープ内で 1 回しか表示できません。

使用例

GBLA  A1  ;定义一个全局的数值变量,变量名为A1
 A1    SETA  0x0F ;将该变量赋值为0x0F
            
GBLL  A2   ;定义一个全局的逻辑变量,变量名为A2
 A2    SETL  {TRUE} ;将该变量赋值为真
        
GBLS  A3 ;定义一个全局的字符串变量,变量名为A3
 A3    SETS “Testing”  ;将该变量赋值为“Testing”

LCLA、LCLL、LCLS

LCLA、LCLL、および LCLS 疑似操作は、ARM プログラムでローカル変数を宣言し、デフォルトで初期化するために使用されます。

LCLA 疑似演算は、ローカル算術変数を宣言し、ゼロに初期化します。

LCLL 疑似演算はローカル論理変数を宣言し、それを {FALSE} に初期化します

LCLS 疑似操作は、ローカル文字列変数を宣言し、それを空の文字列 "" に初期化します。

文法形式

<LCLX>  Variable

の:

<LCLX>これは、LCLA、LCLL、または LCLS の 3 つの疑似演算の 1 つです; Variable は、ローカル変数の名前です。スコープ内で一意である必要があります。つまり、同じ変数名はスコープ内で 1 回しか表示できません。

使用例

  LCLA   Test4 ;声明一个局部的数值变量,变量名为Test4
  Test4  SETA  0xaa  ;将该变量赋值为0xaa

  LCLL   Test5     ;声明一个局部的逻辑变量,变量名为Test5
  Test5  SETL {TRUE} ;将该变量赋值为真

  LCLS   Test6  ;定义一个局部的字符串变量,变量名为Test6
  Test6  SETS  “Testing” ;将该变量赋值为“Testing”

SETA,SETL及SETS

SETA、SETL、および SETS 疑似操作は、ARM プログラムでグローバル変数またはローカル変数に値を割り当てるために使用されます。

SETA 疑似演算は、値をグローバルまたはローカル算術変数に割り当てます。

SETL 疑似操作は、値をグローバルまたはローカル論理変数に割り当てます。

SETS 疑似操作は、値をグローバルまたはローカル文字列変数に割り当てます。

文法形式

<SETX>  Variable  expr

の:

<SETX>これは、SETA、SETL、または SETS の 3 つの擬似操作の 1 つです。Variable は、GBLA、GBLL、GBLS、LCLA、LCLL、または LCLS を使用して定義された変数の名前であり、そのスコープ内で一意でなければなりません。expr は式です。つまり、変数値に割り当てられた名前です。

登録リスト定義指令 RLIST

書式: name RLIST {汎用レジスタリスト}

機能: 汎用レジスタ リストの名前を定義するために使用されます。

 reglist RLIST {R0-R3, R8, R12}
		…
	STMFD	SP!, reglist			
; 将列表reglist存储到堆栈中
		…
	LDMIA	R4, reglist			
; 将列表reglist加载到R4中

参照:

孟祥聯。組み込みシステムの原理とアプリケーションのチュートリアル (第 2 版) [M]。北京: 清華大学出版局、2017 年。

おすすめ

転載: blog.csdn.net/m0_52316372/article/details/128466131
おすすめ