2012-05-17 289 views
24

在“ARM11TechnicalRefManual”的节1-34“Thumb指令集”下它表示:什么是ARM Thumb指令集?

“Thumb指令集是最常用的32位ARM instructions.Thumb指令的子集被16位长,并有一个相应的32位ARM指令,对处理器型号具有相同的效果。“

是否有人可以更多地解释这个特别是第二句话,并说出处理器如何执行它?

回答

29

ARM处理器有2个指令集,传统ARM集,其中所述指令都是32位长,并且更稠拇指集,其中最常见的指令是16位长(和一些是32位长)。开发人员可以选择要运行的指令集,并且只有一组指令可以被激活(即,一旦处理器切换到Thumb模式,所有指令将被解码为使用Thumb而不是ARM)。

尽管它们是不同的指令集,它们共享类似的功能,并且可以使用相同的汇编语言来表示。例如,该指令

ADDS R0, R1, R2 

可被编译到臂(E0910002/11100000 10010001 00000000 00000010)或Thumb(1888/00011000 10001000)。当然,它们执行相同的功能(添加r1和r2并将结果存储到r0),即使它们具有不同的编码。这是的含义Thumb指令长16位,并且具有相应的32位ARM指令,它对处理器型号具有相同的效果。

每*在Thumb编码命令也有ARM相应的编码,这是由“子集”句子的意思。


*:并不完全正确,没有在ARM“IT”的指令,虽然ARM并不需要“IT”反正(它将被汇编忽略)。

+17

最初的Thumb指令集只包含16位指令。 Thumb2引入了混合16/32位指令。 Thumb(1)仅仅是ARM指令集的压缩版本。 CPU将在指令获取时启用“解压缩器”,最终CPU仍然处理ARM指令。对于ARM来说,这很可能是一种快速但优雅的破解,可以在对实际内核进行微小更改的情况下缩减代码大小和ICache使用率。 Thumb2增加了很多新功能,如提到的“IT *”指令和一些32位指令。 –

+0

哪一个比其他更受欢迎?我们是否必须使用32位处理器的ARM指令和16位处理器的Thumb指令? – Rajesh

+0

@Rajesh AFAIK没有“16位ARM处理器”。如果您的目标是armv7或以上,请使用Thumb。 – kennytm