ARMアーキテクチャとプログラミング - 章VI

第VI章はATPCSを説明します

C言語のコンパイラおよびアセンブラの間で分離するために、互いを呼び出すことができ、それはサブプログラムとの間の通話のための一定のルールを提供しなければなりません。ATPCSは、基本的なルールARMとThumbプログラムのサブルーチンコールであります

6.1 ATPCSの概要

使用規則の間の基本的なルールは、サブルーチンコールレジスタ、ルールやパラメータを渡す使用規則データ・スタックを備えます。必要に応じて分割

  • ATPCSをチェックするサポート・データ・スタックリミット

  • 読み取り専用ATPCSのダン・システムに依存しない(ROPI)をサポート

  • それはATPCSの(RWPI用)読み書き位置独立したセグメントをサポートしています

  • ARMとThumbプログラムのサポート複合用途のプログラムATPCS

  • 処理浮動小数点演算ATPCS

アセンブリ言語のサブルーチンを満たす必要があります。

  • サブルーチンを書くときATPCSは、適切なルールを遵守しなければなりません

  • 適切な規則を遵守するためのデータ・スタックを使用するATPCS

  • アセンブラで-atpcsオプションを使用します

6.2基本ATPCS

サブルーチンコールが、含む場合には、いくつかの基本的なルールを設定します。

  • 各レジスタの使用規則とその対応する名前

  • 利用条件のデータをスタック

  • ルールのパラメータが渡されました

実行速度は、速く少ないメモリを基本ATPCSプログラムを満たすために、他のATPCSと比較します。これは、次のサポートを提供していません。

  • ARMとThumbプログラムの手順は、お互いを呼び出します

  • 位置独立コードとデータのサポート

  • 再入サブルーチン

  • データスタックのサポートを確認します

6.2.1レジスタの使用規則

  • サブルーチンは、レジスタR0〜R3を介してパラメータを渡すことができます。

  • サブルーチンでは、ローカル変数にレジスタR4〜R11を使用して

  • 登録R12は、サブルーチン間のスクラッチ・レジスタとして使用され、IPを表します

  • SPで示されるデータスタックポインタレジスタR13として、

  • 登録はLRと呼ばれる、レジスタR14が接続されていると呼ばれます

  • 登録R15は、PCで示される、プログラムカウンタであります

6.2.2データ・スタックの使用規則

スタックの最上部に隣接する点は、スタックがEMPTY言及されるとき、利用可能なデータユニット、スタックポインタの位置は、FULLと呼ばれる上部位置にポイントをスタック

成長の方向がメモリアドレスに低減され、スタックの成長方向は、スタック降順いうと、メモリアドレスの方向は、スタック昇順呼ば成長増加します。

データスタックの4種類:

  • FDフル漸減

  • EDは、空の減少します

  • 完全増分FA

  • EA空の増分

6.2.3パラメータの受け渡しのルール

  1. パラメータサブルーチンの固定数

    以下のルールに従ったシステムは、浮動小数点演算のハードウェアコンポーネントが含まれている場合、浮動小数点の送信:

    • ために、各浮動小数点処理パラメータ

    • FP浮動小数点レジスタは、各パラメータに割り当てられています

    • 割り当て方法は満たされ、浮動小数点パラメータは、連続FPレジスタセットの最小数を必要とします。

    最初の整数パラメータは、レジスタR0〜R3を介して送信されます。データスタックから渡されたその他のパラメータ。

  2. パラメータサブルーチンの可変数

    これ以上4以下、パラメータはR0〜R3レジスタ渡すことができない場合、4時間にわたって、スタックデータは、パラメータを渡すために使用することができます。

  3. 結果サブルーチンは、ルールを返します。

    • 結果は32ビット整数である場合、R0を介して戻すことができます

    • 結果は64ビット整数である場合、R0およびR1を介して返され、そうすることができます

    • 浮動小数点結果は、浮動小数点によって返されてもよい場合F0部材、D0又はS0レジスタ

    • 結果は、複合型floatで、レジスタやF0〜fNのD0〜dNので返すことができます

    • 結果のより多くのビットのために、メモリを通過する必要があります。

6.3いくつかの具体的なATPCS

