数据处理指令(二)—— 数据运算指令(加减乘)+ 逻辑运算指令(与或)+ 位清零(BIC)

news/2024/4/28 18:44:33/文章来源:https://blog.csdn.net/challenglistic/article/details/128338229

无论是数据运算还是逻辑运算,需要满足如下格式:

<操作码>  <目标寄存器>  <第一操作寄存器>  <第二操作数>

  •  操作码:              表示执行哪种操作(加减乘)
  • 目标寄存器:        用于存储运算的结果
  • 第一操作寄存器: 存储第一个参与运算的数据(只能写寄存器) 
  • 第二操作数:        第二个参与运算的数据(可以是寄存器也可以是立即数)

目录

一、数据运算指令

1、加法指令

(1) 加法指令 ADD (相加时不考虑进位)

(2) 加法指令ADDS(保留进位状态)

(3) 带进位加法指令 ADC(相加时考虑进位)

2、减法指令

(1) 减法指令 SUB

(2) 减法指令SUBS(保留借位状态)

(3) 带借位减法指令 SBC

(4) 逆向减法指令 RSB 

3、乘法指令 MUL

二、逻辑运算指令

1、按位与指令 AND

2、按位或指令 ORR 

3、按位异或指令 EOR 

4、左移指令 LSL

5、右移指令 LSR

三、拓展指令

1、位清零指令 BIC

2、运算指令与其他指令的混合使用


一、数据运算指令

1、加法指令

(1) 加法指令 ADD (相加时不考虑进位)

ADD在做加法运算时,不考虑任何进位,包含了两方面。

  • ADD 运算产生的进位,会忽略(CPSR寄存器的C状态位不会改变)
    • 如果要记录产生的进位,需改为 ADDS 指令
  • 上一次运算产生的进位,也会忽略
    • 如果要考虑上一次的进位,需改为 ADC 指令
ADD R1, R2, R3      @ R1 = R2 + R3 
ADD R1, R2, #5      @ R1 = R2 + 5ADD R1, #7, #5      @ 非法
ADD R1, #7, R2      @ 非法

注意:正常情况下使用的指令都是ADD,寄存器一次可以处理32bit,如果是处理64bit 的数才会需要用到ADDS 和 ADC。

 

(2) 加法指令ADDS(保留进位状态)

如果ADD的运算结果产生了进位,默认是不保存的,即不会更新到CPSR寄存器;如果要更新到CPSR寄存器,需要使用指令ADDS。

使用格式和ADD完全一样:

ADDS R1, R2, R3    @ R1 = R2 + R3

(3) 带进位加法指令 ADC(相加时考虑进位)

ADC在做加法运算时,会考虑上一次运算产生的进位。

ADC R1, R2, R3    @ R1 = R2 + R3 + CPSR的C状态位

2、减法指令

(1) 减法指令 SUB

SUB和上面ADD类似,在做减法运算时,不考虑任何借位

  • SUB 运算产生的借位,会忽略(CPSR寄存器的C状态位不会改变)
    • 如果要记录产生的借位,需改为 SUBS 指令
  • 上一次运算产生的借位,也会忽略
    • 如果要考虑上一次的借位,需改为 SBC 指令
SUB R1, R2, R3     @ R1 = R2 - R3
SUB R1, R2, #1     @ R1 = R2 - 1

(2) 减法指令SUBS(保留借位状态)

SUB产生的借位,默认不保存,即不会更新到CPSR寄存器;如果要更新到CPSR寄存器,需要使用指令SUBS。

SUBS R1, R2, R3    @ R1 = R2 - R3

(3) 带借位减法指令 SBC

SBC 在做减法运算时,会考虑上一次运算产生的借位

SBC R1, R2, R3    @ R1 = R2 - R3 - (!CPSR的C状态位)

(4) 逆向减法指令 RSB 

减法指令ADD只能是一个寄存器减去一个立即数,逆向减法指令可以让一个立即数减去一个寄存器。但是依然不能违背最初的格式。

RSB R1, R2, #5           @R1 = 5 - R2

 

3、乘法指令 MUL

乘法指令比较特殊,只能是两个寄存器相乘

MUL R1, R2, R3           @R1 = R2 * R3

二、逻辑运算指令

1、按位与指令 AND

AND R1, R2, R3        @ R1 = R2 & R3

2、按位或指令 ORR 

ORR R1, R2, R3        @ R1 = R2 | R3

3、按位异或指令 EOR 

EOR R1, R2, R3        @ R1 = R2 ^ R3

