嵌入式系统复习--ARM指令集(一)

文章目录

  • 上一篇
  • ARM指令集概述
  • ARM寻址方式
  • 下一篇

上一篇

嵌入式系统复习–ARM技术概述

ARM指令集概述

ARM指令集是32位的,程序的启动都是从ARM指令集开始。
指令编码 = 第一操作数 + 第二操作数 + 目的操作数 + 条件影响标志位 + 不同功能实现的二进制位 指令编码 = 第一操作数 + 第二操作数 + 目的操作数 + 条件影响标志位 + 不同功能实现的二进制位 指令编码=第一操作数+第二操作数+目的操作数+条件影响标志位+不同功能实现的二进制位
在这里插入图片描述

  • 根据CPSR中的条件位自动判断是否执行指令
  • 最高的四位[31 : 28]是用来表示条件码(cond)的
    在这里插入图片描述
  • N为符号位,1负0正
  • Z为结果为0位,1表示为0, 0表示不是
  • C是进位位,加法进位位1,减法进位为0
  • V是有符号溢出,溢出为1

重要的基本条件
在这里插入图片描述
ARM指令使用的基本格式:
在这里插入图片描述

  • opcode操作码(指令助记符)如LDR、STR等
  • cond可选条件码(上面的基本条件);也称为执行条件
  • S表示是否修改标志位(加上会修改标志位CPSR)
  • Rd目标寄存器
  • Rn存放第一操作数的寄存器
  • operand2 第2操作数

举例:

LDR R0, [R1] //读取R1地址上的存储器单元内容,加上[]表示存储器BEQ DATAEVEN //条件执行分支指令,执行条件为EQ,表示相等的时候跳转到DATAENEN(标号)ADDS R2, R1, #1 //加法指令,R2 <- R1 + 1,加上了S影响CPSR寄存器SUBNES R2, R1, #0x20 //减法指令,当不相等NE的时候R2 <- R1 - 0x20结果影响CPSR寄存器

