ARM寻址方式

这篇具有很好参考价值的文章主要介绍了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中堆栈类型:

  1. 满递增,LDMFA,STMFA
  2. 空递增,LDMEA,STMEA
  3. 满递减,LDMFD,STMFD
  4. 空递减,LDMED,LDMED
STMFD	SP!,{R!-R7,LR}		;R1-R7,LR入栈,满递减
LDMFD	SP!,{R!-R7,LR}		;数据出栈,放入R1-R7,LR寄存器,满递减

8、相对寻址

与基址寻址类似,以程序计数器PC为基准地址,指令中声明偏移量,相加即得到操作数的有效地址。文章来源地址https://www.toymoban.com/news/detail-639334.html

		BL		SUBR1		;调用子程序SUBR1
		BEQ		LOOP		;条件跳转到LOOP标号处
		.....
LOOP	MOV		R6,#1
		......
SUBR1	......

到了这里,关于ARM寻址方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计组考点】:第五章 指令系统(下)寻址方式

    根据学校课件总结的计组考点,用过的都说好! 目录  6.操作数的寻址方式 6.1立即寻址 6.2直接寻址 6.3寄存器寻址 6.4间接寻址 6.5寄存器间接寻址 6.6相对寻址 6.7变址寻址 6.8基址寻址 7.寻址方式例题 7.1例一 7.2例二 8.复杂指令系统计算机与精简指令系统计算机  最后🍨   加油

    2024年01月21日
    浏览(57)
  • 实验一8086计CPU系统寻址方式和汇编语言程序设计

    实验一8086计CPU系统寻址方式和汇编语言程序设 一、实验目的 (1)掌握8086CPU系统的逻辑地址和寻址方式。 (2)掌握8086CPU系统中机器数的表示方式。 (3)掌握指令的机器码表示方法。 (4)掌握堆栈的概念和操作过程。 (5)掌握集成开发环境下的程序设计和调试方法。 (6)掌握汇编语言实

    2023年04月22日
    浏览(46)
  • 汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

    目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 汇编代码 效果 貌似有点问题,忘了把运算结果加上...... 问题描述 问题描述 输入一个N,输出所有拆分的方式。 如

    2023年04月09日
    浏览(38)
  • Unity 之 Addressable可寻址系统 -- 将Resources加载资源方式修改为Addressable加载 -- 实战(一)

    加载方式: Resources 使用同步加载方式;Resources 加载资源时,应用程序将会被阻塞,直到资源加载完成,这可能会导致应用程序出现卡顿或挂起的情况。 Addressables 使用异步加载方式。这意味着使用 Unity 而使用 Addressables 加载资源时,应用程序可以继续运行,而不会出现卡顿

    2024年02月05日
    浏览(40)
  • 【期末不挂科-单片机考前速过系列P2】(第二章:搞定寻址方式)经典例题盘点(带图解析)

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《

    2024年02月01日
    浏览(49)
  • 【理解ARM架构】不同方式点灯 | ARM架构简介 | 常见汇编指令 | C与汇编

    🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言: 你只管努力,剩下的交给时间! 在学习C语言的时候,我们会写个 Hello World 程序来入门,当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。 查看原理图,确定控制LED的引脚: 如上图是

    2024年02月05日
    浏览(47)
  • 易懂的方式讲解ARM中断原理以及中断嵌套方法

    ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。  我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ。  先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着

    2024年01月21日
    浏览(36)
  • 嵌入式学习笔记(3)ARM的异常处理方式介绍

    什么是异常   正常工作之外的流程都叫异常   异常会打断正在执行的工作,并且一般我们希望异常处理完后继续回来执行原工作   中断是异常的一种 异常向量表   所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。   当异常发生时,CPU会自动动作(

    2024年02月11日
    浏览(47)
  • 物理寻址和功能寻址,服务器不同的应答策略和NRC回复策略

    详细策略上,又分为服务有子功能,和不存在子功能。 存在子功能的情况下,又分为supress postive response (即子功能字节的bit7)位=1,和=0两种情况 iso 14229-1也给我们列出了表格 1.1.1先讲功能寻址,supress postive response =0的情况! 看图之前,对图中描述作出必要的解释 *1)Yes代

    2024年04月28日
    浏览(36)
  • STM32纯中断方式发送接收数据(串行通信;keil arm5;)

    除了main文件其他文件均无修改,正常运行--在keil arm5内

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包