第1章 基础知识 1
1.1 数制与数制转换 1
1.1.1 数制的基本概念 1
1.1.2 二进制数 2
1.1.3 十进制和二进制之间的转换 3
1.1.4 二进制和其他进制之间的转换 4
1.2 二进制数的基本运算 5
1.3 计算机中的编码 6
1.3.1 数字的编码 6
1.3.2 字符的编码 7
1.3.3 汉字的编码 8
1.3.4 统一代码 10
1.3.5 语音编码 11
1.3.6 差错控制编码 12
1.4 计算机中有符号数的表示 18
1.4.1 机器数与真值 18
1.4.2 原码、反码与补码 19
1.4.3 补码的加法运算 21
1.4.4 定点数与浮点数 22
1.5 基本逻辑运算 24
1.5.1 与运算 24
1.5.2 或运算 24
1.5.3 非运算 25
1.5.4 异或运算 25
习题一 26
第2章 ARM微处理器基础 27
2.1 嵌入式系统概述 27
2.1.1 嵌入式系统的基本概念 27
2.1.2 嵌入式系统的发展 29
2.1.3 嵌入式系统的组成结构 31
2.1.4 嵌入式处理器 36
2.1.5 典型嵌入式处理器介绍 38
2.2 ARM概述 40
2.2.1 计算机体系结构的分类 40
2.2.2 ARM技术的发展过程 41
2.3 ARM内核的特点 46
2.3.1 RISC技术 46
2.3.2 流水线技术 47
2.3.3 超标量技术 48
2.4 基于ARM核的微处理器 48
2.4.1 基于ARM核的硬件结构 48
2.4.2 ARM核的数据流模型 49
2.4.3 ARM处理器工作模式和工作状态 50
2.5 ARM寄存器 51
2.5.1 通用寄存器 52
2.5.2 状态寄存器 53
2.5.3 Thumb寄存器 56
2.6 ARM的存储系统简介 57
2.6.1 存储器的层次结构 57
2.6.2 数据类型与存储器格式 59
2.6.3 非对齐的存储器访问 61
习题二 62
第3章 ARM指令系统 63
3.1 指令基础 63
3.1.1 程序设计语言的层次结构 63
3.1.2 指令周期和时序 64
3.1.3 程序的执行过程 66
3.2 ARM汇编语言 67
3.2.1 指令和指令格式 67
3.2.2 指令的可选后缀 68
3.2.3 指令的条件执行 69
3.2.4 ARM指令分类 71
3.3 ARM指令的寻址方式 71
3.3.1 立即数寻址 72
3.3.2 寄存器寻址 72
3.3.3 寄存器间接寻址 72
3.3.4 寄存器移位寻址 73
3.3.5 基址变址寻址 73
3.3.6 多寄存器寻址 74
3.3.7 相对寻址 75
3.3.8 堆栈寻址 75
3.4 数据处理指令 76
3.4.1 数据传送指令 77
3.4.2 移位操作 77
3.4.3 算术指令 81
3.4.4 逻辑运算指令 85
3.4.5 比较指令 87
3.4.6 乘法指令 88
3.5 数据加载与存储指令 91
3.5.1 数据加载与存储指令概述 92
3.5.2 单寄存器加载与存储指令 94
3.5.3 多寄存器加载与存储指令 100
3.5.4 堆栈操作 104
3.5.5 交换指令 106
3.6 分支指令 107
3.6.1 分支指令B 108
3.6.2 带返回的分支指令BL 109
3.6.3 带状态切换的分支指令BX 110
3.6.4 带返回和状态切换的分支指令BLX 111
3.7 程序状态寄存器访问指令 112
3.8 协处理器指令 114
3.9 软件中断指令 118
3.10 ARM伪指令 120
3.11 Thumb指令集 122
3.11.1 概述 122
3.11.2 Thumb指令寄存器的使用 125
3.11.3 ARM-Thumb交互 125
3.11.4 数据处理指令 127
3.11.5 单寄存器加载和存储指令 129
3.11.6 多寄存器加载和存储指令 130
3.11.7 堆栈指令 131
3.11.8 软件中断指令 132
3.12 Thumb伪指令 132
习题三 133
第4章 ARM汇编语言程序设计 135
4.1 汇编语言程序格式 135
4.1.1 汇编语言的基本概念 135
4.1.2 汇编语言源程序的组成 136
4.1.3 汇编语言程序中常用的符号 139
4.1.4 汇编语言程序中的表达式和运算符 141
4.2 ARM汇编器的伪操作 144
4.2.1 符号定义伪操作 145
4.2.2 数据定义伪操作 146
4.2.3 汇编控制伪操作 151
4.2.4 信息报告伪操作 154
4.2.5 其他常用的伪操作 156
4.3 汇编语言程序的上机过程 161
4.3.1 汇编语言上机环境 161
4.3.2 编辑汇编语言源程序 163
4.3.3 编译链接源程序 165
4.3.4 调试汇编程序 166
4.4 汇编语言程序设计 166
4.4.1 程序设计步骤 166
4.4.2 简单程序设计 168
4.4.3 分支程序设计 169
4.4.4 循环程序设计 173
4.4.5 子程序设计 177
4.4.6 汇编程序举例 179
4.5 工作模式切换编程 182
4.5.1 处理器模式 182
4.5.2 处理器工作模式切换编程 182
4.6 ATPCS介绍 183
4.6.1 寄存器的使用规则 184
4.6.2 数据栈使用规则 185
4.6.3 参数传递规则 186
4.6.4 ARM和Thumb程序混合使用的ATPCS 187
4.7 ARM和Thumb混合编程 187
4.7.1 工作状态 187
4.7.2 工作状态切换编程 189
4.8 汇编语言和C语言交互编程 192
4.8.1 汇编程序访问C程序变量 192
4.8.2 汇编程序调用C程序 193
4.8.3 C程序内嵌汇编指令 194
4.8.4 C程序调用汇编程序 200
习题四 201
第5章 异常中断编程 203
5.1 ARM的异常和中断 203
5.1.1 异常和中断的基本概念 203
5.1.2 ARM的异常中断 204
5.1.3 向量表 205
5.1.4 异常的优先级别 207
5.2 ARM异常中断的处理过程 208
5.2.1 异常中断响应过程 208
5.2.2 异常中断的返回 210
5.3 复位处理程序 214
5.3.1 复位 214
5.3.2 复位处理编程 215
5.4 SWI异常中断处理程序 217
5.4.1 SWI异常中断处理程序的实现 217
5.4.2 SWI异常中断调用 220
5.5 FIQ和IRQ异常中断处理程序 225
5.5.1 IRQ/FIQ中断处理机制 225
5.5.2 IRQ/FIQ异常中断处理程序 228
5.5.3 IRQ异常中断处理程序举例 230
5.6 未定义指令异常中断 231
习题五 232
第6章 RealView MDK软件的使用 233
6.1 嵌入式系统开发基础 233
6.1.1 嵌入式系统开发流程 233
6.1.2 嵌入式软件开发 234
6.1.3 DS开发平台简介 237
6.1.4 RealView MDK软件的安装 238
6.2 μVision集成开发环境介绍 243
6.2.1 工程工作区 244
6.2.2 工作区 247
6.2.3 输出窗口 248
6.2.4 菜单栏、工具栏和快捷键 249
6.2.5 软件开发流程 253
6.3 程序的编辑 254
6.3.1 工程项目创建 256
6.3.2 源文件的创建 258
6.3.3 工程项目管理 259
6.3.4 工程基本配置 260
6.4 程序的编译与链接 264
6.4.1 基本概念 264
6.4.2 链接器的基本功能 268
6.4.3 分散加载描述文件 272
6.4.4 编译链接配置 273
6.4.5 编译链接工程 276
6.5 程序的调试 277
6.5.1 调试模式 277
6.5.2 调试前的配置 277
6.5.3 调试器的使用 279
6.5.4 调试窗口和对话框 280
6.5.5 Flash编程工具 290
6.5.6 调试命令和变量 292
6.5.7 调试函数简介 297
6.5.8 调试脚本的使用 301
6.5.9 调试信息和去除方法 303
6.5.10 映像文件转换器fromELF 304
习题六 305
第7章 ARM汇编语言程序实验 306
7.1 ARM汇编的上机过程 306
7.2 ARM寻址方式 312
7.3 数据处理指令 317
7.4 数据加载与存储指令 320
7.5 ARM分支指令 325
7.6 ARM汇编程序设计一 329
7.7 ARM汇编程序设计二 334
7.8 工作模式的切换 337
7.9 ARM汇编和C语言混合编程 342
7.10 异常中断编程 347
参考文献 350