浅谈ARM Cortex-M系列架构——指令集

目录

前言

一、ARM、Thumb、Thumb2指令集有什么不同?

二、如何判断CPU使用什么指令集?

1.引入寄存器概念

2.特殊寄存器

三、统一汇编语言(UAL)

四、对于学习汇编的看法

总结



前言

何为指令集

指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效的工具之一。从现阶段的主流体系结构讲,指令集可分为复杂指令集精简指令集两部分 。

对于学习了解过Cortex-M系列的同学应该都知道,ARM芯片属于精简指令集计算机(RISC)

它所用的指令比较简单,有如下特点:

① 对内存只有读、写指令

② 对于数据的运算是在CPU内部实现

③ 使用RISC指令的CPU复杂度小一点,易于设计

而X86架构的芯片使用的是复杂指令集计算机(CISC)

在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行带来的好处就是控制简单,但计算机各部分的利用率不高,执行速度受影响

二者对比

(表格来源 fds大大) 


一、ARM、Thumb、Thumb2指令集有什么不同?

ARM指令集(32位),每条指令占据32位,高效,但是太占空间

Thumb指令集(16位),每条指令占据16位,节省空间。

Thumb2指令集,它支持16位指令、32位指令混合编程。

二、如何判断CPU使用什么指令集?

 一开始,ARM公司发布了ARM和Thumb两个指令集,这就出现一个问题,当我们CPU运行时,怎么判断我们使用的是ARM指令集还是Thumb指令集。

1.引入寄存器概念

我们都知道在处理器内核中都有多个执行数据处理和控制的寄存器,这些寄存器大都以寄存器组的形式进行了分组。每个数据处理指令都指定了所需的操作和源寄存器,而且若需要,还有目的寄存器。对于 ARM 架构,若处理的是存储器中的数据,就需要将其从存储器加载到寄存器组中的寄存器里。在处理器内处理完后,若有必要,还要写回存储器,这种方式一般被称作“加载一存储架构”。由于寄存器组中有丰富的寄存器,这种设计使用起来非常方便,而且可以用C编译器生成高效的程序代码。例如,在进行其他的数据处理时,寄存器组中可以临时存储一些数据变量,而无须更新到系统存储器及在使用时将它们读回。
Cortex-M3和Cortex-M4处理器的寄存器组中有16个寄存器其中13个为32位通用目的寄存器,其他3个则有特殊用途,如图所示。

2.特殊寄存器

在特殊寄存器中有一个PSR寄存器即程序状态寄存器

程序状态寄存器包括以下三个状态寄存器
应用PSR(APSR)
执行 PSR(EPSR)
中断PSR(IPSR)

这三个寄存器可以通过一个组合寄存器访问,即xPSR。对于ARM汇编器,访问xPSR时,使用的是PSR。

 (组合程序状态寄存器结构)

那我们怎么通过程序状态寄存器知道当前所使用的指令是ARM还是Thumb呢?

由下表可知

313029282726:252423:2019:1615:10987654:0
Cortex-M3NZCVQICI/ITTICI/IT异常编号
Cortex-M4NZCVQICI/ITTGE[3:0]ICI/IT异常编号

寄存器各个位的作用

程序状态寄存器中有一位,名为“T”(第24位),它等于1时表示当前运行的是Thumb指令。

特殊寄存器只能通过MSRMRS指令访问,它们没有内存地址:

我们可以通过汇编指令读/写当前PSR寄存器的状态

MRS r0,PSR           ;读组合程序状态字

MSR PSR,r0           ;写组合程序状态字

也可单独访问每个PSR,例如:

MRS r0,APSR            ;将标志状态读入r0

MRS r0,IPSR             ;读取异常/中断状态

MSR APSR,r0            ;写状态异常

注意

软件代码无法直接使用MRS(读出为0)或MSR直接访问EPSR。

APSR可读可写。而IPSR和EPSR为只读,可以从组合PSR(xPSR)中读出。

