| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
ARMの実行モードの一つ「T32」で使われる16ビット長の命令セットの命令のこと。
32ビット長の命令が長いと感じられる場面向けに作られた、短い(?)16ビット長の命令である。
Thumb-1は、ほぼ16ビット固定長と言えるが、実際には16ビットを2つ組み合わせる命令が一つあるため、16ビット単位の可変長命令であるとも言える。
Thumb-2命令は、本格的な可変長命令セットとなった。各々、16ビットThumb、32ビットThumbと呼ぶ。
64ビット化されたARMv8では、この命令セットを、AArch32ステートという実行モードのうちのThumb命令セット「T32」と呼ぶ。
従来の32ビット長命令から機能を削り、16ビット命令化した、縮小命令である。
16ビット長命令で済むような簡単な処理なら標準の32ビット長命令を使わずに済み、プログラムサイズを減らせ、消費電力を下げられる。公称、コードサイズを3割減らせるが、処理性能も2割強低下する、としている。
この命令セットの影響は大きく、ライバルであるMIPSまでも、対抗のためにMIPS16という圧縮16ビット命令セットを用意せざるを得なくなった。
しかし切り替えが必要で不便だったため、Thumb-2命令としてARMv6の拡張機能という扱いで両者混在も可能となった。公称、2%の性能低下でコードサイズを3割減らすことができるとしている。
32ビット長だったものを半分の16ビット長にしたため、機能が大幅に削られており、ARMらしさが大幅に減少した。
以下は、Thumb-1の命令を記載する。Thumb-2命令の16ビットThumb命令は拡張があり、これと若干異なる。
| 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| レジスターシフト | 0 | 0 | 0 | Op | Offset5 | Rs | Rd | |||||||||
| 加減算 | 0 | 0 | 0 | 1 | 1 | I | Op | Rn/offset3 | Rs | Rd | ||||||
| イミディエイト加減算 | 0 | 0 | 1 | Op | Rd | Offset8 | ||||||||||
| ALU operations | 0 | 1 | 0 | 0 | 0 | 0 | Op | Rs | Rd | |||||||
| Hiレジスター演算 | 0 | 1 | 0 | 0 | 0 | 1 | Op | H1 | H2 | Rs/Hs | Rd/Hd | |||||
| PC相対ロード | 0 | 1 | 0 | 0 | 1 | Rd | Word8 | |||||||||
| ロードストア | 0 | 1 | 0 | 1 | L | B | 0 | Ro | Rb | Rd | ||||||
| ロードストア符号拡張 | 0 | 1 | 0 | 1 | H | S | 1 | Ro | Rb | Rd | ||||||
| LSイミディエイト | 0 | 1 | 1 | B | L | Offset5 | Rb | Rd | ||||||||
| ロードストア16ビット | 1 | 0 | 0 | 0 | L | Offset5 | Rb | Rd | ||||||||
| SP相対ロードストア | 1 | 0 | 0 | 1 | L | Rd | Word8 | |||||||||
| ロードアドレス | 1 | 0 | 1 | 0 | SP | Rd | Word8 | |||||||||
| SP加算 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | S | SWord7 | ||||||
| PUSH/POPレジスター | 1 | 0 | 1 | 1 | L | 1 | 0 | R | Rlist | |||||||
| IT命令 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | firstcond | mask | ||||||
| マルチプルLS | 1 | 1 | 0 | 0 | L | Rb | Rlist | |||||||||
| 条件分岐 | 1 | 1 | 0 | 1 | Cond | Soffset8 | ||||||||||
| ソフトウェア割り込み | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | Value8 | |||||||
| 無条件分岐 | 1 | 1 | 1 | 0 | 0 | Offset11 | ||||||||||
| ロング分岐 | 1 | 1 | 1 | 1 | H | Offset | ||||||||||
最後のロング分岐は、16ビット命令を2セット組み合わせて32ビットで用いられる。
また、Thumb-2命令では、このロング分岐と同様のコンセプトで命令を拡張した。上位3ビットが111で、続く2ビットが00でない時に、Thumb-2命令の可変長命令となる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます