嵌入式:数据处理指令详解

news2025/2/5 9:43:52

文章目录

      • 数据处理指令的特点
      • 数据处理指令的汇编格式
      • 数据处理指令-指令表
      • (1)ADD、ADC、SUB、SBC、RSB和RSC
      • (2)AND、ORR、EOR和BIC
      • (3)MOV和MVN
      • (4)CMP和CMN
      • (5)TST和TEQ
      • (6)乘法指令
        • 乘法指令的二进制编码
        • 汇编格式
        • 注意事项

ARM的数据处理指令主要完成寄存器中数据的算术和逻辑运算操作:

  • 数据处理指令分类
  • 数据处理指令二进制编码
  • 数据处理指令表

数据处理指令根据指令实现处理功能可分为以下六类:

  • 数据传送指令;
  • 算术运算指令;
  • 逻辑运算指令;
  • 比较指令;
  • 测试指令;
  • 乘法指令。

数据处理指令的特点

所有操作数都是32位宽,或来自寄存器或来自指令中的立即数(符号或0扩展)

如果数据操作有结果,则结果为32位宽,放在一个寄存器中(有一个例外是长乘指令的结果是64位的);

ARM数据处理指令中使用“3地址模式”,即1个目的操作寄存器、1个源操作数寄存器和1个灵活的第2操作数,这个第2操作数可以使寄存器、移位后的寄存器或者立即数。如果第2操作数为寄存器Rm,它也可以进行移位(包括:逻辑移位、算术移位、循环移位),移位位数可以来自一5位立即数或也可以使一寄存器的内容。当然,这3个操作数也可以只用1个或者2个,甚至1个都不用(如测试指令TST,TEQ等)。

数据处理指令的汇编格式

根据第2操作数的类型,其汇编格式分为以下2种:

<op>  {<cond>}  {S}  Rd,Rn, #<32位立即数>
<op>  {<cond>}  {S}  Rd,Rn, Rm,{<shift>}

注意:R15(PC)作为一个特殊的寄存器PC,同时也可以作为一般寄存器使用。但是当R15作源操作数时,不能指定移位位数。另外,在3级流水线中真实PC是当前指令地址加8。当R15作为目的操作数时,该指令的功能相当于执行某种形式的转移指令。也常用来实现子程序返回。另外,当R15作目的寄存器且使用了后缀S,则在恢复PC的同时,自动将当前模式的SPSR拷贝到CPSR,完成对CPSR的恢复,这是实现异常返回的标准方式。由于用户和系统模式下,没有自己的SPSR,因此,在这两种模式下这种操作无效,但汇编时并不警告。

数据处理指令的二进制编码如下:

数据处理指令-指令表

数据处理指令的详细列表如下:

(1)ADD、ADC、SUB、SBC、RSB和RSC

  • 用法:
    ADD和SUB是简单的加减运算
    ADC和SBC是带进位的加减运算
    RSB是反减,即用第2个操作数减第1个操作数,由于第2个操作数可选范围宽,所以这条指令常用。
    RSC是带进位的反减。若C为0,则结果减1。

  • 注意事项:
    若设置S位,则这些指令根据结果更新标志N、Z、C和V。
    ADC、SBC和RSC可用于多字算术运算。如下面两条语句完成64位加法:

          ADDS  R4,R0,R2
          ADDC  R5,R1,R3 
    

(2)AND、ORR、EOR和BIC

  • 用法:
    AND完成按位“与”操作,常用于提取寄存器中的某些位。如:AND R9,R2,#0XFF00
    ORR完成按位“或”操作,常用于将寄存器中的某些位设置为1。如:ORREQ R2,R0,R5
    EOR完成按位“异或”操作,常用于将寄存器中的某些位的值取反。如:EOR R0,R0,R3,ROR R6
    BIC用于将源操作数的各位与第2操作数中相应位的反码进行“与”操作,常用于将寄存器中的某些位设置为0。如:BICNES R8,R10,R0,RRX
  • 注意事项:
    若设置S位,则这些指令根据结果更新标志N、Z,在计算第2操作数时更新标志C,不影响V标志。