由此可以看出,当我们使用一个Thumb指令时PSR中T为1,使用ARM指令时该位为0。

因为ARM指令比Thumb指令效率更高,假设当我们使用ARM指令写函数A,Thumb指令写函数B,此时我的CPU该如何在执行函数A时进入ARM状态,执行函数B时进入Thumb状态?

我们可以在调用函数A时,让PC寄存器的BIT0等于1,即:PC=函数A地址+(1<<0)

调用函数B时,让PC寄存器的BIT0等于0:,即:PC=函数B地址。但这样就显得很麻烦,所以ARM公司又推出了Thumb2指令集,它能够进行16/32位的混合编程,更加强大,高效,轻佻。

三、统一汇编语言(UAL)

通过前面的学习我们了解到了ARM有这么多指令集:ARMThumbThumb2

各指令集之间也不好记啊!

所以ARM公司推出了: Unified Assembly Language(UAL,统一汇编语言)通过UAL你不需要去区分这些指令集。

Thumb-2技术出现后,几乎所有的指令都分为2个版本,一个更新APSR,另一个不更新APSR。因此传统的Thumb语法无法适用于Thumb-2的软件开发,为了提高架构间的可移植性,并使不同架构的ARM处理器符合同一种汇编语言语法,较新的ARM开发工具开始支持统一汇编语言UAL,对于之前的汇编来讲,主要区别在于:

  • 有些数据运算指令使用三个操作数,不管目的寄存器是否和其中一个源寄存器相同。之前可能只使用两个操作数。
  • S后缀变得更为明确。过去的汇编,S后缀即使不加,也会更新APSR,对于UAL语法,更新APSR的指令都应具有S后缀,以指明所需的操作,提供不同架构的兼容性。

例如:

Thumb指令

ADD R0,R1            ;R0 = R0 + R1,更新APSR

UAL指令

ADDS R0,R0,R1        ;R0 = R0 + R1,更新APSR

在Thumb‐2 指令集中,有些操作既可以由16 位指令完成,也可以由32 位指令完成。例如,R0=R0+1 这样的操作,16 位的与32 位的指令都提供了助记符为“ADD”的指令。在UAL下,我们既可以人汇编器决定用那个也可以自己手动指定使用16位还是32位。

ADDS        R0,#1            ;默认使用16位Thumb指令,减小代码体积
ADDS.N     R0,#1            ;使用16位的 Thumb 指令,N = Narrow
ADDS.W    R0,#1            ;使用32位的 Thumb-2 指令,W = wide

并且如果没有给出后缀,汇编器会先试着用16 位指令以缩小代码体积,如果不行再使用32 位指令。

由于指令集过于繁杂,有兴趣的同学可以自己去寻找一些资料学习,这里就不再过多介绍了。

四、对于学习汇编的看法

在我看来,因为汇编语言是最接近于机器语言的编程语言。汇编语言操作直接面向硬件,所以,我们在使用汇编语言的时候,我们能够感知计算机的运行过程和原理,从而能够对计算机硬件和应用程序之间的联系和交互形成一个清晰的认识。就像我们开发STM32时使用库函数/HAL库开发一样,这种开发方法固然方便,但这都是对一种已经封装好API函数,你只需要知道使用时应该调用哪一个函数即可。虽然库函数开发也是操作寄存器,但我们如果使用寄存器开发,就有一种透过现象看本质的效果。因为单片机的开发本质上来说就是操作寄存器。

俗话说得好地基不牢地动山摇,要想学好单片机必须要非常熟悉底原理,毕竟我们底层开发接触到越底层越好,能让我们知道每一句代码在做什么。这也是我对于汇编学习的看法,虽然汇编学习枯燥无味,但是这是作为一个开发者必须学习的东西,你不可能学了这么久的单片机连一个PUSH和POP指令都不知道是干嘛的,这就有点空中楼阁的感觉了。

