C言語とアセンブリ言語の混合プログラミング
1355 ワード
C言語とアセンブリ言語の混合プログラミング
1、C/C++プログラムに埋め込まれたアセンブリ命令を使用する
ARM C言語プログラムでは、キーワードを使用します.asmは、アセンブリ命令プログラムを識別します.
プログラムフォーマットは以下の通りです.
2、アセンブラからCプログラム変数にアクセスする
Cプログラムで宣言されたグローバル変数はアドレスによって間接的にアクセスできます.
具体的なアクセス方法は以下の通りです.
a、IMPORTダミーコマンドを使ってこのグローバル変数を宣言する.
b、LDRコマンドを使用して、このグローバル変数のメモリアドレスを読み出します.通常、このグローバル変数のメモリアドレスはプログラムのデータバッファに格納されます.
c、このデータの種類に応じて、該当するLDRコマンドでグローバル変数の値を読み出し、該当STRコマンドでグローバル変数の値を修正します.
レジスターの使用規則:
a、サブルーチン間は、レジスタR 0〜R 3を介してパラメータを転送する.
b、サブルーチンでは、レジスタR 4〜R 11を用いてローカル変数を保存します.
c、レジスタR 12は、SPを保存するために使用され、関数の帰りにこのレジスタスタックを使用して、IPとして記録される.
d、レジスタR 13は、データスタックポインタのために使用され、SPとして記憶され、レジスタSPは、サブルーチンに入るときの値と、レジスタを終了するときの値とが等しくなければならない.
e、レジスタR 14は、リンクレジスタと称され、LRと記載され、サブルーチンの戻りアドレスを保存するために用いられる.
f、レジスタR 15はプログラムカウンタであり、PCと記す.
1、C/C++プログラムに埋め込まれたアセンブリ命令を使用する
ARM C言語プログラムでは、キーワードを使用します.asmは、アセンブリ命令プログラムを識別します.
プログラムフォーマットは以下の通りです.
__asm ; !
{
~~~~~~~~~~
}
のうちの一つの命令が複数行を占める場合は、連続行記号(\)を使用します.R 0~R 3、SP、LRとCPSRのN、Z、C、Vフラグビットは、コンパイルコードのC式を計算する際に、これらの物理レジスタを使用して、N、Z、C、Vフラグビットを変更することがありますので、物理レジスタを注意して使用してください.2、アセンブラからCプログラム変数にアクセスする
Cプログラムで宣言されたグローバル変数はアドレスによって間接的にアクセスできます.
具体的なアクセス方法は以下の通りです.
a、IMPORTダミーコマンドを使ってこのグローバル変数を宣言する.
b、LDRコマンドを使用して、このグローバル変数のメモリアドレスを読み出します.通常、このグローバル変数のメモリアドレスはプログラムのデータバッファに格納されます.
c、このデータの種類に応じて、該当するLDRコマンドでグローバル変数の値を読み出し、該当STRコマンドでグローバル変数の値を修正します.
AREA globals, CODO, READONPY
EXPORT asmsub
IMPORT glovbver ; glovbver
asmsub
LDR R1, =glovbver ;
LDR R0, [R1] ;
ADDR R0, R0, #1 ; 1
STR R0, [R1] ;
MOV PC, LR
END
3、Cプログラムとアセンブラが相互にルールを呼び出すレジスターの使用規則:
a、サブルーチン間は、レジスタR 0〜R 3を介してパラメータを転送する.
b、サブルーチンでは、レジスタR 4〜R 11を用いてローカル変数を保存します.
c、レジスタR 12は、SPを保存するために使用され、関数の帰りにこのレジスタスタックを使用して、IPとして記録される.
d、レジスタR 13は、データスタックポインタのために使用され、SPとして記憶され、レジスタSPは、サブルーチンに入るときの値と、レジスタを終了するときの値とが等しくなければならない.
e、レジスタR 14は、リンクレジスタと称され、LRと記載され、サブルーチンの戻りアドレスを保存するために用いられる.
f、レジスタR 15はプログラムカウンタであり、PCと記す.