六、ARM 寻址方式

发布者:RainbowGarden最新更新时间:2023-07-11 来源: elecfans关键字:ARM  寻址方式  寄存器寻址 手机看文章 扫描二维码
随时随地手机看文章

寻址方式是针对源操作数来说的

6.1 立即数寻址

  • 源操作数是立即数

  • 立即数:操作码以 # 号开头的数字为立即数

  • 立即数寻址: MOV   R0, #0x300

  • 伪指令:        LDR   R0,=0x12345678

  • 注意:

    • 立即数是 8 位数据存储,用  X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 * Y 个位

    • 立即数 0xf200 是由 0xcf2 间接表示的,即是由 8 位的 F2 循环右移 24 位(2 * 12)得到 X = 0xf2; Y = 0xC

6.2 寄存器寻址

  • MOV R0,R1

  • 源操作数是 寄存器

6.3 寄存器移位寻址

  • 将寄存器寻址的源操作数进行移位

  • MOV R0, R2, LSL, #3

  • 将 R2 左移 3 位后,赋值给 R0

6.4 寄存器间接寻址

  • ARM 中由 L/S 结构,即 load/store

  • LOAD 是将内存的数据载入到寄存器中

  • STROE 是将寄存器中的数据存储到内存中

  • 指令:

    • LDR R0,{R1}      把 {R1} 中的值取出来放入到 R0 中

    • STR R0,{R1}  把 R0 中的值取出来放入到 R1 中

    • {R1} 表示取 R1 存放的地址中的数据,换成 C 语言,即 *R1

1 MOV R1, #0x40000000

2 LDR R0, {R1}

3 STR R0, {R1}

5 //若 R1 中的数据 0x40000000 所代表的数据是 0x55,则 R0 的值为 0x55


