ARM指令集2

ARM指令集2

ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。

LDR指令(与MOV有区别,MOV只能操作通用寄存器)

LDR指令格式为:

LDR{条件}目的寄存器,<存储器地址>

LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。

LDR  R0, [R1]

将存储器地址为R1的字数据读入寄存器R0。

LDR  R0, [R1,R2]

将存储器地址为R1+R2的字数据读入寄存器R0。

LDR  R0, [R1,  #8]

将存储器地址为R1+8的字数据读入寄存器R0。

LDR  R0, [R1,R2]!

将存储器地址为R1+R2的字数据读入寄存器R0。并将新地址R1+R2写入R1。

LDR  R0, [R1, #8]!

将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。

LDR  R0, [R1],R2

将存储器地址为R1的字数据读入寄存器R0。并将新地址R1+R2写入R1。

LDR  R0, [R1,R2,LSL#2]!

将存储器地址为R1+R2*4的字数据读入寄存器R0。并将新地址R1+R2*4写入R1。

LDR  R0, [R1],R2,LSL#2

将存储器地址为R1的字数据读入寄存器R0。并将新地址R1+R2*4写入R1。

 

LDRB指令

LDRB指令格式为:

LDR{条件}B目的寄存器,<存储寄存器>

LDRB指令用于从寄存器中将一个低8位的字节数据传送到目的寄存器中,同时将寄存器的高24位清零。该指令通常用于从存储器中读取8位的字节数到通用寄存器,然后对数据进行处理。

指令示例:

LDRB  R0,[R1];将存储器地址为R1的字节数读入寄存器R0,并将R0的高24位清零。

LDRB    R0,[R1,#8];将存储器地址为R1+8的字节数据读入寄存器R0,并将R0的高24位清零。

 

LDRH指令

LDRH指令格式为:

LDR{条件}H目的寄存器,<存储寄存器>

LDRH指令用于从寄存器中将一个低16位的半字节数据传送到目的寄存器中,同时将寄存器的高16位清零。该指令通常用于从存储器中读取16位的半字节数到通用寄存器,然后对数据进行处理。

指令示例:

LDRB  R0,[R1];将存储器地址为R1的半字节数读入寄存器R0,并将R0的高16位清零。

LDRB    R0,[R1,R2];将存储器地址为R1+R2的半字节数据读入寄存器R0,并将R0的高16位清零。

 

STR指令

STR指令的格式为:

STR{条件}源寄存器,<存储器地址>

       STR指令用于从源寄存器中将一个32位的字数据传送到存储器中。

指令示例:

STR R0,[R1],#8;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。

STR R0,[R1,#8];将R0中的字数据写入以R1+8为地址的存储器中。

 

批量加载/存储指令

ARM微处理器所支持的批量数据加载/存储指令可以一次在一片连续的存储单元和多个寄存器之间传送数据,批量加载指令用于将一片连续的存储器中的数据传送到多个寄存器,批量数据存储指令则完成相反的操作。常用的加载存储指令如下:

LDM             批量数据加载指令

STM              批量数据存储指令

 

LDM指令

LDM指令格式为:

LDM{条件}{类型}指令用于从由基址寄存器{! },寄存器列表{}

       LDM(或STM)指令用于从基址寄存器所指示的一片连续的存储器到存储器所指示的多个寄存器之间传送数据,该指令的常见用途是将多个寄存器的内容入栈或出栈。其中,{类型}为以下几种情况:

                       

{! }为可选后缀,若选用该后缀,则当数据传送完毕之后,将最后的地址写入基址寄存器,否则基址寄存器的内容不变。基址寄存器不允许为R15,寄存器列表可以为R0~R15的任意组合。

寄存器列表{}为可选后缀,当指令为LDM且寄存器列表中包含R15,选用该后缀时表示:除了正常的数据传送之外,还将SPSR复制到CPSR。

指令示例:

STMFD         R13!,{R0,R4-R12,LR}

将寄存器列表中的寄存器(R0,R4到R12,LR)存入堆栈。

LDMFD    R13!,{R0,R4-R12,PC}

       将堆栈内容恢复到寄存器(R0,R4到R12,LR)。

 

数据交换指令

ARM微处理器所支持数据交换指令能在存储器和寄存器之间交换数据。数据交换指令有如下两条:

SWP    字数据交换指令

SWPB    字节数据交换指令

 

SWP指令

SWP指令格式为:

SWP{条件}目的寄存器,源寄存器1,[源寄存器2] or LDR 和 STR 两个指令也能实现SWP指令。

SWP指令用于将源寄存器2所指向的存储器中的字数据传送到目的寄存器中,同时将源寄存器1中的字数据传送到源寄存器2所指向的存储器中。显然,当元寄存器1和目的寄存器为同一个寄存器时,指令交换该寄存器和存储器的内容。

指令示例:

SWP  R0,R1,[R2];将R2所指向的存储器中的字数据传送到R0,同时将R1中的字数据传送到R2所指向的存储单元。

SWP       R0, R0, [R1];该指令完成将R1所指向的存储器中的字数据与R0中的字数据交换。

 

移位指令

ARM微处理器支持数据的移位操作,移位操作在ARM指令集中不作为单独的指令使用,它只能作为指令格式中是一个字段,在汇编语言中表示为指令中的选项。移位操作包括如下几种类型,ASL和LSL是等价的,可以自由互换:

LSL        逻辑左移

ASL              算术左移

LSR       逻辑右移

ASR              算术右移

ROR       循环右移

异常产生指令

ARM微处理器所支持的异常指令有如下两条:

SWI       软件中断指令

BKPT     断点中断指令     

SWI指令格式为:

SWI{条件}24位的立即数

       SWI指令用于产生软件中断,以便用户程序能调用操作系统的系统API。操作系统在SWI的异常处理程序中提供相应的系统服务,指令中24位的立即数指定用户程序调用的API类型。

指令示例:

SWI       0x02

该指令调用操作系统编号位02的系统例程。

 

转载于:https://www.cnblogs.com/Bright-Ho/p/5457964.html

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

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

相关文章

SylixOS中select原理及使用分析

2019独角兽企业重金招聘Python工程师标准>>> 1. select接口简介 1.1 select接口使用用例 select是操作系统多路I/O复用技术实现的方式之一。 多路I/O复用技术大致使用场景为&#xff1a;构造一张感兴趣的文件描述符列表&#xff0c;然后调用多路复用的IO接口&#x…

【pyqt5学习】——QLineEdit学习(回显模式)

目录 1、回显模式 2、成果显示 3、知识点 1&#xff09;FormLayout布局添加addRow方法 2&#xff09;在输入框显示灰色提示字体&#xff0c;输入内容时消失setPlaceholderText 3&#xff09;设置回显模式setEchoMode 4、完整代码 1、回显模式 QLineEdit控件的主要功能是输…

有关机械手臂控制中的两个重要输入参数

1.在机械手臂中有两个重要参数。一个是编码器的值&#xff0c;另外一个是马达的电流值。根据这两个可以获得机械手臂的运动学&#xff0c;动力学的一些数据。第一重要特征参数 是DH参数&#xff0c;另外一个就是每个轴的质心参数。

MySQL的权限分配

MySQL 赋予用户权限命令的简单格式可概括为&#xff1a;grant 权限 on 数据库对象 to 用户&#xff0c;如 GRANT PRIVILEGES ON datebase.* to user% IDENTIFIED by passwd;一、给表数据赋权 grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利。…

用HttpURLConnection发送http请求

//发送http请求try {//1.使用网址构造一个URL对象 URL url new URL(path);//2.获取连接对象 HttpURLConnection conn (HttpURLConnection) url.openConnection();//3.设置一些属性 //设置请求方式&#xff0c;注意大写conn.setRequestMethod("GET");//设置请求超时…

【pyqt5学习】——QLineEdit控件输入校验器Validator、掩码setInputMask限制输入、textChanged信号

目录 1、输入校验器——限制输入框输入的内容 1&#xff09;校验器类型——整数、浮点数、数字字母结合&#xff08;正则&#xff09; 2&#xff09;步骤 3&#xff09;结果 ​编辑 ​编辑 4&#xff09;完整代码 2、利用掩码进行输入的限制 0&#xff09;掩码对照表 1…

Call requires API level 3 (current min is 1)

结果出现“Call requires API level 3 (current min is 1): 解决方法&#xff1a; 在工程上点击右键 -> Android Tools -> Clear Lint Markers&#xff0c;即可。转载于:https://www.cnblogs.com/qianyukun/p/5458331.html

Product文本格式说明

使用txt进行产品信息的说明。 Product文本格式说明 //**************************************************** //产品信息 //固定标识符全部大写&#xff0c;全部在等号&#xff08;&#xff09;前面 //****************************************************** PRODUCTTest //…

PyOpenCL图像处理:Box模糊

为什么80%的码农都做不了架构师&#xff1f;>>> # -*- coding: utf-8 -*-from __future__ import absolute_import, print_function import numpy as np import pyopencl as cl import cv2 from PIL import Imagedef RoundUp(groupSize, globalSize): r globalSi…

【python bug修复】——Script file ‘D:\softwares_install\Anaconda3\envs\PartTimes\Scripts\pip-scrip

目录 1、问题描述 2、问题解决 1&#xff09;下载pip安装脚本 2&#xff09; 运行安装pip脚本 3&#xff09; 下载库 1、问题描述 利用pip命令进行库的安装时&#xff0c;突然出现这个问题&#xff0c;之前使用还好好的 Script file D:\softwares_install\Anaconda3\envs\P…

项目中的那些事---下载pdf文件

最近做了一个下载pdf文档的需求&#xff0c;本以为使用HTML5中<a>标签的属性download就能简单搞定&#xff0c;不料IE竟然不支持这一简单粗暴的H5新特性&#xff0c;而是直接在网页中打开&#xff0c; 于是各种搜索之后得出以下结论&#xff1a;IE中下载文档时&#xff0…

MySQL日志分类及性能分析你应该知道的知识

为什么80%的码农都做不了架构师&#xff1f;>>> MySQL日志记录了MySQL数据库日常操作和错误信息&#xff0c;MySQL总共有四种类型的日志&#xff0c;通过分析这些日志可以查询到MySQL的运行情况、用户操作、错误信息等&#xff0c;可以为MySQL的管理和优化提供必要…

利用三个点(trsf)来实现各种规则图形的实现

在Val3,是使用trsf(x,y,z,rx,ry,rz)来实现三维空间点的位置与方向。 其中第一点和第二点位置很重要&#xff0c;第三点是用来确定方向。根据这三个点先确定一个用户坐标系。 在这个坐标系中&#xff0c;实现圆&#xff0c;三角形&#xff0c;矩形&#xff0c;腰圆&#xff0c;正…

android基础组件----Button的使用

按钮由文本或图标&#xff08;或文本和一个图标&#xff09;组成&#xff0c;当用户触摸到它时&#xff0c;会发生一些动作。今天我们开始Button的学习。少年的爱情永远不够用&#xff0c;一杯酒足以了却一件心事。 Button的简要说明 根据你是否想要一个带有文本的按钮&#xf…

@Repository、@Service、@Controller 和 @Component

Repository 、Service 、 Controller 、Component 这四个Spring注解 ,用于把加了注解的 类 加入到Spring 容器中管理&#xff0c;节省了xml 的繁重的配置&#xff0c;尽管如此xml 同样可以实现&#xff08;一般建议先搞懂xml&#xff09;。 Repository Repository注解便属于最先…

【pyqt5学习】——QTextEdit控件学习:获取文本、添加文本

目录 1、QTextEdit控件介绍 2、QTextEdit控件添加文本、添加HTML格式 3、QTextEdit控件获取文本、获取HTML格式文本 4、案例 1&#xff09;完整代码 2&#xff09;效果 1、QTextEdit控件介绍 QTextEdit控件是一个支持多行输入的输入框&#xff0c;支持HTML进行格式的设置 2…

空间变化

空间变化 第一种&#xff1a;圆 第二种: 矩形 第三种&#xff1a;正五边形 第四种:正六边形 第五种&#xff1a;腰圆 算法&#xff1a; 在规则图形&#xff08;不包括圆心-直径法&#xff09;中&#xff0c;等于或者超过三个点。一般的&#xff0c;利用p1,p2,p3来建立一个用户…

【pyqt5学习】——QAbstractButton学习(普通按钮QPushButton、工具按钮QToolButton、单选按钮QRadioButton、复选框按钮QCheckBox)

目录 1、按钮介绍 2、普通按钮QPushButton学习 1&#xff09;特殊模式——开关按钮&#xff08;toggle&#xff09; ①将按钮设置为可选择的 ②将按钮按下 判断按钮是否被按下 isChecked() 2&#xff09;给按钮设置前置图标setIcon() ​编辑 3&#xff09;按钮信号 4)完…

java 企业 网站源码 模版 屏幕自适应 有前后台 springmvc SSM 生成静态化

前台&#xff1a; 支持四套模版&#xff0c; 可以在后台切换点击&#xff1a;获取地址QQ 313596790官网 http://www.fhadmin.org/系统介绍&#xff1a;1.网站后台采用主流的 SSM 框架 jsp JSTL&#xff0c;网站后台采用freemaker静态化模版引擎生成html2.因为是生成的html&…

挖财后端架构简介

挖财后端技术用的主要是比较大众的东西&#xff0c;Web容器用Tomcat&#xff0c;框架主要是Spring MVC&#xff0c;也有少量的Play&#xff0c;中间服务层是Dubbo&#xff0c;微容器用Spring Boot&#xff0c;服务注册这一块是用ZooKeeper&#xff0c;核心业务开发方式还是围绕…