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 中发送邮件遇到的坑_学习笔记
功能需求 因为项目需要有个忘记密码验证邮箱再重新修改密码的功能,然后我选用了很简单的一个方案,通过验证登录用户的邮箱然后发送邮件,通过这个邮件发送的链接地址来最后实现密码修改的小功能. 项目环境及实现 ...
随机推荐
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿 ...
- linux 完全关闭tomcat
由于直接调用tomcat的 shutdown.sh 有时无法完全关闭掉tomcat,使用 ps -ef | grep tomcat 查找发现tomcat依然还存在,并未完全关掉.在 catalina. ...
- [Swift]LeetCode457. 环形数组循环 | Circular Array Loop
You are given an array of positive and negative integers. If a number n at an index is positive, the ...
- 【Kafka专栏】-Kafka从初始到搭建到应用
一.前述 Kafka是一个分布式的消息队列系统(Message Queue). kafka集群有多个Broker服务器组成,每个类型的消息被定义为topic. 同一topic内部的消息按照一定的key ...
- Python内置函数(59)——sorted
英文文档: sorted(iterable[, key][, reverse]) Return a new sorted list from the items in iterable. Has tw ...
- springBoot(12)---整合Swagger2
Spingboot整合Swagger2 随着互联网技术的发展,一般开发都是前后端分离,那么前端和后端的唯一联系,变成了API接口:API文档变成了前后端开发人员联系的纽带,变得越来越重要,没有API ...
- Python爬虫入门教程 22-100 CSDN学院课程数据抓取
1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...
- Android--从系统Camera和Gallery获取图片优化
前言 之前有两篇博客讲解了如何从系统内已有的Camera和Gallery应用中获取图片的例子,看到评论里有朋友说有时候会报错,导致程序崩溃的问题.本篇博客主要就这个问题分析讲解一下,最后将以一个简单的 ...
- Koa 框架常用知识点整理
简介 Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行,所有功能都通过插件实现. 学前准备 检查Nodejs版本 打开cmd命令行窗口nod ...
- 聚类——FCM
聚类——认识FCM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.FCM概述 FCM算法是基于对目标函数的优化基础上的一种数据聚类方法.聚类结 ...