ARM汇编学习录 1 -基础概念

指令集概述

现阶段有四个不同的指令集

名称概述
ARM3232位指令集
Thumb16位指令集,ARM32子集,提供高密度低功耗
Thumb232位指令集,ARMv6T2 引入.是thumb超集
ARM6464位指令集

note:
ARM某一个时刻只能运行单独ARM指令集或者Thumb指令,通过CPSRT标志位决定.
如何当前执行ARM函数,想要跳转到thumb函数可以通过调用BX切换状态,需要注意的是Thumb函数跳转地址必须末尾是1才能让CPSR自动切换(thumb实际函数由于字节对齐末尾是0,所以很多跳转到thumb地址函数时往往会手动+1在执行BX指令)。

不同指令集的作用:

(1) 此部分为个人理解不具备权威性,ARM32为固定32位长度指令可以访问(R0-R15),但对于轻量化设备来说期望更大的代码密度从而降低对内存的需求。因为推出了编码长度16位的thumb指令,但是只能访问(R0-R7)。对于同一个功能来说往往thumb需要更多指令才能任务(且通用寄存器访问受限),因此整体效率会较低。

(2) 部分功能thumb指令尚未提供的需要切换到ARM模式下执行ARM指令。但是频繁切换ARM与thumb模式成本过高,因为推出了thumb-2指令集。thumb-2指令集兼容16位的thumb指令,也扩展了需要32位指令且可以访问所有寄存器。

(3) ARM64 也是固定长度为32位编码指令集,但是支持64位内存下的执行环境。

条件执行

多架构

其中ARMv7开始提供了三个版本的架构主要提供不同目的:

名称概述
ARMv7-A官方文档
ARMv7-R官方文档
ARMv7-M官方文档

其中ARMv7-A一般用于手机。

状态寄存器

ARMv7中有三个存储当前程序状态的寄存器。

名字简述参考链接
APSR这个是CPSR在用户模式下的视图链接
CPSR用于保存当前程序执行的状态信息。它包括程序状态、条件码、控制标志和一些其他控制位。CPSR中的位表示了当前的程序状态,例如,是否处于特权模式、是否允许中断等。它还包括条件码,用于条件执行指令,根据执行结果决定是否跳转。链接
SPSR当程序触发异常/中断时需要跳转特定函数进行处理,需要保存当前CPSR那么SPSR将作为备份使用。链接

CPSRSPSR寄存器位域图
在这里插入图片描述
APSR寄存器位域图
在这里插入图片描述
ARM中的状态寄存器

特性

ARM既支持大端也支持小端,由其CPSRE标志位决定

通用寄存器

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部