(3)MOV和MVN

  • 用法:
    MOV是将第2操作数的值拷贝到结果寄存器中。如:

    MOV R9,R2
    MOVS R0,R0,ROR R6 
    

    MVN “取反传送” ,它是把第2操作数的每一位取反,将得到的值送入结果寄存器。如: MVNNE R0,#0XFF00

  • 注意事项:
    若设置S位,则这些指令根据结果更新标志N、Z,在计算第2操作数时更新标志C,不影响V标志。

(4)CMP和CMN

  • 用法:
    CMP表示比较,用目的操作数减去源操作数,根据结果更新条件码标志。除了将结果丢弃外,CMP指令和SUBS指令完成的操作一样。如:

                CMPGT  R13,R7,LSL #2 
    

    CMN 表示取反比较 ,将目的操作数和源操作数相加,根据结果更新条件码标志。除了结果丢弃外,CMN指令与ADDS指令完成的操作一样。如:

                CMN  R0,#6400
    
  • 注意事项:
    这些指令根据结果更新标志N、Z、C和V,但结果不放到任何寄存器中。

(5)TST和TEQ

  • 用法:
    TST表示位测试,对第2个操作数进行位“与”操作,根据结果更新条件码标志。除了将结果丢弃外,TST指令和ANDS指令完成的操作一样。TST通常用于测试寄存器中某些位是1还是0。如:

    TST  R0, #0x3F8 
    

    TEQ 表示测试相等 ,对第2个操作数进行按位“异或”操作,根据结果更新条件码标志。除了结果丢弃外,TEQ指令与EORS指令完成的操作一样。TEQ通常用于比较2个操作数是否相等,这种比较一般不影响CPSR的V和C。它也可用于比较2个操作数符号是否相同。如:

    TEQEQ  R10,R9 
    
  • 注意事项:
    这些指令根据结果更新标志N、Z、C和V,但结果不放到任何寄存器中。

(6)乘法指令

乘法指令完成2个寄存器中数据的乘法。按结果位宽一般分为2类:一类是2个32位二进制数相乘的结果是64位;另一类是2个32位二进制数相乘,仅保留最低有效32位。并且这2类指令都有乘加变形,即将乘积连续相加成为总和,而且有符号和无符号操作数都能使用。这两类指令共有6条,如下图所示:

乘法指令

操作码[23:21]助记符意义效果
000MUL乘(2位结果)Rd←(Rm*Rs)[31:0]
001MLA乘累加(32位结果)Rd←(Rm*Rs+Rn)[31:0]
100UMULL无符号数长乘RdHi:RdLo ←Rm*Rs
101UMLAL无符号长乘累加RdHi:RdLo +=Rm*Rs
110SMULL有符号数长乘RdHi:RdLo ←Rm*Rs
111SMLAL有符号长乘累加RdHi:RdLo +=Rm*Rs

注: 对于有符号和无符号操作数,结果的最低有效32位是一样的,所以对于只保留32位结果的乘法指令,无须区分有符号和无符号数2种格式。

乘法指令的二进制编码

说明:

对于32位乘积结果指令,Rd为结果寄存器,Rm、Rs、Rn为操作数寄存器。

对于64位乘积结果指令,RdLo、RdHi为结果寄存器,“RdHi:RdLo”是由RdHi(最高有效32位)和RdLo(最低有效32位)连接形成64位乘积结果,Rm、Rs为操作数寄存器。

R15不能用作Rd、Rm、Rs或Rn,且Rd不能与Rm相同。

当在指令中设置了S后根据结果影响标志位N和Z。对于32位结果的指令,N为Rd的第31位值;对于产生64位结果的指令,N设置为RdHi的第31位值;如果Rd或RdHi和RdLo为0,则Z标志置位。

ARM V4及以前版本标志C、V不可靠,ARM V5后,不影响C和V。

汇编格式

产生32位乘积的指令:

    MUL {<cond>}{S}  Rd,Rm,Rs 
    MLA {<cond>}{S}  Rd,Rm,Rs,Rn 