6.3.1はATPCSをチェックし、データ・スタックの制限をサポートしています

  1. 基本的な

    スタックは、スタックポインタとしてR10制限をデータレジスタを使用して、データをチェック中に、次にSLと呼ばれ、R10登録ユーザが制御プログラムに登録することができません。

    これは、次の規則を満たすためにATPCS:

    • これは、既に占有スタックと最低の低SLとの間のスペースの256バイトを持っている必要があります。
    • 利用者は、プログラムで値SLを変更することはできません
    • スタックのデータスタックポインタSP値は、値SL以上でなければなりません

    サポート関連のコンパイラ/アセンブラオプション:

    • / SWST(ソフトウェアスタックリミットチェック)のデータATPCSスタック制限のコンプライアンスチェックをサポートするためのコードを生成するコンパイラ
    • / Noswstは、データスタックリミットチェックをサポートしていませんコンパイラが生成したコードを指示します
    • オプションアセンブラ/ swstna、時間をアセンブラスタックはデータが重要ではありませんかどうかをチェックし、他のは/ noswstオプション/ SWSTまたはオプションを指定されたアセンブラプログラムに接続されている場合は/ Swsna(該当するチェックソフトウェア・スタックリミット)
  2. 書かれたアセンブリ

    イェジジプログラムは、プログラムが他のサブルーチンを呼び出すことはありませんことを意味し

    APTCSアセンブラをチェックする支援データスタックの上限を書きます

    • スタックイェジジのデータの256バイト未満のプログラムをチェックしていないデータ・スタック

    • イェジジ非プログラム・データ・スタックは、次のコードを使用して、256バイト未満であります

      ARMプログラム

      SUB sp, sp, #size  ;#size为sp和sl
      CMP sp, sl
      BLLO __ARM_stack_overflow

      親指プログラム

      ADD sp, #-size
      CMP sp, sl
      BLO __Thumb_stack_overflow
    • データサブルーチンスタックの256バイトを超えます

      利用可能なメモリセルのデータスタックのアドレス値より小さくないSPの最小値を確保するために、対応するレジスタが導入されるべきです

      ARMプログラム

      SUB ip, sp, #size
      CMP ip, sl
      BLLO __ARM_stack_overflow

      親指プログラム

      LDR wr, #-size
      ADD wr, sp
      CMP wr, sl
      BLO __Thumb_stack_overflow

APTCSの6.3.2サポート読み取り専用のセクションの位置独立(ROPI)

  1. 読み取り専用のセクションの位置独立(ROPI)ATPCSアプリケーションのサポート

    プログラムは、特定の場所に避けなければなりません

    アプリケーション:

    • プログラムの実行中に動的にメモリにロードされました
    • 別の機会に手続き、およびメモリにロードされた別のプログラムの組み合わせ
    • 運転中に別のアドレスにマッピングされました。
  2. コンプライアンスATPCSサポートは、読み取り専用セクション位置非依存(ROPI)プログラミングの

    • シンボルが同じROPIセグメントコードが参照されている場合ROPIセグメントは、PCベースでなければなりません
    • 別のROPIセグメントは、PCベースの、および2つのセクションの位置関係でなければならないコードシンボルROPIの基準セクションはROPIを固定する必要がある場合
    • コードのROPIセクションで参照される他のSBベースの絶対アドレス、または書き込み可能なデータである必要があります
    • ROPIセグメントが参照ROPIシンボルに移動させた後に調整することができます

ATPCSの(RWPI用)6.3.3サポート読み書き位置独立セグメント

読み取りと書き込みのすべてのプログラムが位置独立している場合は、のコンプライアンス・プログラムのサポートAPTCSが読み書き位置に依存しない部分(RWPI)と呼ばれます。ATPCSの(RWPI用)の読み取りと書き込み位置独立セグメントは特定の場所にプログラムを格納しなくても済むようサポート。一般的に、SBで示される静的ベースレジスタとしてR9時間。リエントラントサブプログラムは、メモリ内の複数のインスタンスを有することができます。各独立したセグメントの例には、読み取ることができます。新しいインスタンスを生成するときに、SB点は、この例のセクション読み書きします。計算RWPIセグメントシンボルの方法:特定の位置にオフセットシンボル周期RWPIに対して算出された第1のコネクタは、特定の場所は、典型的には最初のバイトのRWPIセグメントにおいて選択され、プログラムが実行されSBへのオフセットを生成するためのシンボルのアドレス。

6.3.4サポートARMサムプログラムとATPCSのプログラムミックス

コンパイル又はアセンブリ、使用/インターワークは、コンパイラ(またはアセンブラ)を指示したときに生成されたオブジェクト・コード・コンプライアンス・プログラムは、以下の状況で使用されるARMおよびThumbプログラム混合用ATPCSを、サポートしています。

  • ARMの親指プログラムは、プログラムが存在する場合を呼び出します
  • 状況ThumbプロシージャコールARMプログラムは、プログラムが存在します
  • コネクタは、ARMおよびThumb状態の状態を切り替えるために必要とされる場合
  • 次の場合には、オプション/ nointerwork
    • プログラムは、Thumbプログラムが含まれていません。
    • ユーザー自身の状態の切り替えARMとThumb

6.3.5ハンドル浮動小数点演算ATPCS

ATPCSは、二つの異なる浮動小数点ハードウェアアーキテクチャをサポートしており、命令はVFPとFPAシステムを設定します。二つのシステムに対応したコードは互換性がありません。

おすすめ

転載: www.cnblogs.com/luoxiao23/p/11640437.html