主な内容
1.Thumb命令セットの詳細な説明2.Thumb
から直接アクセスされるレジスター3.Thumb命令セット
のコンポーネントの詳細な説明
4.Thumbとarmのステータスが変更されました
5.Thumbの一般的なアプリケーションシナリオ
1.サム命令セットの詳細な説明
•ARMプロセッサは、ARM命令セットとThumb命令セットの2つの命令セットをサポートします。
•ARM命令セットの長さは32ビットで、Thumb命令セットの長さは16ビットです。16ビットの外部データバス幅では、ARMプロセッサでThumb命令を使用する場合のパフォーマンスは、ARM命令を使用する場合よりも優れています。
•Thumb命令の意味:16ビットのデータバス幅を持つアプリケーションシステムと互換性があります。
2.Thumbが直接アクセスするレジスタ
3.Thumb命令セットのコンポーネント
•3.1。サムデータ処理命令
•3.2。ブランチジャンプの指示
•3.3。レジスタのロードおよびストア命令(単一レジスタ、複数レジスタ)
•3.4。その他の指示
•SWI:ソフト割り込み命令
命令形式は次のとおりです。
SWI immed_8
其中:immed_8 8 位立即数,值为0~255 之间的整数。
SWI 指令举例如下:
SWI 1 ;软中断,中断立即数为0
SWI 0x55 ;软中断,中断立即数为0x55
使用SWI 指令时,通常使用以下两种方法进行传递参数,SWI 异常中断处理程序可以提供相关的服务,这两种方法均是用户软件协定。SWI 异常中断处理程序要通过读取引起软中断的SWI 指令。以取得8 位立即数。
(A)指令中8 位的立即数指定了用户请求的服务类型,参数通过用寄存器传递。
MOV R0,#34 ;设置子功能号为34
SWI 18 ;调用18 号软中断
(B)指令中的8 位立即数被忽略,用户请求的服务类型由寄存器R0 的值决定,参数通过其它的通用寄存器传递。
MOV R0,#18 ;调用18 号软中断
MOV R1,#34 ;设置子功能号为34
SWI 0
4.サムとARMの状態変化
•ARM / Thumb間の状態切り替えは、特別な転送交換命令BXによって実現されます。
アセンブリ形式:BX {} Rm
機能:BX命令は、命令で指定されたターゲットアドレスにジャンプし、状態切り替えを実現します。Rmは、ターゲットアドレスを表すレジスタです。Rmの最下位ビットRm [0]が1の場合、プログラムはARM命令状態からThumb命令状態に強制的にジャンプします。Rmの最下位ビットRm [0]が0の場合、プログラムはThumb命令状態からARM命令に強制的にジャンプします。状態。
BX命令の例
CODE32 ;ARM 程序段,32 位编码
arm1 ADR R0,thumb1+1 ;把thumb1 所在地址赋给R0 ,末位R0[0] 置1 ,要跳转THUMB 指令集
MOV LR,PC ;设置返回地址
BX R0 ;跳转
ADD R1,R2,#2 ;返回地址处,第4 条指令
CODE16 ;THUMB 程序段, 16 位编码
thumb1 ADD R1,R3,#1 ;THUMB 程序
BX LR ;跳转到返回地址处,执行第4 条指令
上記の分析例:状態切り替えを伴うサブルーチン呼び出しと戻り構造を説明しました。ARMプログラムセグメントがMOV LR、PCステートメントを実行すると、戻りアドレスがLRレジスタに保存されます。BXステートメントが実行されると、PCは次に実行されるステートメントを指します。このとき、PC(R15)の値は次のステートメントのADD命令のアドレスであり、ARM状態からR0への切り替えはR0のビット[0]に従って実現されます。親指の状態。このようにして、Thumbサブルーチンが呼び出されます。サブルーチンが呼び出された後、BX LR命令を使用して、サブルーチン呼び出しの戻りを実現し、ARM状態に切り替えます。
5.サム命令のいくつかのアプリケーション
•idaでThumb命令とARM命令を識別する方法
•CODE32はARMアセンブリ命令を使用することを意味し、CODE16はTHUMBアセンブリ命令を使用することを意味します。
•Thumbアセンブリの主なアプリケーションシナリオ:Soファイルを逆デバッグする場合、ARMシェルコードコードを作成する場合。
•以下は、armのシェルコードのアプリケーションです。
その他の記事については、私の公式アカウントをフォローし、一緒に学び、一緒に進歩してください。