产生64位乘积的指令:

    UMULL {<cond>}{S}  RdHi,RdLo,Rm,Rs 
    UMLAL {<cond>}{S}  RdHi,RdLo,Rm,Rs
    SMULL {<cond>}{S}  RdHi,RdLo,Rm,Rs
    SMLAL {<cond>}{S}  RdHi,RdLo,Rm,Rs

例子:

      MOV  R11,#20  ;初始化循环计数器 
      MOV  R10,#0  ;初始化总和
LOOP: LDR  R0,[R8],#4 ;读取第1分量
      LDR  R1,[R9],#4   ;读取第2分量
      MLA  R10,R0,R1,R10 ;乘积累加
      SUBS  R11,R11,#1 ;循环减计数
      BNE  LOOP

注意事项

乘以一个常数,可以先把常数放到寄存器中,然后再用上述指令实现。但是,有时利用移位和乘加指令组合构成一个程序段更有效,如:将R0乘以35可以如下实现

      ADD R0,R0,R0,LSL #2  ;R0’ ←R0*5 
      RSB R0,R0,R0,LSL #3  ;R0’’←R0’*7 

注意事项:

不支持第2操作数为立即数;

结果寄存器不能同时作为第一源寄存器,即Rd、RdHi和RdLo不能与Rm为同一寄存器,RdHi和RdLo不能为同一寄存器。

应避免R15定义为任一操作数或结果操作数。

早期的ARM处理器仅支持32位乘法指令(MUL和MLA)。ARM7版本(ARM7DM、ARM7TM等)和后续的在名字中有M的处理器才支持64位乘法器。

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

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

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

相关文章

如何下载及安装BIGEMAP GIS Office

如何下载及安装BIGEMAP GIS Office 发布时间&#xff1a;2018-01-17 版权&#xff1a; 本产品支持主流winodws操作系统&#xff08;xp sp3,vista,windows 7,windows 8及windows 10 11&#xff09;&#xff0c; 可通过访问Bigemap官网(BIGEMAP-卫星地图_高清卫星地图制图软件_…

791068-69-4,肾素的FRET底物

FRET substrate for renin. excitation at 340 nm, emission at 490 nm.肾素的FRET底物。激发波长为340 nm&#xff0c;发射波长为490 nm。 编号: 182722中文名称: Renin Substrate 1英文名: Renin Substrate 1CAS号: 791068-69-4单字母: H2N-R-E(Edans)-IHPFHLVIHT-K(Dabcyl)-…

PDF如何加密码保护?分享PDF加密的简单方法

PDF 通常是只读的&#xff0c;但如果收件人有特定的编辑软件&#xff0c;它们仍然可以修改&#xff0c;因此当您发送或共享 PDF 文档时&#xff0c;您可能希望使用密码对其进行保护。这样&#xff0c;未经您的许可&#xff0c;任何人都无法读取文件。 如何使用密码保护 pdf 文档…

什么是SD-WAN,它如何改变传统网络?

近年来&#xff0c;网络的构建、管理和运行方式发生了重大变化。许多 IT 管理员现在正在用更高级的网络概念和策略取代传统的网络组件和传统技术。例如&#xff0c;他们越来越依赖网络容器化、自动化、软件定义网络 &#xff08;SDN&#xff09; 和云计算等概念来简化网络。 这…

网络安全和信息化条例

神经网络架构搜索 定义内涵 神经网络架构搜索是为给定数据集自动找到一个或多个架构的任务&#xff0c;这些架构将为给定 的数据集生成具有良好结果的模型&#xff0c;其本质是在高维空间的最优参数搜索问题。 技术背景 深度学习模型的使用越来越大众化&#xff0c;在很多行…

数据处理指令

目录 一、指令 1.1 数据处理指令:数学运算、逻辑运算 1.1.1数据搬移指令 1.1.2机器码 1.1.3立即数 1.1.4数据运算指令基本格式 1.1.5加法指令 1.1.6减法指令、逆向减法指令、乘法指令 1.1.7位运算&#xff08;逻辑运算&#xff09; 1.1.8格式扩展 1.1.9数据运算指令对条…

面试官: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分。那么…