ARM汇编指令集_学习笔记(1)
一、什么是ARM汇编?
- 运行在ARM处理器上的汇编语言就叫ARM汇编。
- C程序运行在X86平台,底层就是X86汇编;运行在ARM平台,底层就是ARM汇编。ARM汇编与X86汇编有显著区别。
- X86属于CISC(复杂指令集);ARM属于RISC(精简指令集)。
二、CISC存在的问题:
三、RISC特点:
- 简单的指令集---RISC指令集只提供很有限的操作,基本上单周期指向每条指令,其指令长度也是固定的(一般4个字节)。CISC指令复杂丰富,功耗大,长度不固定(1到6个字节)。
- Load-Store架构---在RISC中,CPU并不会对内存中的数据进行操作,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CISC中,CPU是可以直接对内存进行操作的。
- 更多的寄存器---和CISC相比。基于RISC的处理器有更多的通用寄存器可以使用,且每个寄存器都可以进行数据存储或者寻址。
- RISC指令集能够非常有效的适合于采用流水线、超流水线和超标量技术,从而实现指令级并进行操作,提高处理器性能。
四、CISC VS RISC
| RISC与CISC的主要特征对比 | ||
| 比较内容 | CISC | RISC |
| 指令系统 | 复杂、庞大 | 简单、精简 |
| 指令数目 | 一般大于200 | 一般小于100条 |
| 指令格式 | 一般大于4 | 一般小于4种 |
| 指令字长 | 不固定 | 等长 |
| 可访存指令 | 不加限制 | 只有LOAD/STORE指令 |
| 指令使用频率 | 相缠很大 | 相差不大 |
| 指令执行时间 | 相差很大 | 绝大多数在一个周期内完成 |
| 优化编译实现 | 很难 | 较容易 |
| 程序源代码长度 | 较短 | 较长 |
| 控制器实现方式 | 绝大多数为微程序控制 | 绝大多数为硬布线控制 |
| 软件系统开发时间 | 较短 | 较长 |
五、什么是寄存器?
寄存器(register)是CPU的一个组成部分,里面存放着指令、数据和地址等供CPU计算使用,速度比较快。寄存器分为通用寄存器(完成通用的计算功能,谁都可以使用),和专用寄存器(状态寄存器,下一条执行指令寄存器,栈寄存器等,不能随便修改)。
六、ARM微处理器的工作状态一般有两种,并可在两种状态之间切换。
- 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
- 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM微处理器在开始执行代码时,应该处于ARM状态。
- 进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。
- 进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
ARM 指令:当前执行的 PC 和与看到的 PC 相差 8,即看汇编时,需要 pc+8 才是真正的 pc;
Thumb 指令:当前执行的 PC 和与看到的 PC 相差 4即 看汇编时,需要 pc+4 才是真正的 pc。(下图为ARM指令流水线 )

七、ARM微处理器支持7种运行模式。
- 用户模式(USR):ARM处理器正常的程序执行状态。
- 快速中断模式(FIQ):用于高速数据传输或通道处理。
- 外部中断模式(IRQ):用于通用的中断处理。
- 管理模式(SVC):操作系统使用的保护模式。
- 数据访问终止模式(ABT):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
- 系统模式(SYS):运行具有特权的操作系统任务。
- 未定义指令中止模式(UND):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
- ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
- 除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式;其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
八、ARM寄存器
未分组寄存器:它们都共享R0到R7的通用寄存器,即只有一个寄存器;
分组寄存器:R8-R12 :两个(FIQ拥有自己独立的R8-R12的通用寄存器,其它六种处理模式共享R8-R12的通用寄存器。);
所谓的分组寄存器,是指一个寄存器在不同模式下有对应不同的寄存器,比如SP,在abort模式下sp_abt,在undefined模式下是sp_und,在irq模式下是sp_irq,进入各种模式后会自动切换映射到各个模式下对应的寄存器。
1 个固定的程序计数器 : PC (又称 R15),总是指向正在取值的指令,类似于X86的EIP寄存器。
当前程序状态寄存器 :CPSR。不能被同时访问,一种模式下最多同时访问 18 个寄存器。
ARM汇编指令集_学习笔记(1)的更多相关文章
- 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2 任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...
- ARM汇编指令集3
常用ARM指令1:数据处理指令 •数据传输指令 mov mvn mov r1, r0 @两个寄存器之间数据传递 mov r1, #0xff ...
- ARM汇编指令集1
(汇编)指令是CPU机器指令的助记符,经过编译过会得到一串0011组成的机器码,可以由CPU读取执行. (汇编)伪指令本质不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译 ...
- ARM汇编指令集
一.跳转指令.跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转. Ⅰ.使用专门的跳转指令.Ⅱ.直接向程序计数器PC写入跳转地址值. 通过向程序计数器PC写入跳转地址值 ...
- 测试Flask应用_学习笔记
源代码尽在我的github上面:https://github.com/521xueweihan 欢迎大家交流学习 """ setUp() 方法中会创建一个新的测试客户端并 ...
- python基础教程_学习笔记14:标准库:一些最爱——re
标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...
- python基础教程_学习笔记12:充电时刻——模块
充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...
- python基础课程_学习笔记26:编程的乐趣
编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...
- 在 ASP.NET Core 中发送邮件遇到的坑_学习笔记
功能需求 因为项目需要有个忘记密码验证邮箱再重新修改密码的功能,然后我选用了很简单的一个方案,通过验证登录用户的邮箱然后发送邮件,通过这个邮件发送的链接地址来最后实现密码修改的小功能. 项目环境及实现 ...
随机推荐
- navicat实现Mysql数据备份
方法/步骤 使用navicat工具连接mysql数据库,这里以navicat for Mysql工具为例.如果数据库在本机,那么连接ip处写localhost即可,如果数据库在其他机器,那需要 ...
- JDK 8 之 Stream sorted() 示例
原文链接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example 国外对Java8一系列总结的不错, 翻译过来给大家共享 ...
- [Swift]LeetCode417. 太平洋大西洋水流问题 | Pacific Atlantic Water Flow
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- [Swift]LeetCode960. 删列造序 III | Delete Columns to Make Sorted III
We are given an array A of N lowercase letter strings, all of the same length. Now, we may choose an ...
- 【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优
一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体 1.代码调优 1.避免创建重复的RDD,尽 ...
- Python内置函数(68)——__import__
英文文档: __import__(name, globals=None, locals=None, fromlist=(), level=0) This function is invoked by ...
- 前两天做项目遇到了sqlserver最大连接数 Max Pool Size 的问题
前言:出现这种问题使因为程序对connection的回收出现了问题,是因为你的代码出出现了过多new connection(),这种情况还是你的代码问题,如果不想把问题归根于程序,那你就可以改变con ...
- 程序导致IIS服务器应用程序池停止
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0sAAAC6CAIAAADwAEEAAAAQMElEQVR4nO3dz4scV2IH8Ma7EB9CQC
- Python爬虫入门教程 10-100 图虫网多线程爬取
图虫网-写在前面 经历了一顿噼里啪啦的操作之后,终于我把博客写到了第10篇,后面,慢慢的会涉及到更多的爬虫模块,有人问scrapy 啥时候开始用,这个我预计要在30篇以后了吧,后面的套路依旧慢节奏的, ...
- 详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上)
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...