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

本文介绍了ARM系列指令集的发展,包括ARM32、Thumb、Thumb-2和ARM64,讨论了它们在不同场景下的优势与限制,以及ARMv7架构的三个版本(A、R、M)及其用途。重点讲解了条件执行和状态寄存器CPSR/SPSR的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指令集概述

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

名称概述
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标志位决定

通用寄存器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值