00. 目录

文章目录

  • 00. 目录
  • 01. 概述
  • 02. 数据处理指令寻址方式
    • 2.1 立即数寻址方式
    • 2.2 寄存器寻址方式
    • 2.3 寄存器移位寻址方式
  • 03. 内存访问指令寻址方式
    • 3.1 字及无符号字节的 Load/Store 指令的寻址方式
    • 3.2 杂类 Load/Store 指令的寻址方式
    • 3.3 批量 Load/Store 指令的寻址方式
    • 3.4 堆栈操作寻址方式
    • 3.5 协处理器 Load/Store 指令的寻址方式
  • 04. 附录

01. 概述

ARM 指令集可以分为跳转指令、数据处理指令、程序状态寄存器传输指令、Load/Store指令、协处理器指令和异常中断产生指令。根据

使用的指令类型不同,指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。

ARM 指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。

02. 数据处理指令寻址方式

数据处理指令的基本语法格式如下:

<opcode> {<cond>} {S} <Rd>,<Rn>,<shifter_operand>

其中,<shifter_operand>有 11 种形式,如表所示。

数据处理指令寻址方式可以分为以下几种。

(1)立即数寻址方式。

(2)寄存器寻址方式。

(3)寄存器移位寻址方式。

2.1 立即数寻址方式

指令中的立即数是由一个 8bit 的常数移动 4bit 偶数位(0,2,4,…,26,28,30)得到的。所以每一条指令都包含一个 8bit 的常数 X 和移位值 Y,得到的立即数 = X 循环右移(2×Y),如下图所示。

下面列举了一些有效的立即数:

0xFF、0x104、0xFF0、0xFF00、0xFF000、0xFF000000、0xF000000F

下面是一些无效的立即数:

0x101、0x102、0xFF1、0xFF04、0xFF003、0xFFFFFFFF、0xF000001F

立即数应用示例

MOV R0,#0 ;送 0 到 R0
ADD R3,R3,#1  ;R3 的值加 1
CMP R7,#1000  ;将 R7 的值和 1000 比较
BIC R9,R8,#0xFF00 ;将 R8 中 8~15 位清零,结果保存在 R9 中

2.2 寄存器寻址方式

寄存器的值可以被直接用于数据操作指令,这种寻址方式是各类处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。

寄存器寻址示例

MOV R2,R0 ;R0 的值送 R2
ADD R4,R3,R2  ;R2 加 R3,结果送 R4
CMP R7,R8 ;比较 R7 和 R8 的值

2.3 寄存器移位寻址方式

寄存器的值在被送到 ALU 之前,可以事先经过桶形移位寄存器的处理。预处理和移位发生在同一周期内,所以有效地使用移位寄存器,

可以增加代码的执行效率。

寄存器移位寻址方式示例

ADD R2,R0,R1,LSR #5
MOV R1,R0,LSL #2
RSB R9,R5,R5,LSL #1
SUB R1,R2,R0,LSR #4
MOV R2,R4,ROR R0

03. 内存访问指令寻址方式

内存访问指令的寻址方式可以分为以下几种:

(1)字及无符号字节的 Load/Store 指令的寻址方式。

(2)杂类 Load/Store 指令的寻址方式。

(3)批量 Load/Store 指令的寻址方式。

(4)协处理器 Load/Store 指令的寻址方式。

(5)堆栈操作寻址方式。

3.1 字及无符号字节的 Load/Store 指令的寻址方式

字及无符号字节的 Load/Store 指令语法格式如下:

LDR|STR{<cond>}{B}{T} <Rd>,<addressing_mode>

其中,<addressing_mode>共有 9 种寻址方式,如下图所示。

3.2 杂类 Load/Store 指令的寻址方式

使用该类寻址方式的指令的语法格式如下:

LDR|STR{<cond>}H|SH|SB|D <Rd>,<addressing_mode>

使用该类寻址方式的指令包括(有符号/无符号)半字 Load/Store 指令、有符号字节Load/Store 指令和双字 Load/Store 指令。

该类寻址方式分为 6 种类型,如下图所示。

3.3 批量 Load/Store 指令的寻址方式

批量 Load/Store 指令将一片连续内存单元的数据加载到通用寄存器组中或将一组通用寄存器的数据存储到内存单元中。

批量 Load/Store 指令的寻址模式产生一个内存单元的地址范围,指令寄存器和内存单元的对应关系满足这样的规则,即编号低的寄存器

对应于内存中低地址单元,编号高的寄存器对应于内存中的高地址单元。

该类指令的语法格式如下:

LDM|STM{<cond>}<addressing_mode> <Rn>{!},<registers><^>

该类指令的寻址方式如表 3-4 所示。

3.4 堆栈操作寻址方式

堆栈操作寻址方式和批量 Load/Store 指令寻址方式十分类似。但对于堆栈的操作,数据写入内存和从内存中读出要使用不同的寻址模

式,因为进栈操作(Pop)和出栈操作(Push)要在不同的方向上调整堆栈。

下面详细讨论如何使用合适的寻址方式实现数据的堆栈操作。

根据不同的寻址方式,将堆栈分为以下 4 种。

(1)Full 栈:堆栈指针指向栈顶元素(last used location)。

(2)Empty 栈:堆栈指针指向第一个可用元素(the first unused location)。

(3)递减栈:堆栈向内存地址减小的方向生长。

(4)递增栈:堆栈向内存地址增加的方向生长。