6.5 基址变址寻址

  • MOV R0, #44

  • MOV R1, #0x40000008

  • STR R0, [R1, #-4]

  • [R1, #-4] 的意思是将 R1 存储的地址值 - 4

  • #-4 表示偏移量

  • STR R0, [R1, #-4]!

  • ! 表示回写,即 C 语言中的 i--,上一句则先把 R1 的地址值赋值到 R0 中,再将 R0 中的值 - 4

  • 上一句相当于 STR R0,[R1], #-4

6.6 多寄存器寻址

  • STMIA R0!, {R1 - R3, R5}

  • 将 R1 R2 R3 R5 中的值,存放在以 R0 为起使的地址空间中

  • 大括号中的内容表示寄存器中的值,R0 对应的是存储器的地址

  • STM: 操作多个存储器的值

  • 对应的命令是 LDMIA

  • I/D(increase/decrease)   A/B(after/before)

  

 

6.7 堆栈寻址

  • 进行栈的操作,栈的寄存器是 R13,即 SP 寄存器

  • STMFD SP!, {R1-R3}    压栈,寄存器号大的先入栈,与书写顺序没关系

  • LDMFD SP!, {R1-R3}   出栈

  • 组合:  F(FULL)/E(EMPTY)   I/D

    • 一般都写成 FD,因为 ARM 的地址空间是满递减的

    • 满堆栈:堆栈指针指向最后压入的有效数据项

    • 空堆栈:堆栈指针指向下一个待压入数据的空位置

  • MOV SP, #0x40000010

  • STMFD SP!, {R1-R4}

  • 即将 R4 R3 R2 R1 的值存入 0x4000000c 0x40000008 0x40000004 0x40000000

6.8 相对寻址

  • 51 中用的 jmp 和 call 指令

  • 相对寻址就是一个跳转,相对寻址是相对于 PC 而言的,跳转指令:B   BL   BLX   BX

  • B:跳转指令

  • BL:带返回的跳转指令

  • BLX:带返回和状态切换的跳转指令

  • BX:带状态切换的跳转指令


关键字:ARM  寻址方式  寄存器寻址 引用地址:六、ARM 寻址方式

上一篇:七、ARM 指令集
下一篇:五、精简指令集和复杂指令集指令格式

推荐阅读最新更新时间:2024-11-16 19:47

ARM在进入main函数之前会做什么
首先声明,#define是在程序启动代码运行之前就会编译好的。烧录到芯片中时是已经替换完成的数值; 1、芯片复位,启动代码运行,启动代码进行初级硬件初始化等,比如内核从初始复位地址取指令,开始执行程序,最重要的是设置堆栈指针,如图 2、初始化0值变量,将对应内存初始化为0,这些内存对应在程序中的“int i= 0”的变量地址,图示 3、初始化非零变量,例如“int j = 6;”这样的语句对应的内存应该初始化为6,在启动程序中,从ROM中的Initializers段复制到对应的内存,图示 最后调用main(); 记忆:(启(启动代码)栈(初始化堆栈)0(0变量到RAM)变(非零变量到RAM))
[单片机]
<font color='red'>ARM</font>在进入main函数之前会做什么
ARM Cortex-A55: 从端到云实现高效能
你是否已经听说了最近市场上发布了几款新的 CPU?它们的性能非常强大!当然,我说的就是 ARM Cortex-A75 和Cortex-A55,即首批基于新近发布的DynamIQ 技术的Cortex-A系列处理器。本文我们讨论的就是 Cortex-A55:一款对为未来数字世界举足轻重的处理器。下面就随单片机小编一起来了解一下相关内容吧。 出生名门,久经考验 想要理解 Cortex-A55 的真正潜力,我们来简要回顾一下其上一代产品:ARM Cortex-A53。采用这款 CPU 的设备已超过 15亿台,该 CPU 依然是当今业界出货量最高的 64 位 Cortex-A 系列 CPU。Cortex-A53 于 2012 年发
[单片机]
ARM大势所趋,除了苹果外我们将会看到何种PC
去年冬天,苹果的 Apple Silicon 让我们见识到了 ARM 芯片的无限潜力,相比起 x86 平台,ARM 显然已成为先进生产力的代表,最起码是未来的趋势没跑了。苹果有着强大的软硬件整合能力,在转向 ARM 这条快车道上走得很顺利,但相比之下,扎根太深的 PC 实在是难以脱身,前有英特尔后有高通,多次与微软联手都没见成效。但 PC 迈向 ARM 并非就完全没有希望,只是可能需要一些‘新鲜血液’来推动。   英伟达带来了全新的‘核武器’   前几天,在英伟达一年一度技术大会(GTC)上,黄仁勋像以往一样身着黑色皮衣出现在自家厨房,不过,这次他并没有带来全新显卡,而是发布了一款基于 ARM 架构的处理器,官方依旧采用历史
[手机便携]
<font color='red'>ARM</font>大势所趋,除了苹果外我们将会看到何种PC
ARM汇编指令MRS和MSR
在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。 例如: MRS R1,CPSR ; 将CPSR状态寄存器读取,保存到R1中 MRS R2,SPSR ; 将SPSR状态寄存器读取,保存到R2中 通过MRS指令可以取得状态寄存器里的值,然后比较其模式位M 的值判断当前所处模式,当然也可以比较其它相应位了解当前CPU的状态。 同样,在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和S
[单片机]
传高通将推ARM架构Linux智能本 挑战上网本
6月1日消息,日前有报道称,半导体巨头高通公司将会推出被称为智能本(Smartbook)的新产品,并以此将扭转当前上网本人气高涨的局面。 据国外媒体报道,智能本在外形上与上网本可能并没有太大的区别,同样是拥有10到12英寸的显示屏、完整键盘并支持WiFi网络。但是在技术上,目前的上网本们,通常运行Windows XP操作系统,大多基于英特尔平台。而智能本则将采用基于ARM的处理器,搭配基于Linux的操作系统,并将同时整合3G技术。 分析人士指出,高通公司的智能本可能将采用自己公司的Snapdragon芯片组,该芯片组目前已有智能手机在应用,比如东芝今年2月才刚刚发布的TG01。据称,1GHz的Snapdra
[手机便携]
ARM汇编指令集3
常用ARM指令1:数据处理指令 •数据传输指令 mov mvn mov   r1, r0 @两个寄存器之间数据传递 mov r1, #0xff @将立即数赋值给寄存器 mov 和mvn用法一样,区别是mov是原封不动的传递,而mvn是按位取反后传递 •算术指令 add sub rsb adc sbc rsc and 逻辑与 orr 逻辑或 eor 逻辑异或 •逻辑指令 and orr eor bic bic 位清零 bic r0,r1,#0x1f @将r1的数的bit0 到bit4清零后赋值给r0 •比较指令 cmp cmn tst teq
[单片机]
ARM-Thumb 过程调用标准
寄存器 ATPCS 指定用于特殊用途的寄存器 - 使用寄存器 r0-r3 将参数值传送到函数,并将结果值传出。可以用 a1-a4 来引用 r0-r3,以使此用法透明。请参阅第 3-9 页的参数传递。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。 如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。 - 使用寄存器 r4-r11 存放函数的局部变量。可以用 v1-v8 来引用这些寄存器,以使此用法透明。在 Thumb 状态下,在大多数指令中只有寄存器 r4-r7 可以用于局部变量。 如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。 - 寄存器 r12
[单片机]
基于ARM和VxWorks实现自动彩信发送的嵌入式系统
在arm微处理器硬件平台上,应用windriver公司的tornado集成开发环境,实现基于vxworks的自动发送彩信的嵌入式应用系统。该系统使用现有cdma网络,根据设定的参数发送彩信到特定的移动终端用户。 随着嵌入式应用的发展和16/32位risc处理器技术的成熟,以及支持各种高端处理器的嵌入式操作系统的涌现和完善,嵌入式无线设备可以利用cdma网络实现许多新的应用。自动发送彩信的嵌入式系统就是这种新应用之一,在特定的条件下,系统自动发送彩信到指定的移动通信终端;该应用系统是由用户根据要求设定触发条件的自动发送彩信系统,当满足触发条件时,设备会自动控制捕获、压缩图像部件拍摄外部图像,经过模数转换、数字压缩等处理后,经处理器
[单片机]
基于<font color='red'>ARM</font>和VxWorks实现自动彩信发送的嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved