記事ディレクトリ
ARMアセンブリ言語の疑似演算、マクロ命令、疑似命令
ARM アセンブリ言語ソース プログラムのステートメントは、通常、命令、疑似演算、マクロ命令、および疑似命令で構成されます.
疑似演算は、ARM アセンブリ言語プログラムの特殊な命令ニーモニックです. その役割は主に、アセンブリの完了を準備することです.これは、コンピューターの実行中にマシンによって実行されるのではなく、ソース プログラムがアセンブルされるときにアセンブラーによって処理されます。
マクロ命令は、ソースプログラムに挿入できる独立したプログラムコードであり、疑似演算によって定義されます。マクロは、使用する前に事前に定義する必要があります. マクロは、相互に呼び出したり、自分自身を再帰的に呼び出したりできます. マクロ名を直接記述してマクロを使用し、マクロコマンドのフォーマットに従って、対応する入力パラメータを設定します。マクロ定義自体はコードを生成しませんが、呼び出し時にマクロ本体をソース プログラムに挿入します。
疑似命令も ARM アセンブリ言語プログラムの特別な命令ニーモニックであり、プロセッサ操作中にマシンによって実行されることはありません. これらは、実際の命令操作を実現するために、アセンブリ中に ARM または Thumb 命令への適切なマシン命令に置き換えられます.
2 つのコンパイル モードを備えた統合開発環境 IDE の紹介
ADS/SDT IDE 開発環境
CodeWarrior のコンパイラを使用して、ARM によって開発されました。
GNU 開発ツールと統合された IDE 開発環境
GNUアセンブラas、クロスコンパイラgcc、リンカldで構成されています。
ADS コンパイル環境での ARM 疑似演算とマクロ命令
ADS コンパイル環境での疑似操作は次のとおりです。
- シンボル定義疑似操作
- データ定義疑似操作
- 組立管理疑似操作
- フレーム 説明 疑似操作
- 情報レポーティング (Reporting) 疑似操作
- その他の (その他の) 疑似操作
シンボル定義疑似操作
- グローバル変数定義ディレクティブ GBLA、GBLL、GBLS
- ローカル変数定義ディレクティブ LCLA、LCLL、LCLS
- 変数代入指令 SETA、SETL、SETS
- 登録リスト定義指令 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 年。