ARM处理器开发详解

3.1 ARM处理器的寻址方式

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

3.1.1 数据处理指令寻址方式

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

< opcode> , {< cond>} , {s} , < Rd> , < Rn> , < Shifter_operand>

在这里插入图片描述
数据处理指令寻址方式可以分为以下几种:

1)立即数寻址方式

2)寄存器寻址方式

3)寄存器移位寻址方式

立即数寻址方式

指令中的立即数是由一个8bit的常数移动4bit偶数位(0,2,4,…,26,28,30)得到的。所以,每一条指令都包含一个8bit的常数 和移位值Y,得到的立即数-X循环右移(2XY),如图所示。
在这里插入图片描述

下面列举了一些有效的立即数:
OxFF、0x104,OxFFO,OxFFO0,OxFFO00,OxFFO00000、OxFO0000OF

下面是一些无效的立即数:
0x101.0x102.OxFF1,OxFF04,OxFF003,OxFFFFFFFF,OxFO00001F

在这里插入图片描述
注意,如何判断立即数是否合法:
link

寄存器寻址寻址方式

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

在这里插入图片描述

寄存器移位寻址方式

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

下面是一些在指令中使用了移位操作的例子:
在这里插入图片描述

3.1.2 内存访问指令寻址方式

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

  1. 字及无符号字节的Load/Store指令的寻址方式。
  2. 杂类Load/Store指令的寻址方式
  3. 批量Load/Store指令的寻址方式
  4. 批处理器Load/Store指令的寻址方式

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

语法格式为:LDR|STR {<cond>}{B}{T}. <Rd>,<addressing_mode>
其中,<addressing_mode>有九种寻址方式,如表所示

2.杂类Load/Store指令的寻址方式
语法格式:LDR|STR{<cond>}H|SH|SB|D <Rd>,<addressing_mode>
使用该类寻址方式的指令包括(有符号/无符号)半字Loda/Store指令、有符号字节Load/Store指令和双字Load/Store指令。

该类寻址方式分为6种类型,如下表

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

批量Load/Store 指令的寻址方式产生一个内存单元的地址范围,指令寄存器和内存单元的对应关系满足如下规则——编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中的高地址单元。

该类指令的语法如下:
LDM | STM{<cond>}<addressing_mode> <Rn>{!},<registers><^>
该类指令的寻址方式如图:
在这里插入图片描述

4.堆栈操作寻址方式
堆栈操作寻址方式和批量Load/Store指令寻址方式十分类似。但对于堆栈的操作,数据写入内存和从内存中读出要使用不同的寻址模式,因为进栈操作(pop)和出栈操作(push)要在不同的方向上调整堆栈。
下面详细讨论如何使用合适的寻址方式实现数据的堆栈操作:
根据不同的寻址方式,将堆栈分为以下4种:

  • (1)FUll 栈:堆栈指针指向栈顶元素。

  • (2) Empty 栈:堆栈指针指向第一个可用元素。

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

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

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

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

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

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

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

下表给出堆栈的寻址方式和批量Load/Store指令寻址方式的关系:
在这里插入图片描述

5.协处理器Load/Store 寻址方式

格式:<opcode>{<cond>} {L} <coproc>,<CRd>,<addressing_mode>

3.2 ARM处理器的指令集

数据操作指令是指对存放在寄存器中的数据进行操作的指令。主要包括数据传送指令、算术指令、逻辑指令、比较与测试指令及乘法指令。
如果在数据处理指令前使用S前缀,指令的执行结果将会影响CPSR中的标志位。
数据处理指令如表所示:
在这里插入图片描述
1、 MOV指令
MOV指令是最简单的ARM指令,执行的结果就是把一个数n送到目标寄存器Rd,其中n可以是寄存器,也可以是立即数。

MOV指令多用于设置初始值或者在寄存器间传送数据。

