ARM汇编基础上

本文介绍了ARM处理器的指令集特点,包括定长指令的优势与限制,以及Thumb和ARM指令集的区别。详细讲解了Thumb2指令集的产生及其结合了两者优点。文章还探讨了ARM的工作模式,寄存器的使用,特别是R13、R14和R15的特殊用途。通过示例展示了如何从C代码生成汇编代码,并解析了ARM汇编代码的结构和函数调用约定。
摘要由CSDN通过智能技术生成

ARM是一个精简指令集处理器,其指令集的设计是定长的,也就是其汇编对应的机器码是定长的(2字节或者4字节)。那么对于定长而言,其优点就是更快的被执行,因为这样CPU取指令译码的速度相对x86的CPU会快一些,但是缺点也比较明显,毕竟定长,那么表示其指令有限(指令少),所以一定程度上会软件的复杂度(需要几条指令才能完成一个功能)。

ARM的指令集一开始设计定长都是2字节的,随着时间的发展,会发现指令可能已经不够表达了,所以后面又出现了4字节的指令集。对于2字节的指令集称为thumb指令集,而4字节的称为arm指令集。此时我们可以自由选择,如果需要体积小那么我们可以选择thumb编译,而需要性能更好可以选择arm指令集。

但是对于某些指令而言,比如加法,那么使用2字节和4字节的指令区别其实并不大,所以就出现了thumb2指令集,其指令集算是变长了(要么2字节要么4字节),算是集合了上面两种的指令集的优点,现在的ndk编译器只能编译出thumb2指令集合arm指令集了。

下面来说说ARM处理器的工作状态,也就是说CPU如何按几个字节来取指令译码,毕竟存在多套指令集

1.ARM状态
2.Thumb状态

那么如何给CPU指令集指明状态呢?其实在标志寄存器中有一位来表示哪种状态,具体可以看下面的标志寄存器。

下面就可以说到寄存器了,如下图

上图表示了不同的模式下对于寄存器的访问,那么什么是CPU的工作模式,简单来说也就是x86下的权限级别划分,也就是多少环的意思,在arm里共有7种模式,其实本质上说还是2种,也就是三环和0环,只是把0环拆分的更加细致了,所以多了这么多的模式出来。

对于ARM的寄存器,目前我们只需关心用户模式,只需记住以下两种,共17个寄存器可用

1.通用寄存器 R0-R15
2.标志寄存器 cpsr

对于其他模式的寄存器,又会有其对应的寄存器,也就是上图中颜色比较深的那几个,但是对于寄存器的访问而言是一样的,比如说当进入了管理模式,那么我们使用SPSP寄存器访问的是SPSP_svc寄存器,而到了中止模式,我们还是只需使用SPSP寄存器,但是此时本质上访问的是SPSP_abt寄存器,无需关心真实的寄存器变化和名字。

通过上图也可以发现,不管在哪种模式下,其R0-R7,R15寄存器都是通用的。

下面再来稍微细说一下通用寄存器和程序计数器,在上图的寄存器在汇编中名字可以发现,其后面都有一个括号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值