web-dev-qa-db-ja.com

ARM Thumb命令セットとは何ですか?

「ARM11TechnicalRefManual」のセクション1-34の「Thumb命令セット」の下で、

「Thumb命令セットは、最も一般的に使用される32ビットARM命令のサブセットです。Thumb命令は16ビット長で、対応する32ビットARM命令を持ちます。プロセッサモデルに同じ効果があります。」

誰でもこの特に2番目の文についてさらに説明し、プロセッサがそれをどのように実行するかを言うことができますか?

35
Soroush

ARMプロセッサには2つの命令セットがあります。従来のARMセット、命令はすべて32ビット長であり、より圧縮されたThumbセット、一般的な命令は16ビット長です(一部は32ビット長です)。実行する命令セットは開発者が選択でき、アクティブにできるのは1セットのみです(つまり、プロセッサがThumbモードに切り替えられると、すべての命令がARMの代わりにThumbを使用してデコードされます)。

これらは異なる命令セットですが、類似の機能を共有しており、同じアセンブリ言語を使用して表すことができます。たとえば、命令

ADDS  R0, R1, R2

ARM(E0910002/11100000 10010001 00000000 00000010)またはThumb(1888/00011000 10001000)にコンパイルできます。もちろん、同じ機能を実行します(r1とr2を追加し、結果をr0に保存します) )、エンコードが異なる場合でも、これはThumb命令は16ビット長であり、対応する32ビットARMプロセッサに同じ効果を持つ命令がありますモデル

Thumbエンコーディングのすべての命令には、対応するARMのエンコーディングもあります。これは「サブセット」文を意味します。


*:厳密には真実ではありません。ARMには「IT」命令はありませんが、ARMはとにかく「IT」を必要としません(アセンブラによって無視されます)。

46
kennytm