arm处理器的thumb和arm指令集
arm处理器拥有多种指令集,不同的架构支持不同的指令集。
armeabi-v7a是一个32位的架构,其支持thumb-1,thumb-2,arm三种指令集。
thumb-1和arm
thumb-1指令集是arm指令集的子集,thumb-1指令长度为16位(两个字节),arm指令为32位(4个字节)。thumb-1指令集并不是一个完整的指令集,有一些操作无法使用thumb-1指令集完成,但是对于简单的操作使用thumb-1指令集的程序比使用arm指令集的程序体积更小。
thumb-1和thumb-2
thumb-2是对thumb-1的扩展,thumb-2的一些指令使用了32位(4个字节)。但是一般情况下thumb-1指令集是和thumb-2指令集配合使用,在编译程序时如果使用thumb指令,生成的程序既会包含thumb-1的指令又会包含thumb-2的指令。当一个操作可以使用一条 32bits指令完成时就使用 32bits 的指令,加快运行速度,而当一次操作只需要一条16bits 指令完成时就使用16bits 的指令,节约存储空间。
上图中的程序就是既包含16位的thumb-1指令又包含32位的thumb-2指令。一般含有.w后缀的指令都是thumb-2指令集特有的指令。
在ndk编译时使用thumb和arm指令集生成程序
默认情况下是使用thumb指令集生成二进制程序,这样可以减小二进制程序的体积。使用编译参数-mthumb 可以指定选择使用thumb指令集生成二进制文件。使用-marm 编译参数指定使用arm指令集生成二进制程序。