Androidシステムは、ソフトウェア開発プラットフォーム言語の基礎としてのJavaを使用して、NDKのAndroidプラットフォームは、ARM-ELF実行可能ファイルのコードにコンパイルされたC / C ++のコードを実行することができます。
ネイティブプログラム生成プロセス
1:4つのステップを経ます。前処理2。3コンパイル。4コンパイル。リンク
Cコードをコンパイルするための第2のステップは、ARMアセンブリコードになった後、NDKは、ARMアセンブラファイル書き込まれた.Sの直接使用をサポート
ARMレジスタまたはメモリアドレス値格納されている、37個のレジスタ、31個の汎用レジスタの合計、ステータス・レジスタを使用する6です。ARMは7つの動作モードがあります。
1。ユーザモード(USR):ARM通常動作
2。高速割込みモード(FIQ):高速データ伝送チャンネル処理または
3。外部割り込みモード(IRQ):一般的な割り込み処理のための
4。管理モード(SVC):使用保護モード・オペレーティング・システム
5。データアクセスモード(ABT)の終了:このモードは、入力されたときに、データまたは命令プリフェッチ終了、仮想ストレージおよび保護のための
6。システムモード(SYS):特権オペレーティングシステムのタスクを実行します
7。終端モードの定義命令(ウント):このモードは、入力された場合、未定義命令実行
ARMリバースモードは、ユーザ(USR)を必要とします。
ユーザモード:アクセスレジスタが分かれています。
バンクいないレジスタ:R0〜R7
レジスタ群:R8〜R14
プログラムカウンタ:R15
現在のプログラムステータスレジスタ:CPSR
ARM 2つの動作状態:ワード整列の32ビットARM命令、16ビットThumb命令整列
ARMの親指との関係:
|
親指 |
腕 |
登録R0〜R7 |
同じ状態 |
|
CPSR |
同じ状態 |
|
対応関係を登録します |
FP |
R11 |
IP |
R12 |
|
SP |
R13 |
|
LR |
R14 |
|
パーソナルコンピュータ |
R15 |
ARMアセンブリ言語のプログラム構造
1。セクションの定義:
.DATAセグメント:グローバル変数、定数、およびその他の情報コンパイラ。.rodataの中の.textのコードのその後一定の内訳
セグメントのフォーマットを定義するために使用.SECTION ARM命令:
.SECTION名[、」フラグ」[%タイプ[、flag_specific_arguments]]]
名前のセクション名フラグセグメント属性、タイプのセグメントタイプ、flag_specific_argumentsプラットフォームパラメータ
2。注釈とラベル
コメントで始まるコメント/ * * /使用単線を使用してください@
参照番号:使用するプログラムが使用することをジャンプし、アドレスのラベルに変換するアセンブラ
フォーマット:<ラベル>
3。組立説明書:
「」アセンブラ命令を持つプログラムは、命令の始まりである、アセンブラARM命令セットには関係ありません
.FILE:ソースファイル名を指定してください
.ALIGN:アライメントコードを指定します。
.ASCII:文の文字列
.GLOBAL:グローバルシンボルを宣言
.TYPE:シンボルタイプを指定します。
.WORD:アドレス値を格納するために使用
.size:「サイズメイン.-メイン。」現在のアドレスを引いこのアドレスの大きさの主な記号はの主な機能です:設定は、記号などのサイズを指定します
.ident:実行可能なプログラムセグメントを生成するコンパイラを識別は「.comment」内に配置されます
サブルーチンやパラメータの受け渡し
サブルーチンのコード内の別々の機能、機能の同じ概念
声明の方法:
.GLOBAL関数名
.TYPE関数名、関数%
関数名:
<...関数本体...>
ARM関数パラメータの受け渡しの問題:規制、
R0〜R3のレジスタがスタックに渡されたパラメータを超えて、第四パラメータに最初に送信されます。
R0レジスタは、関数呼び出しの戻り値を格納するために使用されている間。
機能は、これらのレジスタの内容を復元することなく、復帰する前に呼び出され
ARMアドレッシングモード
アドレッシング即時
アドレッシング登録
アドレッシングシフトレジスタ:5つのシフト操作を
1。LSLは:論理左シフト、シフトレジスタは、下のパッチ0によって空い
2。LSR:論理右シフト、高ビット0によって空いたシフトレジスタ
3。ASR:算術右シフトは、サインアップ同様、正、負フィル0 1であります
4。AOR:空の高い充填に低いからシフト後の右回転
5。RRX:拡張サイクリック、右、右オペランドと、空フラグの高い値は、Cが充填されています
レジスタ間接アドレッシング
ベースのアドレッシング
マルチレジスタのアドレス指定
アドレッシングスタック
LDM、STMに
複数、FA、EA、FD、ED命令の接尾辞に対処LDMとSTM命令プリフィックス・レジスタ
コピーブロックアドレッシング
別の位置のメモリ位置への1つのアドレスから連続複写データ
LDMおよびSTM命令プリフィックス、IA、DA、IB、DB命令の接尾辞
相対アドレッシング
ベースアドレスの現在の値に住所ラベルプログラムカウンタPC、命令、加算後のオペランドの実効アドレスのオフセット。
例:BL NEXT
............
次:
............