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指令集生成二进制程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理