MOV指令将移位码(shifter-operand)表示的数据传送到目的寄存器Rd,并根据操作的结果更新CPSR中相应的条件标志位。

目录 第1 章 ARM处理器概述 5 1.1 ARM-Advanced RISC Machines 5 1.2 ARM处理器的应用领域及特点 5 1.2.1 ARM处理器的应用领域 5 1.2.2 ARM处理器的特点 6 1.3 ARM处理器系列 6 1.3.1 ARM7 微处理器系列 6 1.3.2 ARM9 微处理器系列 7 1.3.3 ARM9E 微处理器系列 7 1.3.4 ARM10E 微处理器系列 7 1.3.5 SecurCore 微处理器系列 8 1.3.6 StrongARM处理器系列 8 1.3.7 Xscale 处理器 8 1.4 ARM处理器结构 8 1.4.1 RISC 体系结构 8 1.4.2 ARM处理器的寄存器结构 9 1.4.3 ARM处理器的指令结构 9 1.5 ARM处理器的应用选型 10 1.6 本章小节 10 第2 章 ARM处理器的编程模型 11 2.1 ARM处理器的工作状态 11 2.2 ARM 体系结构的存储器格式 11 2.3 指令长度及数据类型 12 2.4 处理器模式 12 2.5 寄存器组织 13 2.5.1 ARM 状态下的寄存器组织 13 2.5.2 Thumb 状态下的寄存器组织 15 2.5.3 程序状态寄存器 16 2.6 异常(Exceptions) 18 2.6.1 ARM 体系结构所支持的异常类型 18 2.6.2 对异常的响应 18 2.6.3 从异常返回 19 2.6.4 各类异常的具体描述 19 2.6.5 异常进入/退出小节 20 2.6.6 异常向量(Exception Vectors) 20 2.6.7 异常优先级(Exception Priorities) 21 2.6.8 应用程序中的异常处理 21 2.7 本章小节 21 ARM 应用系统开发详解──基于S3C4510B 的系统设计 2 第3 章 ARM处理器的指令系统 22 3.1 ARM处理器的指令集概述 22 3.1.1 ARM处理器的指令的分类与格式 22 3.1.2 指令的条件域 23 3.2 ARM 指令的寻址方式 23 3.2.1 立即寻址 24 3.2.2 寄存器寻址 24 3.2.2 寄存器间接寻址 24 3.2.3 基址变址寻址 24 3.2.4 多寄存器寻址 25 3.2.5 相对寻址 25 3.2.6 堆栈寻址 25 3.3 ARM 指令集 25 3.3.1 跳转指令 25 3.3.2 数据处理指令 26 3.3.3 乘法指令与乘加指令 30 3.3.4 程序状态寄存器访问指令 32 3.3.5 加载/存储指令 32 3.3.6 批量数据加载/存储指令 34 3.3.7 数据交换指令 35 3.3.8 移位指令(操作) 35 3.3.9 协处理器指令 36 3.3.10 异常产生指令 38 3.4 Thumb 指令及应用 38 3.5 本章小节 39 第4 章 ARM 程序设计基础 40 4.1 ARM 汇编器所支持的伪指令 40 4.1.1 符号定义(Symbol Definition)伪指令 40 4.1.2 数据定义(Data Definition)伪指令 41 4.1.3 汇编控制(Assembly Control)伪指令 43 4.1.4 其他常用的伪指令 45 4.2 汇编语言的语句格式 48 4.2.1 在汇编语言程序中常用的符号 49 4.2.2 汇编语言程序中的表达式和运算符 49 4.3 汇编语言的程序结构 52 4.3.1 汇编语言的程序结构 52 4.3.2 汇编语言的子程序调用 52 4.3.3 汇编语言程序示例 53 4.3.4 汇编语言与C/C++的混合编程 55 4.4 本章小节 56 第5 章 应用系统设计与调试 57 ARM 应用系统开发详解──基于S3C4510B 的系统设计 3 5.1 系统设计概述 57 5.2 S3C4510B 概述 58 5.2.1 S3C4510B 及片内外围简介 58 5.2.2 S3C4510B 的引脚分布及信号描述 61 5.2.3 CPU 内核概述及特殊功能寄存器(Special Registers) 67 5.2.4 S3C4510B 的系统管理器(System Manager) 72 5.3 系统的硬件选型与单元电路设计 82 5.3.1 S3C4510B 芯片及引脚分析 82 5.3.2 电源电路 83 5.3.3 晶振电路与复位电路 83 5.3.4 Flash 存储器接口电路 85 5.3.5 SDRAM 接口电路 89 5.3.6 串行接口电路 93 5.3.7 IIC 接口电路 94 5.3.8 JTAG 接口电路 95 5.3.9 10M/100M 以太网接口电路 96 5.3.10 通用I/O 接口电路 100 5.4 硬件系统的调试 101 5.4.1 电源、晶振及复位电路 101 5.4.2 S3C4510B 及JTAG 接口电路 102 5.4.3 SDRAM 接口电路的调试 103 5.4.4 Flash 接口电路的调试 105 5.4.5 10M/100M 以太网接口电路 105 5.5 印刷电路板的设计注意事项 105 5.5.1 电源质量与分配 105 5.5.2 同类型信号线的分布 106 5.6 本章小节 106 第6 章 部件工作原理与编程示例 107 6.1 嵌入式系统的程序设计方法 107 6.2 部件工作原理与编程示例 108 6.2.1 通用I/O 口工作原理与编程示例 108 6.2.2 串行通讯工作原理与编程示例 111 6.2.3 中断控制器工作原理与编程示例 120 6.2.4 定时器工作原理与编程示例 123 6.2.5 GDMA 工作原理与编程示例 127 6.2.6 IIC 总线控制器工作原理 133 6.2.7 以太网控制器工作原理 138 主要特性 139 MAC 功能模块 140 带缓冲DMA 接口(Buffered DMA Interface) 144 以太网控制器特殊功能寄存器(Ethernet Controller Special Registers) 147 MAC 寄存器(Media Access Control(MAC)Register) 154 以太网控制器的操作(Ethernet Controller Operation) 160 发送一个帧(Transmitting a Frame) 162 ARM 应用系统开发详解──基于S3C4510B 的系统设计 4 接收一个帧(Receiving a Frame) 162 6.2.8 Flash 存储器工作原理与编程示例 162 6.3 BootLoader 简介 167 6.4 本章小节 167 第7 章 嵌入式uClinux 及其应用开发 168 7.1 嵌入式uClinux 系统概况 168 7.2 开发工具GNU 的使用 170 7.2.1 GCC 编译器 170 7.2.2 GNU Make 172 7.2.3 使用GDB 调试程序 177 7.3 建立uClinux 开发环境 180 7.3.1 建立交叉编译器 181 7.3.2 uClinux 针对硬件的改动 184 7.3.3 编译uClinux 内核 185 7.3.4 内核的加载运行 187 7.4 在uClinux 下开发应用程序 188 7.4.1 串行通信 190 7.4.2 socket 编程 195 7.4 .3 添加用户应用程序到uClinux 202 7.4.4 通过网络添加应用程序到目标系统 205 7.5 本章小结 207 第8 章ARM ADS 集成开发环境的使用 209 8.1 ADS 集成开发环境组成介绍 209 8.1.1 命令行开发工具 209 8.1.2 ARM 运行时库 218 8.1.3 GUI 开发环境(Code Warrior 和AXD) 219 8.1.4 实用程序 221 8.1.5 支持的软件 221 8.2 使用ADS 创建工程 222 8.2.1 建立一个工程 222 8.2.2 编译和链接工程 225 8.2.3 使用命令行工具编译应用程序 229 8.3 用AXD 进行代码调试 230 8.4 本章小结 233
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值