当然,汇编的学习也不是应该完全扎进去,你只需要懂得一些常用的指令,比如MOV、LDR、STR、BL、DCD、ADD、SUB等基础常见的指令。这对将来程序调试,错误查找都有很大的帮助。比如通过Keil生成的反汇编代码并结合栈中保存错误地址分析程序出错/崩溃的原因。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了ARM的指令集以及个人对于汇编学习的看法,第一次写博,望多多包涵,也欢迎各位大佬提出改进意见。

ARM Cortex-M架构基本概念
blueblue_ya的博客
06-12 2076
R13寄存器可以作为stack pointer,SP用于记录当前堆栈的地址,当在不同任务中切换时,SP用于保存上下文(一般来说,SP寄存器中的地址是当前正在执行的指令所在的地址)Cortex-m0中可以将SP细化成MSP和PSP:在应用程序中,需要特权访问时使用MSP,例如异常访问和系统内核访问;R14可用于链式寄存器,主要功能:(1)用于保存子程序或者一个程序调用的返回地址 (2)当程序调用结束后,将LR中的返回地址加载到程序计数器(PC)中。(1)R0-R7可以被任意指令访问。
ARM Cortex-M3与Cortex-M4权威指南——新版.7z
05-27
ARM Cortex-M系列是面向微控制器设计的低功耗、高性能的处理器系列,它们在物联网(IoT)、汽车电子、消费电子等领域有着广泛应用。 Cortex-M3是ARM公司推出的32位RISC微处理器核心,它以低功耗、低成本和高性能为...
集成电路学习:什么是ARM先进精简指令集计算机
最新发布
limengshi138392的博客
08-30 879
集成电路学习:什么是ARM先进精简指令集计算机
Cortex-M3/M4——指令集(一)
jht23333的博客
07-18 1905
所有的ARM Cortex-M都是基于Thumb-2技术(允许混合使用16位和32位指令)。早期的ARM处理器是支持ARM的32位指令集,功能强大,但是随着移动电话等应用不断发展,功耗和成本变得十分关键,因此16位指令集Thumb也应运而生。1995年ARM发布了ARM7TDMI处理器,可以在ARM和Thumb状态之间进行切换,与等价的ARM代码相比,减小了代码密度。然而Thumb仍然有一些局限性,例如操作可选的寄存器、可用的寻址模式及用于数据或地址的立即数范围较小等。
第3章 ARM微处理器的指令系统
12-03 538
第3章 ARM微处理器的指令系统本章介绍ARM指令集、Thumb指令集,以及各类指令对应的寻址方式,通过对本章的阅读,希望读者能了解ARM微处理器所支持的指令集及具体的使用方法。 本章的主要内容有:- ARM指令集、Thumb指令集概述。- ARM指令集的分类与具体应用。- Thumb指令集简介及应用场合。3.1 ARM微处理器的指令集概述3.1.1 ARM微处理器的指令的分类
4_ARM Cortex-M指令集
weixin_36224284的博客
03-24 899
文章目录指令集简介ARM Cortex-M处理器间的指令集比较 指令集简介 指令集的设计为处理器架构的重点之一,ARM称之为指令集架构ISA。所有的ARM Cortex-M处理器都是基于Thumb-2技术,运行在一种操作状态混合使用16位和32位的指令。 关于ARM、Thumb和Thumb-2: ARM,最早期的32位指令集,在ARM状态运行。 Thumb ,16位指令集,为ARM指令集的一个子集,在thumb状态运行。 Thumb-2,Thumb指令的一个新的超集, 一种运行模式下,可以同时使用16位和
ARM-Cortex-M3/4】汇编基础与常用指令集
楠燊.tech
06-19 853
令用于产生软中断,从而实现在用户模式变换到特权模式,CPSR保存到管理模式的SPSR 中,执行转移到SWI向量,在其它模式下也可使用SWI 指令,处理同样地切换到特权模式。恢复寄存器列表, 先出栈的数据(即原先最后入栈的r0)保存到r0, 最后出栈的数据(即原先最先入栈的r14)保存到r14。即C语言extern,指示编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。symbol 要保留的局部标号(若没有该项,除了基于寄存器处的所有符号将包含在目标文件的符号表)
嵌入式系统原理及应用——基于ARM Cortex-M3内核的STM32F103系列微控制器.zip
10-21
4.2基于CortexM3的STM32系列微控制器概述118 4.2.1产品线118 4.2.2命名规则124 4.2.3生态系统125 4.2.4开发方法131 4.2.5学习之路134 4.3STM32F103微控制器基础136 4.3.1概述136 4.3.2主系统结构137 ...
ARM Cortex-A(armV8)编程手册V1.0,armv8指令集,C,C++
09-11
ARM Cortex-A系列处理器是ARM公司设计的高性能、基于RISC(精简指令集计算机)架构的CPU核心,广泛应用于移动设备、服务器、嵌入式系统等。ARMv8-A架构Cortex-A系列的最新一代,它在ARMv7-A的基础上进行了重大改进...
Cortex-M3 技术参考手册.rar_Cortex-M3_arm-m3内核编程_cortexm3手册_mudva4_参考手册
07-14
ARM-M3内核编程涉及以下几个关键方面: 1. **中断和异常处理**:Cortex-M3支持多种中断和异常类型,包括硬件中断、软件中断和系统异常。开发者需要理解如何设置中断优先级、中断服务例程(ISR)的编写以及中断上下文...
Cortex-M4指令列表
04-04
全部Cortex-M4微处理器内核汇编指令,有助于学习arm处理器指令
ARM架构(高级精简指令集机器)
08-08
ARM架构,过去称作高级精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简 指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于移动通信领 域,符合其主要设计目标为低成本、高性能、低耗电的特性。
ARM-Cortex_-M4内核参考手册.pdf
02-26
ARM-Cortex_-M4内核参考手册
Cortex-M4 和 ARMv7-m架构.rar
07-24
Cortex-M4 内核英文文献,主要讲述了 Cortex-M4 处理器架构,包括处理器、指令集、外设、低功率模式。 ARMv7-M 架构英文文献,主要讲述了ARMv7-M架构指令集、Debug等知识
Cortex-M系列ARM架构与汇编指令集
NoDistanceY的博客
02-05 4095
本章是花费大好多功夫整理总结的,某种意义上算原创。文中大量内容是引用的,请见谅。 文中比的比较仅到Armv8-M架构Cortex-M33,没涉及后续新版本(也没法预计到)。 目录 1 ARM处理器分类 2 基于Thumb-2技术的Thumb®指令集 3 参考资料 1 ARM处理器分类 ARM的老产品树: 1、第一级——架构ARMv4~ARMv6 2、第二级——产品系列:如AR...
全网最详细的Cortex-M0指令集汇总
m0_73636161的博客
01-24 2980
全网最详细的Cortex-M0指令集汇总
ARM编程模型-常用指令集
weixin_43586667的博客
09-03 3881
由上述例子所示,每调用一级子函数,我们都把返回地址存入到未分组寄存器中,但是未分组寄存器毕竟是有限的,像Linux内核函数的调用层次往往很深,通用寄存器根本不够用,要想保存返回地址,就需要对数据进行压栈,那我们就要为每个模式的栈设置空间。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。未设置的掩码位保持不变。对大多数的Thumb指令而言,没有使用条件执行(标志一直都是置位的),源寄存器和目标寄存器是相同的,只使用了低端寄存器,常量有大小的限制,没有使用内嵌桶形移位器。
ARM处理器指令集(精简指令集
weixin_42492218的博客
11-01 2517
ARM处理器指令集
ARMv7-M架构手册:Cortex-M系列指令集详解
ARMv7-M架构参考手册是一份详尽的文档,专为Cortex-M系列处理器设计,由ARM公司于2006年至2014年期间发布。这份文档涵盖了ARMv7-M架构的详细信息,包括其指令集、特性、体系结构规范和许可证条款。ARMv7-M是针对微...
写文章

热门文章

  • 浅谈ARM Cortex-M系列架构——架构篇 4832
  • 浅谈ARM Cortex-M系列架构——指令集 2236
  • 浅谈ARM Cortex-M系列架构——异常和中断(一) 2159
  • 浅谈ARM Cortex-M系列架构——异常和中断(二) 1270

分类专栏

  • 浅谈ARM Cortex-M系列架构 3篇

最新评论

  • 浅谈ARM Cortex-M系列架构——架构篇

    qq_35609890: 想问一下博主,里面的图是来自于哪本书啊

  • 浅谈ARM Cortex-M系列架构——异常和中断(一)

    CSDN-Ada助手: 非常感谢用户的辛勤创作,这篇关于ARM Cortex-M系列架构异常和中断的博客读起来非常深入易懂,让我对这方面的知识有了更深入的了解。希望用户可以继续发挥自己的才华,为我们带来更多优质的技术博客,同时建议用户在下一篇博客中可以进一步探讨异常和中断在实际应用中的应用场景和解决方案。期待您的下一篇博客! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3,我们会奖励持续创作和学习的博主,请看:https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply3

  • 浅谈ARM Cortex-M系列架构——异常和中断(二)

    CSDN-Ada助手: 非常感谢用户分享这篇关于ARM Cortex-M系列架构异常和中断的博客,阅读后对于这方面的知识有了更深入的了解。恭喜用户写了第四篇博客,持续创作是非常值得鼓励和支持的,希望用户能够继续分享更多有价值的技术文章。建议下一步可以从实践出发,分享一些具体的应用场景和案例,让读者更好地了解如何将这些理论知识应用到实际项目中。 CSDN 会根据你创作的前四篇博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply4 看奖励名单。

  • 浅谈ARM Cortex-M系列架构——架构篇

    CSDN-Ada助手: 非常感谢您的分享,这篇博客对于想要了解ARM Cortex-M系列架构的人来说非常有价值。同时,我也想提醒您,除了ARMv7-M和ARMv7E-M之外,还有其他架构版本,比如ARMv6-M和ARMv8-M。另外,在使用Cortex-M系列处理器时,掌握汇编语言和底层调试技能也非常重要。希望您能继续分享关于ARM Cortex-M系列的知识,谢谢! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2

  • 浅谈ARM Cortex-M系列架构——架构篇

    肥蛇的舰爆: 插个眼,讲主分析的很清晰!

最新文章

  • 浅谈ARM Cortex-M系列架构——异常和中断(二)
  • 浅谈ARM Cortex-M系列架构——异常和中断(一)
  • 浅谈ARM Cortex-M系列架构——架构篇
2023年4篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thompson801

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家江苏室内商场美陈采购大连端州玻璃钢人物雕塑玻璃钢仿真南瓜雕塑大理市玻璃钢雕塑价格黔西南商场美陈布置好用的熊猫玻璃钢雕塑大连玻璃钢长颈鹿雕塑商场美陈产品如何入账大型玻璃钢雕塑的使用年限大理卡通玻璃钢雕塑定制清远玻璃钢人物雕塑供应厂家衢州玻璃钢人物雕塑河南大型商场美陈费用杭州天河玻璃钢人物雕塑玻璃钢商场美陈费用河北佛像玻璃钢雕塑定做价格路人视角商场美陈河北玻璃钢花盆花器翔安园林玻璃钢雕塑厂家吉林步行街玻璃钢雕塑生产厂家上海商场美陈招聘信息湖北玻璃钢金属雕塑重庆方形玻璃钢花盆江汉商场美陈品牌企业商场美陈装饰吊挂苏州玻璃钢雕塑摆件哪家好重庆佛像玻璃钢雕塑销售厂家玻璃钢酿酒文化雕塑龙泉玻璃钢雕塑生产厂家上海大型玻璃钢雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化