根据堆栈的不同种类,将其寻址方式分为以下 4 种。

(1)满递减 FD(Full Descending)。

(2)空递减 ED(Empty Descending)。

(3)满递增 FA(Full Ascending)。

(4)空递增 EA(Empty Ascending)。

表 3-5 列出了堆栈的寻址方式和批量 Load/Store 指令寻址方式的对应关系。

3.5 协处理器 Load/Store 指令的寻址方式

协处理器 Load/Store 指令的语法格式如下:

<opcode>{<cond>}{L} <coproc>,<CRd>,<addressing_mode>

04. 附录

4.1 ARM Architecture Reference Manual

【ARM】ARM处理器寻址方式相关推荐

  1. [ARM] ARM处理器寻址方式

    ARM处理器寻址方式 寻址方式是处理器根据指令给出的地址码字段来寻找物理地址的方式. 1.立即寻址 立即寻址也称为立即数据寻址,在立即寻址中的操作码字段后面的地址码部分就是操作数据本身,在数据包含在指 ...

  2. x86架构和arm架构处理器分析

    x86架构和arm架构处理器分析 目录: 1.两种cpu架构:冯洛伊曼和哈佛 2.x86架构和arm架构分析 3.x86架构和arm架构功耗探究 一.两种cpu架构: 目前主流的cpu处理 器都采用了 ...

  3. 从CPU架构--x86架构和arm架构处理器--功耗

    目录: 1.两种cpu架构:冯洛伊曼和哈佛 2.x86架构和arm架构分析 3.x86架构和arm架构功耗探究 一.两种cpu架构: 目前主流的cpu 处理器都采用了冯洛伊曼架构或者哈佛架构,那么这和 ...

  4. 解读 | Arm 机器学习处理器的独特之处

    https://www.leiphone.com/toutiao/ngj0RTJGo5YNwsH2.html 雷锋网按:Arm 社区近期发表文章,深入地介绍了一个机器学习处理器(Machine Lea ...

  5. 嵌入式ARM多核处理器并行化方法

    from:http://ee.ofweek.com/2014-11/ART-11001-2808-28902672.html 目前,嵌入式多核处理器已经在嵌入式设备领域得到广泛运用,但嵌人式系统软件开 ...

  6. 使用Troll对ARM Cortex-M处理器进行系统内核调试

    本文讲的是使用Troll对ARM Cortex-M处理器进行系统内核调试, Troll是用于ARM Cortex-M系统的C语言源代码级调试器,可通过高端的blackmagic硬件调试探针进行访问,并 ...

  7. 服务器可否替代手机芯片,基于ARM的处理器能取代桌面处理器吗?

    科技的发展速度太快了,从手机进入智能时代开始,手机处理器的速度也越来越快了,以前人们办公都是在电脑端进行的,随着手机的功能越来越多,手机处理器速度越来越快,已经有一小部分的工作可以在手机上完成了.那么 ...

  8. ARM系列处理器的分类

    1.ARM ARM即以英国ARM(Advanced RISC Machines)公司的内核芯片作为CPU,同时附加其他外围功能的嵌入式开发板,用以评估内核芯片的功能和研发各科技类企业的产品. ARM ...

  9. 基于 arm 设计开发工具包的 Arm Cortex-M3 处理器的示例系统级设计(第一章:文件目录AHB组件开发平台)

    设计工具包中文件目录 目录名 目录内容 logical Verilog组件包括AHB-Lite和APB基础组件.外设.APB子系统以及AHB-Lite和APB协议. systems 示例系统的设计文件 ...

最新文章

  1. 5.5 function
  2. 【django】路由命名和路由反向解析
  3. PyTorch进行神经风格转换/迁移(Neural-Transfer:图像风格迁移)
  4. centos7自带数据库MariaDB重启和修改密码
  5. python多级索引修改
  6. (王道408考研操作系统)第五章输入/输出(I/O)管理-第一节6:设备的分配和回收
  7. 热备份路由协议(HSRP)
  8. Currency Exchange(判断有无正环)
  9. QT下信号与槽不在同一个线程中如何connect
  10. 白鹭H5小游戏项目结构
  11. C#身份证号码验证代码
  12. 默认浏览器怎么更改为别的浏览器,这2个方法很简单
  13. oracle 用户权限设置,oracle用户权限管理使用详解
  14. pyscripter与python的关系_Pyscripter是python下一个非常流行的开源IDE
  15. pr制作镜头移动转场(调整图层,方向模糊)
  16. 计算机一级excel中模拟运算,excel2000计算机一级专题.docx
  17. 关于水平集函数的重新初始化过程
  18. echarts:silent:true去掉markline label的tooltip
  19. 开发微信公众号支付代码
  20. 苹果x漫画脸_延续硬派定位 新一代五十铃mu-X首发

热门文章

  1. XML开发优秀工具—XmlPad
  2. 2005年的最后一天
  3. 宝塔网设置伪静态进行隐藏php后缀名,nextcloud宝塔面板nginx伪静态-去除index.php
  4. mysql数据库在什么上运行_mysql – 在所有数据库上运行SQL查询
  5. Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付
  6. C语言学习之输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
  7. Debian下Cannot set LC_CTYPE to default locale: No such file or directory解决方法
  8. 解决cell循环利用造成的重复勾选
  9. C03-Java同步实践加强班第5周上机任务
  10. linux 下 apache启动、停止、重启命令