ARM处理器的指令集(3)

news2024/12/22 19:19:01

ARM处理器的指令集

一、数据处理类指令

数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作,所以ARM数据处理指令均可以选择使用S后缀,以影响状态标志位。
影响状态标志位的命令:
MOVS–>数据传送指令(只能用在寄存器和寄存器之间)
MVNS–>数据传送指令(和mov区别是,不仅进行数据传输,还进行数据取反)
ADDS–>加法指令
SUBS–>减法指令
MULS–>乘法指令
ANDS–>逻辑与指令(相同是1,不同是0,区别“按位与TST"指令)
ORRS–>逻辑或指令(不同是0,相同是1,区别“按位与TST"指令)
BICS–>设置某一位为1
CMP–>比较指令
TST–>安位与指令

1.数据传送指令

用于操作数传送到目的寄存器中。
MOV R1,R0 ;将寄存器R0的值传送到寄存器R1中。
MVN R0,#0 ;将立即数0按位取反传送到寄存器R0中。
可以在MOV和MVN后面加S,S会改变CPSR的值,不加就不会改变。

2.比较指令

用于对2个操作数进行比较,同时更新CPSR中的条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。
CMP R1,R0 ;将R1的值与R0的值相减,并更新结果CPSR的标志位,不用加S
CMN R1,#100 ;取反后相减进行比较,即将R1的值与立即数100相加,并设置标志位

3.测试指令

用于对2个操作数进行按位的与运算,并根据运算结果更新CPSR中的标志位。
TST R1,#%1 ;将R1的值与二进制1按位与运算,并改变标志位。
TEQ R1,R2 ;将R1的值与R2的值按位异或,并设置标志位,通常用来比较两个操作数的是否相等。可以看Z位,如果为Z位是1,那就相等,不是1,就不相等。

4.加法指令

用于将2个操作相加,并将结果存放到目的寄存器中,需要三个参数。
ADD R0,R1,R2 ;R1+R2=R0,操作数1+操作数2
ADC R0,R1,R2 ;R1+R2+进位数=R0
例:

MOV R0,#0Xffffffff         ;0xffffffff→R0                   R0=0xffffffff
ADDS R0,R0,#0xffffffff      ;R0=R0+0xffffffff                R0=0xfffffffe,不考虑进位
ADCS R0,R0,#0xffffffff      ;R0=R0+0xffffffff+进位数          R0=0xfffffff,进位标识符位C=1,R0最后还要加1

5.减法指令

用于操作数1减操作数2,并将结果存放到目的寄存器中。注意在访问CPSR时设置后缀S。
SUB R0,R1,R2 ;R0=R1-R2
SBC R0,R1,R2 ;R0=R1-R2-!C 操作数1减操作数2,再减去标志位C位的反码。
RSB R0,R1,R2 ;R0=R2-R1
RSC R0,R1,R2 ;R0=R2-R1-!C

6.逻辑运算指令

对两个操作数进行逻辑与运算,并把结果放在目的寄存器中。
AND R0,R0,#3 ;保证R0的0,1位不变,其他位为0。考虑到“与”的运算法则全1为1,其余为0。
ORR R0,R0,#3;运用“或”的准则,改变R0的0,1位,其余为不变。
EOR R0,R0,#3;异或指令,运用异或的运算法则,反转R0的0,1位,其余不变。通常用于取反某一位的值,并保证其他为不变。
BIC R0,R0,#0xB;位清除指令,清除R0中的0,1,3位,其余为保持不变。原理是0xB先按位取反,然后与R0相与。主要用于清除某一位的值。

二、跳转指令

跳转指令主要用于实现程序流程的跳转,比如函数调用,发生中端等情况都需要跳转指令。
BEQ Label ;带条件的跳转,当Z置位,即结果为0时,跳转到Label。
BX R0 ;带状态切换的跳转指令,切换到以R0为地址的Thumb指令。
BL Label;无条件跳转到标号为 Label处执行,同时将PC的值保存到R14中。
BLX Label ;带返回且带状态切换的转移指令。

三、乘法指令

完成操作数1和操作数2的乘法运算,并把结果放置到目的寄存器。如果要改变CPSR的值,就需要加后缀S。
MUL R0,R1,R2 ;R0=R1XR2
MLA R0,R1,R2,R3 ;R0=R1XR2+R3
SMULL/UMULL R0,R1,R2,R3 ;R0=(R2XR3)的低32位,R1=(R2XR3)的高32位

四、LoadStore指令

ARM微处理器中的加载/存储指令,用于在寄存器和存储器之间传送数据。说直接就是把存取器的数据取出来放在寄存器中或把寄存器的数据保存到存储器中。

1.单数据加载/存储指令

在单个存储器中传送数据。
LDR R0,[R1] ;将存储器地址为R1的字数据读入到寄存器R0。
LDR R0,[R1+R2] ;将存储器地址为R1+R2的字数据读入到寄存器R0。
STR R0,[R1],#8;将R0的数据写到R1为地址的存储器,并让R1=R1+8

2.批量数据加载/存储指令

在多个存储器单元之间传送数据。
语法格式:LDM{条件}{类型}基址寄存器{!},寄存器列表{^}
{类型}为可选后缀,通常有以下几种情况:
(1)数据块操作:

  • IA:每次传送后的地址加4
  • DA:每次传送后的地址减4
  • IB:每次传送前的地址加4
  • DB:每次传送前的地址减4

(2)堆栈操作:

  • FD:满递减堆栈
  • FA:满递增堆栈
  • ED:空递减堆栈
  • EA:空递增堆栈

{!}:对操作后地址进行更新。

STM和LDM操作对多个寄存器与存储器之间的数据操作。
在这里插入图片描述

例如:
(1)数据块操作:

请添加图片描述
总结:对数据块操作时,存取与类型匹配共有8种结果,对应处理就可以了

(2)堆栈操作:

请添加图片描述
总结:对堆栈操作,STM存数据时与数据块相对应。LDM取数据时,与STM相反。

如果我们想要先将数据存进去,然后又按照原来的顺序取出来,我们可以通过这种操作两两匹配。
例如:
先采用对数据块操作模式:
存:STMIA R0,{R1,R2}
取:LDMIA R0,{R1,R2}
理论来说,是可以达到目的的,但地址不更新,可能会造成后续的数据把前面的数据覆盖了。所以我们一般需要进行地址更新。
存:STMIA R0!,{R1,R2}
取:LDMDB R0!,{R1,R2}
这种模式取反就可以实现存取数据的操作了。
对堆栈操作:
存:STMFD R13!,{R1,R2}
取:LDMFD R13!,{R1,R2}
因为LDM对应的与STM相反,所以在取反,就相同了,因此对堆栈的操作的存取模式是一样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/484255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java servlet 农机租赁网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java servlet 农机租赁网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 ,系统具有完整的源代码和数 据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,M…

[架构之路-179]-《软考-系统分析师》-19- 系统可靠性分析与设计 -1- 故障模型、可靠性模型、可靠性分析

目录 前言: 1 9 . 1 系统可靠性概述 19.1.1 系统故障模型 1. 在信息系统中,故障或错误有如下儿种表现形式: 2. 故障的缘由 3. 故障模型 (1)逻辑电路级的故障 (2) 数据结构级的故障 &a…

【大数据Hadoop】HDFS3.3.1-Datanode-DataStorage的实现原理

DataStorage的实现原理 前言Storage类继承关系StorageInfoStorage.StorageStateStorage.StorageDirectory文件夹操作加锁/解锁操作存储状态恢复操作 StorageDataStorage 前言 Datanode 最重要的功能就是管理磁盘上存储的 HDFS 数据块。Datanode 将这个管理功能切分为两个部分&…

确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:讲解c语言中的文件操作,文件的读取,输入输出,流的概念…

【分布式搜索引擎03】

分布式搜索引擎03 11.9.数据聚合11.9.1.聚合的种类11.9.2.DSL实现聚合11.9.2.1.Bucket聚合语法11.9.2.2.聚合结果排序11.9.2.3.限定聚合范围11.9.2.4.Metric聚合语法11.9.2.5.小结 11.9.3.RestAPI实现聚合11.9.3.1.API语法11.9.3.2.业务需求11.9.3.3.业务实现 11.10.自动补全&a…

AMBA协议-AXI协议详解(读写时序、Outstanding、乱序传输、原子操作)

目录 1. AXI 写通道信号 1.1. 写地址通道信号 1.2. 写数据通道信号 1.3. 写response通道信号 1.5. 握手规则 1.4. AXI 写通道之间关系 2. AXI 读通道信号 2.1. 读地址通道信号 2.2. 读数据通道信号 2.3. AXI 读通道之间关系 3. AXI传输 3.1. AXI突发读传输 3.2. …

EventBus(事件总线)的使用和源码的简单解析

Google Guava EventBus(事件总线)的使用和源码的简单解析 什么是EventBus? 事件总线(EventBus)是一种广泛用于软件架构中的设计模式,用于实现解耦和松散耦合的通信机制。它可以帮助组织和管理应用程序中不同组件之间的通信&…

【SQL篇】面试之高级查询和连接

603 连续空余座位 select distinct c1.seat_id from Cinema c1 join Cinema c2 on abs(c2.seat_id-c1.seat_id) 1 where c1.free1 and c2.free1 order by c1.seat_id;总结 思路:为什么我们这里需要abs和distinct,如果是如下代码,为什么不可…

[架构之路-178]-《软考-系统分析师》-17-嵌入式系统分析与设计- 3- 分区操作系统(Partition Operating System)概述

目录: 本文概述: 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述: 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高,采用空间隔离、时…

[计算机图形学]光场,颜色与感知(前瞻预习/复习回顾)

一、Light Field / Lumigraph—光场 1.我们看到的是什么 我们的眼睛能够把3D世界转换为2D的成像信号被我们感知,如上面第一幅图,这就是我们看到整个世界的过程,那么如果我们把之前记录的光的信息都完美的放在一个幕布上,那么我们…

第15章 信息(文档)和配置管理

文章目录 软件文档的分类(1)开发文档:描述开发过程 本身(2)产品文档:描述开发过程的 产物(3)管理文档:记录项目管理的信息 文档的质量可以分为四级(1&#xf…

第二十五章 刚体Rigidbody

在物理学中,静止和匀速直线运动是物体的平衡状态,如果给该物体施加某一个力的话,物体的平衡状态就会改变,当然这个真理的前提是理想状态。我们知道在现实世界中,由于重力和摩擦力的存在,任何一个物体都不可…

【SQL篇】窗口函数和公共表达式

1077 项目员工 III # Write your MySQL query statement below select project_id, employee_id from (select project_id, e.employee_id, rank() over(partition by project_id order by experience_years desc) as rkfrom Employee ejoin Project pon e.employee_id p.empl…

【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法

一、问题背景 因为fluent中支持的初始化无非三种类型。 1、Standard initialization 标准初始化 2、Hybridinitialization 混合初始化 3、FMG initialization FMG初始化 另外,还可以用UDF通过坐标判断的方式予以初始化。 但是这些初始化方法都没办法利用以前计算过…

通关MyBatis(上)

作者:~小明学编程 文章专栏:spring框架 格言:热爱编程的,终将被编程所厚爱。 目录 什么是MyBatis 如何使用Mybatis 添加依赖 创建数据库 配置数据库连接字符串 MyBatis的操作流程 数据持久层 配置mybatis的xml文件 mapp…

Windows自动虚拟机WSL和VMware虚拟机兼容问题(此平台不支持虚拟化的 Intel VT-x/EPT)

问题背景与原因分析 在安装了WSL2之后,忽然发现VMware Workstation无法正常启动了。就是在开启虚拟机时遇到了这种情况: “ 此平台不支持虚拟化的 Intel VT-x/EPT” 问题描述:出现以上问题,发现WSL2和 VMware Workstation 是不兼…

idea使用git遇到的小问题

idea使用git遇到的小问题 前置说明颜色含义中文插件修改提交的用户名 前置说明 idea版本为2022专业版 github需要自己会科学上网 颜色含义 在idea中使用github后,会发现项目中会有各种各样的颜色,如图所示文件全为绿色 这颜色含义分别为:…

函数-函数递归及练习

目录 1、什么是递归? 2、递归的两个必要条件 3、递归的练习 3.1 接受一个整型值(无符号),按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量,求字符串的长度 3.3 求第n个斐波那契数 3.4 字符串逆序&…

UG NX二次开发(C++)-建模-修改NXObject或者Feature的颜色(二)

文章目录 1、前言2、在UG NX中修改Body的颜色操作3、采用NXOpen(C)实现3.1 创建修改对象颜色的方法3.2 在do_it()中添加调用的代码3.3 测试效果 1、前言 在UG NX中,改变NXObject和Feature的操作是不相同的,所以其二次开发的代码也不一样,我们…

企业级信息系统开发讲课笔记4.1 Spring Boot入门程序

文章目录 零、学习目标一、Spring Boot框架概述(一)由Spring到Spring Boot(二)Spring Boot框架的核心功能(三)Spring Boot框架的应用 二、使用Maven方式构建Spring Boot项目(一)创建…