ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
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命令の可変長命令となる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます