数据处理指令

news2025/2/5 10:57:12

目录

一、指令

1.1 数据处理指令:数学运算、逻辑运算

1.1.1数据搬移指令

1.1.2机器码

1.1.3立即数

1.1.4数据运算指令基本格式

       1.1.5加法指令

 1.1.6减法指令、逆向减法指令、乘法指令

1.1.7位运算(逻辑运算)

1.1.8格式扩展

1.1.9数据运算指令对条件位(N、Z、C、V)的影响

 1.1.10CPSR的实际应用

1.1.11C语言和汇编


一、指令

指令:能够编译生成一条32位的机器码,且能被CPU识别和执行

1.1 数据处理指令:数学运算、逻辑运算


1.1.1数据搬移指令

        MOV R1, #1                @相当于R1 = 1
        MOV R2, R1               @R2 = R1
        MVN R0, #0xFF          @ R0 = ~0xFF

1.1.2机器码

 结论:通过红色框我们可以发现不同的指令对应的机器码前四位不同,准确来说是前三位。操作不一样的寄存器黄色框不一样,给他们赋值不同最后两位不一样。

1.1.3立即数


立即数的本质就是包含在指令当中的数,属于指令的一部分
立即数的优点:取指的时候就可以将其读取到CPU,不用单独去内存读取,速度快
立即数的缺点:不能是任意的32位的数字,有局限性

MOV R0, #0x12345678        @写这个报错
MOV R0, #0x12                    @写这个不报错
区分是不是立即数: 编译通过就是不通过就不是,一般0~255都是后面也有一些但是它们没什么规律。

立即数_百度百科        

https://www.yebaike.com/22/922228.html

如何快速判断立即数_TomLazy的博客-CSDN博客_立即数

 这段程序本来应该报错的,但是没有,我们debug一下看看编译器是怎么处理的:

编译器自动帮我们把这段程序换成了效果一样的另一段程序。 

1.1.4数据运算指令基本格式


  《操作码》《目标寄存器》《第一操作寄存器》《第二操作数》


    操作码 :                          指示执行哪种运算
    目标寄存器:                    存储运算结果
    第一操作寄存器:             第一个参与运算的数据(只能是寄存器)
    第二操作数:                    第二个参与运算的数据(可以是寄存器或立即数)

     
  1.1.5加法指令


   ADD R1, R2, R3                @相当于R1 = R2 + R3
   ADD R1, R2, #5                 @R1 = R2 + 5
    

 1.1.6减法指令、逆向减法指令、乘法指令


        SUB R1, R2, R3                @R1 = R2 - R3
        SUB R1, R2, #3                 @R1 = R2 - 3
        
        RSB R1, R2, #3                @ R1 = 3 - R2
        
        MUL R1, R2, R3               @ R1 = R2 * R3
        注意: 乘法指令只能是两个寄存器相乘,ARM指令集没有除法运算
        

1.1.7位运算(逻辑运算)


        @ 按位与指令
        AND R1, R2, R3                    @ R1 = R2 & R3
        
        @ 按位或指令
        ORR R1, R2, R3                   @ R1 = R2 | R3
        
        @ 按位异或指令
        EOR R1, R2, R3                   @R1 = R2 ^ R3
        
        @ 左移指令
        LSL R1, R2, R3                    @ R1 = (R2 << R3)
        
        @ 右移指令
        LSR R1, R2, R3                @ R1 = (R2 >> R3)
        
        @ 位清零指令
        MOV R2, #0xFF
        BIC R1, R2, #0x0F

 

 

第二操作数中的哪一位为1,就将第一操作寄存器的中哪一位清零,然后将结果写入目标寄存器

1.1.8格式扩展


MOV R2, #3
MOV R1, R2, LSL #1
@ R1 = (R2 << 1)

这种复合型的指令,只要是正确的,第一个指令是什么他就是什么指令

1.1.9数据运算指令对条件位(N、Z、C、V)的影响

看下cpsr寄存器可以参考我之前的文章

ARM寄存器组织与异常处理_宇努力学习的博客-CSDN博客


注意:默认情况下数据运算不会对条件位产生影响,在指令后加后缀”S“才可以影响,下图产生负数N位置1.


 变成3-3:

     
  Z和C都变成了1,Z是因为结果是0,C是因为产生了借位。

   

V等于1符号位溢出。

 1.1.10CPSR的实际应用

        ARM是32位机不是它只能进行32位运算,而是它一条指令是32位,我们可以借助CPSR寄存器实现64位甚至128位的运算。

        @ 带进位的加法指令
        @ 两个64位的数据做加法运算
        @ 第一个数的低32位放在R1
        @ 第一个数的高32位放在R2
        @ 第二个数的低32位放在R3
        @ 第二个数的高32位放在R4
        @ 运算结果的低32位放在R5
        @ 运算结果的高32位放在R6
        
        @ 第一个数
        @ 0x00000001 FFFFFFFF
        @ 第二个数
        @ 0x00000002 00000005
        
        @ MOV R1, #0xFFFFFFFF
        @ MOV R2, #0x00000001
        @ MOV R3, #0x00000005
        @ MOV R4, #0x00000002
        @ ADDS R5, R1, R3
        @ ADC  R6, R2, R4
        @ 本质:R6 = R2 + R4 + 'C'
        
        @ 带借位的减法指令
        
        @ 第一个数
        @ 0x00000002 00000001
        @ 第二个数
        @ 0x00000001 00000005
        
        @ MOV R1, #0x00000001
        @ MOV R2, #0x00000002
        @ MOV R3, #0x00000005
        @ MOV R4, #0x00000001
        @ SUBS R5, R1, R3
        @ SBC  R6, R2, R4
        @ 本质:R6 = R2 - R4 - '!C'

 

1.1.11C语言和汇编

一句C可能对应很多条汇编。

把数据类型改成long long在试试:

 

ADD变成了ADDS和ADC ,所以写短代码效率更高。

比如:a/2可以写成a>>1,右移可以直接执行,而除法需要组合执行。

ARM不能进行浮点型运算,所以有两种解决方案:

(1)转化成一堆其他的指令在进行运算

(2)使用协处理器进行运算。

-------------------------------------------------------------------------------------------------------------------------------

本来想用一篇文章发来着,但是太多了,目录也没改,兄弟们将就看吧。

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

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

相关文章

面试官:Spring Bean的生命周期,你知道吗?

小熊学Java网站&#xff1a;https://javaxiaobear.gitee.io/&#xff0c;每周持续更新干货&#xff0c;建议收藏&#xff01; bean 的生命周期从调用 beanFactory 的 getBean 开始&#xff0c;到这个 bean 被销毁&#xff0c;可以总结为以下七个阶段&#xff1a; 处理名称&…

Aosp系统编译定制系统签名

商业化产品,如果使用默认的签名,一是不安全,而是显得没啥技术。就连谷歌官方也说了,不建议使用testkey作为最终发布版的key,因此,定制系统签名就派上用场了。 具体使用方法谷歌给了一个大致的说法,我们可以在aosp的自述文件中找到,位置位于build\target\product\secur…

建议收藏:数字后端笔试题,含解析

能力归能力&#xff0c;面试归面试&#xff0c;你永远不会知道面试官抛出来的会是什么样的问题。 经历了无数的笔试面试之后&#xff0c;发现数字IC的笔试面试还是有很对共通之处和规律可循的。 之前芯博士为大家分享了一些数字IC面试题&#xff0c;有不少小伙伴私信我&#…

医药企业数字化转型加剧安全风险,“三个关键举措”筑牢数据安全基石

今天&#xff0c;越来越多的医药企业正在探索和寻求数字化手段&#xff0c;赋能“研、产、供、销”各流程&#xff0c;实现生产效率提升。但在数字化过程中&#xff0c;数据安全相较以往也更加严峻&#xff0c;数据泄露频发&#xff0c;形势堪忧。《2021数据泄露成本报告》中&a…

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.4 Nacos如何避免并发读写冲突问题?

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.4 Nacos如何避免并发读写冲突问题&#xff1f;54.4.1 Nacos 服务端源码54 微服…

leetcode 324场周赛

第三题 2508. 添加边使所有节点度数都为偶数 连接一条边&#xff0c;一定会让两个点的奇偶性改变。最多连接两条边&#xff0c;最多有四个点的奇偶性改变。所以超过了四个点为奇数点&#xff0c;就不可能了。 并且&#xff0c;由于一次改变两个&#xff0c;奇数点的个数一定是…

