2010-11-30 1 views
0

この質問に対する回答が見つかりませんでした。 ARMアーキテクチャがアームモードからサムモードに切り替わると、私に教えてください。切り替えがどのように働くかを説明する。ARMアーキテクチャのアームモードからサムモードに切り替えるすべての方法をリストし、詳細に説明しますか?

+0

なぜ知りたいですか? –

+4

この宿題はありますか?また、あなたが書いた2行には、約15個のスペリングと文法上の誤りがあります。ここで皆さんが「詳細に説明する」ことを期待しているなら、少なくとも少し努力してください。 – Dan

+0

これは宿題に関する質問だった可能性があります。それにもかかわらず興味深い質問です。 – viv

答えて

8

答えはARM ARM(ARMアーキテクチャリファレンスマニュアル)に記載されています。たとえば、ARM命令とThumb命令の両方でBXを参照してください。これが宿題の質問である場合のためのより多くの指示があります。

も例外が発生したときに何が起こるかのための擬似コードを見て:

 
R14_ = return link 
SPSR_ = CPSR 
CPSR[4:0] = exception mode number 
CPSR[5] = 0 
if == Reset or FIQ then 
    CPSR[6] = 1 
CPSR[7] = 1 
if != UNDEF or SWI then 
    CPSR[8] = 1 
CPSR[9] = CP15_reg1_EEbit 
PC = exception vector address 

(ARMのARMで)上記の擬似コードのコメントは、あなたの質問に別の答えを記述します。

ここで明白ではない、おそらくBXおよび他の命令の説明で誤解を招くことがあるのは、bx rmが必ずしも状態を切り替えるわけではないということです。サムのBX記述には、「ARMコードとThumbコードの間の分岐」と記載されています。まるでそれを使っている親指が、常に腕のコードにあなたを連れて行くように。擬似コードは少し上手く描いていますが、レジスタ内のアドレスのlsbitは、親指または腕のコードに分岐しているかどうかを示します。親指の説明のPC擬似コードは誤解を招きます。 Thumb命令は16ビットで、PCは0x00、0x02、0x04などの時点で16ビット前に移動します。アームモードでは命令は32ビットで、PCは0x00、0x04、0x08などになります(ARM命令の分岐命令ブランチは、親指の分岐が< < 1、0,2,4,6、などをsigned_immedされるなど< < 2、0,4,8を、signed_immedれる)

あなたが混合モードプログラムを持っている場合、基本的には、使用したいです特にmov pc、lrの代わりにbx lrを返すときはBの代わりにBXを使います。したがって、親指と腕の両方の関数はbx lrを使用して復帰します。すべての4つのケースがカバーされ、腕を呼び出す腕、腕を親指、親指を腕と親指と呼びます。

cpsrのTビットに影響する命令を探したり、プログラムカウンタをどこかに分岐させるような方法でプログラムカウンタに影響を与えたりします。興味のあるファミリー/コア(ARM ARMを読んでいる場合)、armv4t、armv6、armv6などにも注意してください。特定のコアについて、TRM(Technical Reference Manual)を入手することをお勧めします同様に使用します。 ARM ARMは非常に汎用的であり、コアの数が増加するにつれて、ARM ARMでは特定の相違点が明確ではありません。あなたはTRMが必要です。

私はARM ARMの多くのリビジョンを持ち、すべてにバグ/エラーが含まれています。意図的であるかどうかわからないので、使用しているコアがどのように実際に動作しているかを知るためには、常にいくつかのハッキングが必要です。

+2

私はその答えをより良く書くことができました。とにかく、短い答え:CPSRのTビットに影響を与える指示を探します。 –

関連する問題