4、左移指令 LSL

LSL R1, R2, 1        @ R1 = R2 << 1

5、右移指令 LSR

LSR R1, R2, 1        @ R1 = R2 >> 1

三、拓展指令

上述指令都是可以在C语言中找到对应的,汇编语言也存在自己独有的指令

1、位清零指令 BIC

位清零可以将 “指定比特位” 置 0

MOV R2, #0xFF            @ R2 = 0xFF    
BIC R1, R2, #0x0F        @ 将R2后四位清零,结果放入 R1 =》 R1 = R2 & (~0x0F)

R2 中保存的是 0xFF,转化成二进制:1111 1111

0x0F 转换成二进制形式:                    0000 1111

最终结果:                                            1111 0000

0x0F后四位是1,说明要把R2后四位置 0,得到的运算结果放入 R1(0xF0)

2、运算指令与其他指令的混合使用

MOV R1, R2, LSL #1     

MOV 的格式是 MOV  <目标寄存器>  <第一操作数>

  • 目标寄存器:R1
  • 第一操作数:R2, LSL #1    
    • 这里已经可以猜出个大概了,其实就是LSL将R2寄存器左移1位,其结果作为第一操作数

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

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

相关文章

DVWA靶场安装

DVWA靶场安装1.环境准备2.安装步骤2.1.phpstudy安装2.2.DVWA安装2.2.1.下载DVWA2.2.2.解压DVWA2.2.3.放入服务器2.2.4.删除配置文件后缀2.2.5.修改配置文件2.2.6.访问DVWA2.2.7.报错修改2.2.8.修改php.ini2.2.9.重新访问DVWA2.2.10.登录DVWA3.修改过关等级1.环境准备 服务器环境…

SpringMVC:SpringMVC之JSON数据传输参数(5)

JSON数据传输参数1 JSON数据传输参数2 JSON普通数组3 JSON对象数据4 JSON对象数组5 小结1 JSON数据传输参数 现在比较流行的开发方式为异步调用。前后台以异步方式进行交换&#xff0c;传输的数据使用的是JSON,所以前端如果发送的是JSON数据&#xff0c;后端该如何接收? 对于…

【LeetCode每日一题:1785. 构成特定和需要添加的最少元素~~~数组公式推导+防止整型溢出+向上取整+贪心】

题目描述 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 &#xff0c;添加元素 不应改变 数组中 abs(nums[i]) < limi…

小程序框架与生命周期

目录 框架 响应的数据绑定 页面管理 基础组件 丰富的 API 逻辑层 App Service 小程序的生命周期 注册页面 使用 Page 构造器注册页面 在页面中使用 behaviors 使用 Component 构造器构造页面 页面的生命周期 页面路由 页面栈 路由方式 注意事项 模块化 模块化…

用 Footprint Analytics 的数据 API 快速建立你的项目

Footprint 有一个独特的、非常灵活的API&#xff0c;允许你为数据分析建立成熟的数据管道&#xff0c;以及机器学习应用。这是通过提供两种类型的接口来实现的&#xff1a;第一种是用于将数据上传到平台&#xff08;Upload API&#xff09;&#xff1b;第二种是用于从平台获取数…

BI@report钻取操作

1.创建的表为浮动表 注意设置成浮动维单元格 把东西都选在红色框框里面 2.在对需要进行钻取的表元设置 设置参数 注意 参数是传递用的&#xff0c;值取的是当前表的值&#xff0c;这样参数可以带着这个表的值往下传 使用的是SQL数据源 在最后加上这行代码 having rso1.par…

3. 实例化Bean的三种方式

实例化Bean的三种方式 一、构造方法方式 1.1 BookDaoImpl package com.lin.dao.daoimpl;import com.lin.dao.BookDao;public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("BookDao的无参构造器");}/*** 数据层实现*/public …

【大数据技术Hadoop+Spark】MapReduce之单词计数和倒排索引实战(附源码和数据集 超详细)

源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、统计单词出现次数 单词计数是最简单也是最能体现MapReduce思想的程序之一&#xff0c;可以称为MapReduce版“Hello World。其主要功能是统计一系列文本文件中每个单词出现的次数 程序解析 首先MapReduce将文件拆分成spli…

CRM客户管理系统源码带手机端+Uniapp小程序源码+调试部署视频

一套Java大型CRM客户关系管理源码带手机端和小程序源码&#xff08;带调试部署视频&#xff09; 了解CRM源码更多信息可私信我。 相关技术&#xff1a; 1. 前端&#xff1a;Vue 2. 后端&#xff1a;Spring boot 3. 数据库&#xff1a;MySQL 4.小程序端&#xff1a;UNIAPP …

