ARM寻址方式
寻址方式
寻址方式是根据指令中给出的地址码字段来实现寻找操作数地址的方式,ARM中有以下8种基本的寻址方式。
1、寄存器寻址
将寄存器中的值作为操作数,指令中的地址码字段是寄存器编号。
MOV R1,R2 ;R1 = R2
ADD R0,R1,R2 ;R0 = R1 + R2
2、立即寻址
将操作数直接写到指令中,取出指令也就取出操作数,直接使用。
MOV R1,#0xFFF0 ;R1 = 0xFFF0
SUBS R1,R1,#0xF0 ;R1 = R1 - 0xF0
3、寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。
MOV R0,R1,LSR #2 ;R1的值右移2位,结果放入R0
ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1“与”操作,结果放入R1
其中移位操作有
LSR(Logical Shift Right)逻辑右移,高位补0
LSL(Logical Shift Left)逻辑左移,低位补0
ASR(Arithmetic Shift Right)算术右移,符号位不变,高位补符号位数值
ROR(ROtate Right)循环右移,低位补高位
RRX(ROtate Right eXtended by 1 place),操作数右移1位,高位补C标志位
4、寄存器间接寻址
操作数是以寄存器中的值作为地址所对应的值,即寄存器中的值为操作数的地址指针。
LDR R1,[R2] ;R1 = *R2
SWP R1,R1,[R2] ;交换R1和*R2
5、基址寻址
将基址寄存器的内容加上需要的偏移量,得到需要操作数的有效地址,常用于查表和数组操作。
LDR R1,[R2,#0xFC] ;R1 = *(R2+0xFC)
LDR R1,[R2,#0xFC]! ;R1 = *(R2+0xFC),R2 = R2 + 0xFC
STR R1,[R2,#0xFC]! ;R2 = R2 + 0xFC,*R2 = R1
LDR R0, [R1, R2] ;R0 = *(R1+R2)
6、多寄存器寻址
一条指令可以完成多个寄存器值得传送,一条指令可以传送16个寄存器的任何自己和所有寄存器。
LDMIA R1!,{R2-R7,R12} ;将R1指向的单元中的数据读到R2-R7,R12中,R1++
STMIA R0!,{R2-R7,R12} ;中将R2-R7,R12中的值保存到R1指向的单元,R0++
7、堆栈寻址
堆栈指针移动方向称生长方向,ARM7有:
- 向上生长,向堆栈写入数据后,堆栈指针(SP)值变大,往高地址生长
- 向下生长,向堆栈写入数据后,堆栈指针(SP)值变小,往低地址生长
除SP移动方向有所不同,SP指向的位置也有所不同:
- SP指向最后压入栈的有效数据项,称满堆栈,入栈时应该先调整指针后写入数据
- SP指向下一个待压入数据的空位置,称空堆栈,入栈时应该先写入数据后调整指针
根据SP生长方向和指向位置不同组合,得到4中堆栈类型:
- 满递增,LDMFA,STMFA
- 空递增,LDMEA,STMEA
- 满递减,LDMFD,STMFD
- 空递减,LDMED,LDMED
STMFD SP!,{R!-R7,LR} ;R1-R7,LR入栈,满递减
LDMFD SP!,{R!-R7,LR} ;数据出栈,放入R1-R7,LR寄存器,满递减
8、相对寻址
与基址寻址类似,以程序计数器PC为基准地址,指令中声明偏移量,相加即得到操作数的有效地址。
BL SUBR1 ;调用子程序SUBR1BEQ LOOP ;条件跳转到LOOP标号处.....
LOOP MOV R6,#1......
SUBR1 ......
相关文章:
ARM寻址方式
寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找操作数地址的方式,ARM中有以下8种基本的寻址方式。 1、寄存器寻址 将寄存器中的值作为操作数,指令中的地址码字段是寄存器编号。 MOV R1,R2 ;R1 R2 ADD R0,R1,R2 ;R0 R1 R22、立即寻…...

【JAVA】String ,StringBuffer 和 StringBuilder 三者有何联系?
个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言StringBufferStringBuffer方法 StringBuilderStringBuilder方法 String ,StringBuffer 和 StringBuilder的区别String和StringBuffer互相转换 前言 在之前的文章…...
关于计数以及Index返回订单号升级版(控制字符长度,控制年月标记)
数据库表操作: EXEC sys.sp_dropextendedproperty nameNName , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNSetNoIndexGOEXEC sys.sp_dropextendedproperty nameNMS_Description , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level…...

【计算机网络】11、网桥(bridge)、集线器(hub)、交换机(switch)、路由器(router)、网关(gateway)
文章目录 一、网桥(bridge)二、集线器(hub)三、交换机(switch)四、路由器(router)五、网关(gateway) 对于hub,一个包过来后,直接将包转发到其他口。 对于桥&…...
第九篇-自我任务数据准备
格式化自我意识数据用于ChatGLM微调 准备数据源 https://github.com/hiyouga/ChatGLM-Efficient-Tuning cd data self_cognition.json代码self_process.py #!/usr/bin/python # -*- coding: UTF-8 -*- # 读取self_cognition自我认知解析并写入转换新文件import json# 读取se…...

2023.8.1号论文阅读
文章目录 MCPA: Multi-scale Cross Perceptron Attention Network for 2D Medical Image Segmentation摘要本文方法实验结果 SwinMM: Masked Multi-view with SwinTransformers for 3D Medical Image Segmentation摘要本文方法实验结果 MCPA: Multi-scale Cross Perceptron Att…...
webpack优化前端框架性能
webpack优化目的 webpack优化目的1. 提升开发体验提升开发体验使用 SourceMap 2. 提升打包构建速度提升打包构建速度(开发模式)提升打包速度 oneOf提升打包速度 include(包含)/exclude(排除)提升第二次打包…...
Unity UGUI的Outline(描边)组件的介绍及使用
Unity UGUI的Outline(描边)组件的介绍及使用 1. 什么是Outline(描边)组件? Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果。通过设置描边的颜色、宽度和模糊程度,可以使UI元素在视觉上更加突出。 2. Outline(描…...
爆改vue3 setup naiveui可编辑table
使用naiveui官网的可编辑table总是报错,所以手写了一个 思路:table数据数组unitMsgArr对应一个布尔的数组isEditArr ,点击table可编辑的行数据的时候,更改对应的isEdit为true,此时渲染组件EditCom,在EditC…...

功率放大器的种类有哪三种类型
功率放大器是一种能将输入信号转换为更高功率输出的电子设备。在电子工程和音频领域中,功率放大器通常被分为三种类型:A类、B类和AB类。下面安泰电子将详细介绍这三种类型的功率放大器及其特点。 A类功率放大器 A类功率放大器是一种基本的线性功率放大器…...
HDFS 分布式存储 spark storm HBase
HDFS 分布式存储 spark storm HBase 分布式结构 master slave name node client 负责文件的拆分 128MB 3份 data node MapReduce 分布式计算 离线计算 2.X之前 速度比较慢 对比spark 编程思想 Map 分 Reduce 合 hadoop streaming Mrjob Yarn 资源管理 cpu 内存 MapReduc…...
Vue3文字实现左右和上下滚动
可自定义设置以下属性: 滚动文字数组(sliderText),类型:Array<{title: string, link?: string}>,必传,默认[] 滚动区域宽度(width),类型:…...

Docker Sybase修改中文编码
镜像:datagrip/sybase 镜像默认用户名sa,密码myPassword,服务名MYSYBASE 1.进入容器 docker exec -it <container_name> /bin/bash2.加载Sybase环境变量 source /opt/sybase/SYBASE.sh3.查看是否安装了中文字符集 isql -Usa -PmyP…...

【SpringCloud Alibaba】(六)使用 Sentinel 实现服务限流与容错
今天,我们就使用 Sentinel 实现接口的限流,并使用 Feign 整合 Sentinel 实现服务容错的功能,让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开,所以,这里我们使用的服…...

mysql的主从复制
1.主从复制的原理 主从复制的原理是通过基于日志的复制方式实现数据的同步。当主服务器上发生数据变更时,会将这些变更写入二进制日志(Binary Log)中。从服务器通过连接到主服务器,请求从主服务器获取二进制日志,并将…...

【Golang 接口自动化03】 解析接口返回XML
目录 解析接口返回数据 定义结构体 解析函数: 测试 优化 资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求,这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据 定义结构体 假设我们现在有一个接口返回的数据resp如…...

Java+bcprov库实现对称和非对称加密算法
BouncyCastle,即BC,其是一款开源的密码包,包含了大量的密码算法。 本篇主要演示BC库引入,对称加密算法AES、SM4和 非对称加密EC算法的简单实现,以下是实现过程。 一、将BC添加到JRE环境 前提:已安装JRE环…...

国内最大Llama开源社区发布首个预训练中文版Llama2
"7月31日,Llama中文社区率先完成了国内首个真正意义上的中文版Llama2-13B大模型,从模型底层实现了Llama2中文能力的大幅优化和提升。毋庸置疑,中文版Llama2一经发布将开启国内大模型新时代! | 全球最强,但中文短板…...

Qt应用开发(基础篇)——滑块类 QSlider、QScrollBar、QDial
目录 一、前言 二、QAbstractSlider类 1、invertedAppearance 2、invertedControls 3、maximum 4、minimum 5、orientation 6、pageStep 7、singleStep 8、sliderDown 9、tracking 10、sliderPosition 11、value 12、信号 三、QDial类 1、notchSize 2、notchTa…...

【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...