ARM寻址方式

  1. 立即寻址
    操作数在指令里,可以立即获得操作数(也称立即数),以及数以#为前缀,加上“0x”的是十六进制数

    ADD R0, R0, #1 //R0 <- R0 + 1
    

    参与运算的是32位立即数,由于位数不够全部放入,因此这个#给出的是压缩后的立即数
    而这个存放方式是,采用8位的常数循环右移偶数位而间接得到,其中循环右移的位数由4位二进制的两倍表示,立即数记作,而8位常数记作immed_8, 4位的循环右移值记作rotate_imm
    < i m m e d i a t e > = i m m e d _ 8 循环右移( 2 ∗ r o t a t e _ i m m ) <immediate> = immed\_8循环右移(2*rotate\_imm) <immediate>=immed_8循环右移(2rotate_imm
    一个立即数中非0以外的宽度在8以内就能通过移位表示出成32位

  2. 寄存器寻址
    对应的数值在寄存器中

    ADD R0, R1, R2 //R0 <- R1 + R2
    

    同时也有特殊之处,如果第二操作数是寄存器,则可以选择是否对第二操作数进行移位如果选择可以从(逻辑左移LSL(无符号数), 逻辑右移LSR, 算术左移ASL(有符号数), 算术右移ASR, 右循环移位ROR, 右循环拓扑(其中标志位C也参与移位用)RRX)分别表示中选择移位方式,移位位数可以选择第4个寄存器,也可以是5位的立即数
    移位方法:
    逻辑移位左右移都是补0
    算术移位分为

    左移右移
    右侧补0左侧补0
    右侧补0左侧补1
    ADD R3, R2, R1, LSR #2 // R3 <- R2 + (R1 / 4)
    
  3. 寄存器间接寻址
    以寄存器的值作为操作数的地址,而操作数本身存放在存储器中。

    LDR R0, [R1] // R0 <- [R1]
    STR R0, [R1] // [R1] <- R0
    

    指向的是4个字节的地址,寻找对应操作数要根据对应大端小端存储来进行前后找

  4. 基址加偏址寻址
    将寄存器(基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
    根据是先取指令还是先变址分为:

    • 前变址模式
    LDR RO, [R1, #4] // R0 <- [R1 + 4]
    
    • 自动变址模式
    LDR R0, [R1, #4]! // R0 <- [R1 + 4]、 R1 <- R1 + 4
    
    • 后变址模式
    LDR R0, [R1], #4 // R0 <- [R1]、R1 <- R1 + 4
    

    同时地址偏移量可以是立即数也可以寄存器,并且在加到基址寄存器前也可以进行移位操作。

    LDR r0, [r1, r2] // r0 <- [r1 + r2]
    LDR r0, [r1, r2, LSL #2] // r0 <- [r1 + r2*4]
    

    常用立即数的,寄存器形不常用

传输的数据类型,默认是选择字操作,但是可以通过增加后缀来进行字节(B)、半字(H)来进行操作

  1. 堆栈寻址

    • 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈,而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈。
    • 当访问寄存器时,存储器的地址向高地址方向生长,称为递增堆栈。存储器地址向低地址方向生长,称为递减堆栈。决定堆栈指针是加1还是减1

    将上述两种类型组合可以组合成4种;

  2. 块拷贝寻址
    是多寄存器传送指令LDM/STM的寻址方式,他可以将存储器中的数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中,这多个寄存器可以是R0~R15这16个寄存器的子集或者所有寄存器,与堆栈的分类方式类似。
    在这里插入图片描述两种寻址方式的后缀;I:increase 、D:decrease、A:after、B:before、F:full、E:empty
    例:

    ARM指令:
    STMFD SP! {R1 - R7, LR} : 入栈
    LDMFD SP! {R1 - R7, LR}: 出栈Thumb指令:
    PUSH {R1 - R7, LR} : 入栈
    POP {R1 - R7, LR} :出栈
    
  3. 相对寻址方式
    它是以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。BL即为指令符号

    BL NEXT // 跳转到子程序,子程序调用
    ......  //到NEXT处执行,返回之后再从BL下一条指令开始执行
    NEXT
    ......
    MOV PC, LR //从子程序返回
    

下一篇

未完待续

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

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

相关文章

华清远见嵌入式学习——ARM——作业2

目录 作业要求&#xff1a; 现象&#xff1a; 代码&#xff1a; 思维导图&#xff1a; 模拟面试题&#xff1a; 作业要求&#xff1a; GPIO实验——3颗LED灯的流水灯实现 现象&#xff1a; 代码&#xff1a; .text .global _start _start: /************对led1的设置****…

Java8新特性 Stream

首先创建一个用户的实体类&#xff0c;包括姓名、年龄、性别、地址、赏金 几个属性 Data public class User {//姓名private String name;//年龄private Integer age;//性别private Integer sex;//地址private String address;//赏金private BigDecimal money;public User(St…

【解决Typora图片不是显示问题】PicGo+Github+Typora+ onedrive/坚果云 实现笔记同步

【解决Typora图片不是显示问题】PicGo、Github、Typora实现笔记同步 写在前面&#xff1a; typora笔记软件使用记录typora图片上传问题&#xff1a;原因分析&#xff1a;解决方案&#xff1a;PicGoGithubTypora 坚果云/onedrive 实现笔记同步第一步. 设置上传模式&#xff1a;u…

华为安防监控摄像头

华为政企42 华为政企 目录 上一篇华为政企城市一张网研究报告下一篇华为全屋wifi6蜂鸟套装标准

Hypervisor Display架构

Hypervisor Display架构部分 1&#xff0c;所有LA侧的APP与显示相关的调用最终都会交由SurfaceFlinger处理 2&#xff0c;SurfaceFlinger会最终调用android.hardware.graphics.composer2.4-service服务 3&#xff0c;android.hardware.graphics.composer2.4-service服务会调用G…

一、神经元与激活函数

神经网络是一种大规模的并行分布式处理器&#xff0c;天然具有存储并使用经验知识的能力。它从两个方面上模拟大脑:(1)网络获取的知识是通过学习来获取的;(2)内部神经元的连接强度&#xff0c;即突触权重&#xff0c;用于储存获取的知识。—— Haykin [1994] 生物学家在20世纪初…

XILINX-Zynq UltraScale+MPSoc 开发笔记

1. 资料信息 2. IDE集成开发环境 3. petalinux开发 3.1 环境搭建 1. 创建一个ubuntu18.04&#xff08;或者其他版本&#xff09;&#xff0c;根据UG1144文档安装ubuntu下对petalinux的依懒工具。 2. 下载petalinux对应版本&#xff0c;链接&#xff1a;Downloads (xilinx.co…

Python---端口和端口号的介绍

1. 问题思考 不同电脑上的飞秋之间进行数据通信&#xff0c;它是如何保证把数据给飞秋而不是给其它软件呢? 其实&#xff0c;每运行一个网络程序都会有一个端口&#xff0c;想要给对应的程序发送数据&#xff0c;找到对应的端口即可。 端口效果图: 2. 什么是端口 端口是传…

电巢助力第十届图像技术高峰论坛圆满落幕,回顾西电与电巢的校企合作四年硕果累累

图像技术高峰论坛圆满落幕 12月17日&#xff0c;由中国图象图形学学会、陕西省科学技术协会主办、西安电子科技大学通信工程学院、陕西省创新驱动共同体承办的“第十届图像技术高峰论坛暨陕西第五届图像处理与分析研讨会”在陕西西安成功举办。电巢科技作为本次论坛的承办单位&…

某电子文档安全管理系统 SQL注入漏洞复现

漏洞介绍 亿赛通电子文档安全管理系统 (简称: CDG)是一款电子文档安全加密软件&#xff0c;该系统利用驱动层透明加密技术&#xff0c;通过对电子文档的加密保护&#xff0c;防止内部员工泄密和外部人员非法窃取企业核心重要数据资产&#xff0c;对电子文档进行全生命周期防护…

未来仓储新玩法小空间做大文章

身处智能消费时代的大家都应该有深刻感受&#xff0c;物流速度在逐年增快。根据国家邮政局预估&#xff0c;2020 年快递业务吞吐量超 740 亿件&#xff0c;同比增长 18%。 面对日益增加的商品交付量&#xff0c;不得不重新定义产品分销方式&#xff0c;从而满足当今互联网消费…

从零开始学HBase:打造你的大数据技能库!

介绍&#xff1a;HBase是一个分布式的、面向列的开源数据库&#xff0c;源于Fay Chang所撰写的Google论文“Bigtable&#xff1a;一个结构化数据的分布式存储系统”。类似于Bigtable利用了Google文件系统&#xff08;File System&#xff09;提供的分布式数据存储&#xff0c;H…

<八>JavaScript中的对象及对像的增删改查

使用基本数据变量所创建的变量都是独立的&#xff0c;不能成为一个整体&#xff0c;对象属于复合型的数据类型&#xff0c;在对象中可以保存多个不同的数据类型的属性。 一、对象的分类 1.1内建对象 由ES标准中定义的对象 比如&#xff1a;Match、String、Number、Boolean、…

华为atlas300安装教程

1、安装包位置&#xff1a; /data/ai_install_packages 2、添加HwHiAiUser用户&#xff1a; groupadd -g 1000 HwHiAiUser useradd -g HwHiAiUser -u 1000 -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash 3、安装驱动&#xff1a; ./Ascend-hdk-310p-npu-driver_6.0.0_l…

前端FLV视频直播解决方案

项目背景&#xff1a; 1. 后台给出一个地址&#xff0c;持续不断的推送flv视频流。 2.前端需要接收视频流&#xff0c;并寻找合适的播放插件。 一开始&#xff1a; 其实用的是xgplayer&#xff08;西瓜视频&#xff09;。 官网地址&#xff1a;西瓜播放器 使用的是直播&a…

DELL MD3600F更换控制器电池

1、存储左上角闪红灯&#xff0c;管理软件提示控制器1电池故障&#xff0c;需取出控制器更换上新电池。 2、通过管理软件确认两个控制器编号&#xff1b;确认到下面的是控制器1 3、拔掉控制器上插的线&#xff08;SAS线、网线、光纤线&#xff09;&#xff0c;打好标签&#xf…

外贸SEO建站系统有哪些?海洋建站的优势?

外贸SEO建站怎么做比较好&#xff1f;如何做谷歌独立站SEO优化&#xff1f; 外贸企业越来越需要建立自己的在线形象&#xff0c;以吸引更多的潜在客户。而要实现这一目标&#xff0c;外贸SEO建站系统是一种非常有效的手段。那么&#xff0c;外贸SEO建站系统有哪些呢&#xff1…

常见 平滑函数

平滑函数是指具有较为连续和缓和性质的数学函数。这类函数通常在局部小范围内变化不大&#xff0c;避免了突变或者急剧的波动。以下是一些常见的平滑函数&#xff1a; 高斯函数&#xff08;Gaussian Function&#xff09; 高斯函数是一种常见的平滑函数&#xff0c;具有钟形曲…

五、从0开始卷出一个新项目瑞萨RZN2L之RZT2L BaseProject coremark的移植

感谢来自b站热心帅气的同学分享的RZT2L移植经验总结的md文档 1 需要注意的小点 1.1 使用Flash运行调试前&#xff0c;新板子需要erase 1.2 在线debug&#xff0c;需要修改startup.c 2 coremark工程建立 2.1 工程创建 2.2 src 用户c代码移植 2.3 debug调试 …

【python】进阶--->网络编程(一)

一、网络编程 网络 : 为了联络多方然后进行通信,将数据从一方传递给另一方. 网络协议 : 不同计算机只需要通过联网,那么就可以相互进行传递数据,那么不同种类的计算机之间就和不同语言的人之间沟通一样,需要一种大家都认可都遵循的协议即可. 那么计算机都遵循的网络通信协议叫…