【JAVA程序设计】基于JAVA Swing的飞机票订票系统-有报告

基于JAVA Swing的飞机票订票系统零、项目获取一、项目简介二、开发环境三、项目结构四、运行截图零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一、项目简介 本项目是基于JAVA Sw…

MindFusion.Diagramming for JavaScript V4.2.4

MindFusion.Diagramming for JavaScript V4.2.4 现在支持使用套索工具进行缩放的多种方式。2022 年 12 月 15 日 - 15:44新版本特征 套索缩放工具- 该控件现在支持使用套索工具进行缩放的多种方式。新的“PanAndModify”行为允许您在鼠标指针悬停在某个项目上或平移视图时进行选…

Ac-GA-K(Ac)-AMC,577969-56-3

Ac- gak (Ac)-AMC&#xff0c;在蛋白酶偶联试验中测量组蛋白去乙酰化酶I类(HDAC 1、2、3和8)和II类(HDAC 6和10)活性的荧光底物。hdac催化Lys脱乙酰生成Ac-GAK-AM。 Ac-GAK(Ac)-AMC, fluorogenic substrate for measuring histone deacetylase class I (HDAC 1, 2, 3, and 8) a…

32-Vue之ECharts-雷达图

ECharts-雷达图前言雷达图特点雷达图的基本实现雷达图的常见效果显示数值区域面积绘制类型完整代码前言 本篇来学习写雷达图 雷达图特点 可以用来分析多个维度的数据与标准数据的对比情况 雷达图的基本实现 ECharts 最基本的代码结构定义各个维度的最大值准备具体产品的数…

深入Java线程池:从设计思想到源码解读

1. 前言 线程池深入详解 2. 初识线程池 我们知道&#xff0c;线程的创建和销毁都需要映射到操作系统&#xff0c;因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要&#xff0c;线程池应运而生。 2.1. 线程池优势 降低资源消耗&#xff1a;线程池…

前端基础_传统Web页面

传统Web页面 传统Web页面就是打开浏览器&#xff0c;整个页面都会打开的应用。例如&#xff0c;笔者的个人网站http://siwei.me就是一个典型的“传统Web应用”&#xff0c;每次单击其中任意一个链接&#xff0c;都会引起页面的整个刷新 传统的页面每次打开&#xff0c;都要把…

谷歌浏览器是最容易受到攻击的

©网络研究院 不幸的是&#xff0c;那些看起来越多&#xff0c;他们发现的越多&#xff0c;这个规则总是适用的&#xff0c;除了来自体育场的无节制的欢呼声。 Windows 比 Linux 更容易受到攻击&#xff0c;因为 Chrome 比 Edge 更容易受到攻击。这也是因为它们是最受欢迎…

详解即时通讯音视频开发实时语音通讯丢包补偿技术

即时通讯应用中的实时音视频技术&#xff0c;几乎是IM开发中的最后一道高墙。原因在于&#xff1a;实时音视频技术 音视频处理技术 网络传输技术 的横向技术应用集合体&#xff0c;而公共互联网不是为了实时通信设计的。 现如今&#xff0c;随着移动互联网越来越普及&#xf…

NLP学习笔记(二) LSTM基本介绍

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲长短期记忆网络 (Long Short-Term Memory, LSTM) 文章行文思路如下&#xff1a; 首先通过循环神经网络引出为啥需要长短期记忆网络然后介绍长短期记忆网络的核心思想与运作方式最后通过简短的代码深入理解长短期记忆网络的…

电子厂测试题——难倒众多主播——大司马也才90分

一、选择题 1、1-2 ( ) A.1 B.3 C.-1 D.-3 2、|1-2|( ) A.1 B.3 C. -1 D.-3 3、1x2x3( ) A.5 B.6 C.7 D.8 4、3643( ) A.29 B.16 C.8 D.3 5、55x5( ) A.15 B.30 C.50 D.125 二、填空题(请填写阿拉伯数字) 6、110100 1000_______ 7、一个三角形砍去1个角&#…

Linux(三) makefile与gdb调试

makefile mkefile文件中定义了一系列的规则来指定&#xff0c;哪些文件需要线编译&#xff0c;哪些后编译&#xff0c;哪些需要重新编译&#xff0c;甚至进行更复杂的功能操作&#xff0c;因为makefile就像一个Shell脚本一样&#xff0c;其中也可以执行操作系统的命令。 mkef…