[附源码]Nodejs计算机毕业设计酒店管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Mybatis之类型转换器TypeHandler的初步了解及具体使用方法

一、TypeHandler简介 1、什么是TypeHandler&#xff1f; 简介&#xff1a;TypeHandler&#xff08;类型转换器&#xff09;在mybatis中用于实现 java类型 和 JDBC类型 的相互转换。mybatis使用 prepareStatement 来进行参数设置的时候&#xff0c;需要通过 TypeHandler 将传入的…

ABAP MESSAGE消息类的创建以及调用方法。

消息类的类型一共分为六种&#xff0c;分别如下表所示 TYPE描述使用效果是否终止事务A(Abortion)终止在PUPUP画面显示是I(Information)信息在PUPUP画面显示否E(Error)错误在状态栏显示是W(Warning)警告在状态栏显示否S(Success)成功在次画面显示否X(Exit)退出在强制终止的画面…

大数据培训Impala之优化

大数据培训Impala之优化 尽量将StateStore和Catalog单独部署到同一个节点&#xff0c;保证他们正常通行。 通过对Impala Daemon内存限制&#xff08;默认256M&#xff09;及StateStore工作线程数&#xff0c;来提高Impala的执行效率。 SQL优化&#xff0c;使用之前调用执行计…

SEO优化的策略_网站seo策略

现在SEO优化成为了每一个企业进行网络营销策划的重要命题,如何做好SEO优化更是企业经常在思考的问题,SEO优化做得好,不仅可以减少企业推广的费用,更是有效的提高了推广的效果,一个好的SEO优化策略应该如何完成呢?应该从以下5点做好网站seo策略。 SEO优化策略1.确定目的 …

MySQL 数据库 - 索引与事务

文章目录1.索引1.1 优缺点1.2 使用2.事务2.1 事务的使用2.2 四大特性2.2.1 原子性2.2.2 隔离性1.索引 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结…

[附源码]计算机毕业设计Node.jsX工厂电影网站(程序+LW)

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

企业成立不到三年,能申报高企吗?

高企认定可谓是好处多多,不仅能享受税收优惠、专项补贴、贷款融资,还能提升企业核心竞争力,但在申报国家高新技术企业认定时会审核企业前三年的净资产增长率和销售收入增长率,这对于成立不满三年的企业而言,企业成长性这一项指标的得分就不可能拿到20分满分,甚至可能是0分。那么…

技术分享 | Jenkins 节点该如何管理?

Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等 Jenkins 的任务可以分布在不同的节点上运行节点上需要配置 Java 运行时环境&#xff0c;JDK 版本大于 1.5节点…

[附源码]计算机毕业设计Python房屋租赁信息系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

热门技术中的应用:容器技术中的网络-第29讲-容器网络:来去自由的日子,不买公寓去合租

如果说虚拟机是买公寓,容器则相当于合租,有一定的隔离,但是隔离性没有那么好。云计算解决了基础资源层的弹性伸缩,却没有解决PaaS层应用随基础资源层弹性伸缩而带来的批量、快速部署问题。于是,容器应运而生。 容器就是Container,而Container的另一个意思是集装箱。其实…

持续测试的3个关键点才能成功实施

摘要&#xff1a;除非你在过去的一两年里一直处于冬眠状态&#xff0c;否则我相信你已经充分意识到持续测试的好处&#xff1a;降低开发成本、减少浪费、提高系统可靠性、降低发布风险等等. 当然&#xff0c;您认为在现实世界中将其付诸实践并不像某些供应商那样简单。很明显&a…

Twitter整合营销的方法技巧

对于独立站卖家来说&#xff0c;在Twitter它不仅能获取有价值的客户信息&#xff0c;收集粉丝反馈&#xff0c;还能影响消费者的决策。73%的数据显示&#xff0c;Twitter用户每个月都会在网上购物&#xff0c;甚至比较Facebook还要高。所以今天就和卖家们分享Twitter营销到底该…

6 | 渗透测试工具Kali Linux安装与使用

1 Kali Linux简介 渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法&#xff0c;这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析。渗透测试所需的工具可以在各种Linux操作系统中找到&#xff0c;需要手动安装这些工具。由于…