ARM系列处理器应用技术完全手册PDF电子书下载
- 电子书积分:17 积分如何计算积分?
- 作 者:李佳编著
- 出 版 社:北京:人民邮电出版社
- 出版年份:2006
- ISBN:7115153302
- 页数:582 页
第1章 ARM系列微处理器简介 1
1.1 什么是ARM 1
1.1.1 ARM公司历史 1
1.1.2 ARM的商业模式 2
1.2 ARM体系结构的命名规则 2
1.3 初识ARM系列处理器 3
1.3.1 ARM7系列 4
1.3.2 ARM9系列 5
1.3.3 ARM9E系列 5
1.3.4 ARM10系列 5
1.3.5 ARM11系列 5
1.4.1 ARM7系列 6
1.4 ARM系列处理器的应用领域 6
1.3.8 Cortex-M3和MPCore 6
1.3.7 其他系列处理器 6
1.3.6 SecurCore系列 6
1.4.2 ARM9系列 7
1.4.3 ARM9E系列 7
1.4.4 ARM10E系列 7
1.4.5 SecureCore系列 7
1.5 ARM芯片的特点与选型 7
1.5.1 不同系列处理器间的比较 7
1.5.2 ARM芯片的选型 8
1.6 ARM开发工具 13
第2章 ARM体系结构 16
2.1 ARM体系结构的特点 16
2.2.2 流水线的分类 18
2.2 流水线 18
2.2.1 流水线的概念与原理 18
2.2.3 影响流水线性能的因素 25
2.3 ARM存储器 25
2.4 I/O管理 26
2.5 ARM开发调试方法 27
第3章 ARM微处理器的编程模型 29
3.1 数据类型 29
3.1.1 ARM的基本数据类型 29
3.1.2 浮点数据类型 30
3.1.3 存储器大/小端 30
3.2 处理器工作模式 31
3.3 ARM寄存器组织 32
3.3.1 通用寄存器 33
3.3.2 程序计数器r15 35
3.3.3 程序状态寄存器 36
3.4 异常中断处理 39
3.4.1 异常种类 39
3.4.2 异常优先级 44
3.4.3 处理器模式和异常 44
3.4.4 异常响应流程 45
3.4.5 从异常处理程序中返回 46
3.4.6 在应用程序中安装异常处理程序 48
3.4.7 FIQ和IRQ中断处理函数的设计 50
3.4.8 SWI异常处理函数的设计 54
4.1.1 数据处理指令的寻址方式概要 61
第4章 ARM指令寻址方式 61
4.1 数据处理指令的寻址方式 61
4.1.2 指令解码 62
4.1.3 移位操作 62
4.1.4 寻址方式分类详解 63
4.2 内存访问指令寻址 72
4.2.1 字及无符号字节的Load/Store指令的寻址方式 73
4.2.2 杂类Load/Store指令的寻址方式 83
4.2.3 批量Load/Store指令寻址方式 88
4.2.4 堆栈操作寻址方式 92
4.2.5 协处理器Load/Store寻址方式 93
第5章 数据传送指令 98
5.1 MOV指令 98
5.2 MVN指令 100
5.3 单寄存器的Load/Store指令 101
5.3.1 字数据传送指令 102
5.3.2 字节数据传送指令(LDRB/STRB) 105
5.3.3 半字数据传送指令(LDRH/STRH) 107
5.3.4 用户模式字数据传送指令(LDRT/STRT) 108
5.3.5 用户模式字节数据传送指令(LDRBT/STRBT) 110
5.3.6 有符号的字节/半字数据传送指令(LDRBT/STRBT) 112
5.4 多寄存器Load/Store内存访问指令 113
5.4.1 多寄存器内存字数据传送指令 114
5.4.2 用户模式多寄存器内存字数据传送指令 116
5.4.3 带状态寄存器的多寄存器内存字数据装载指令(LDM(3)) 118
5.4.4 数据传送指令应用 120
5.5 单数据交换指令 122
5.5.1 字交换指令SWP 123
5.5.2 字节交换指令SWPB 124
5.5.3 交换指令SWP应用 125
5.6 程序状态寄存器指令 125
5.6.1 MRS 126
5.6.2 MSR 126
5.6.3 程序状态寄存器指令应用 128
第6章 数据处理指令 130
6.1 AND逻辑与指令 131
6.2 EOR逻辑异或指令 133
6.3 SUB减操作指令 135
6.4 RSB减翻转指令 136
6.5 ADD加操作指令 138
6.6 ADC带进位的加法指令 139
6.7 SBC带进位的减法指令 140
6.8 RSC带进位的翻转减指令 142
6.9 TST测试指令 143
6.10 TEQ测试相等指令 144
6.11 CMP比较指令 145
6.12 CMN负数比较指令 147
6.13 ORR逻辑或指令 148
6.14 BIC位清零指令 149
第7章 乘法指令 152
7.1 MUL乘法指令 153
7.2 MLA乘-累加指令 154
7.3 UMULL无符号数长乘指令 155
7.4 UMLAL无符号长乘-累加操作指令 156
7.5 SMULL无符号长乘-累加操作指令 158
7.6 SMLAL有符号长乘-累加操作指令 159
第8章 跳转指令 161
8.1 跳转指令B及带连接的跳转指令BL 162
8.2 带状态切换的跳转指令BX 164
8.3 带状态切换的连接跳转指令BLX(1) 165
8.4 带状态切换的连接跳转指令BLX(2) 167
第9章 协处理器及其他指令 169
9.1 协处理器指令 169
9.1.1 协处理器数据操作指令CDP 170
9.1.2 协处理器数据读取指令LDC 171
9.1.3 协处理器数据写入指令STC 173
9.1.4 ARM寄存器到协处理器寄存器的数据传送指令MCR 174
9.1.5 协处理器寄存器到ARM寄存器的数据传送指令MRC 176
9.2 状态寄存器访问指令 178
9.2.1 程序状态字内容送通用寄存器指令MRS 178
9.2.2 写状态寄存器指令MSR 180
9.3 零计数指令CLZ 182
9.4 交换指令 183
9.4.1 寄存器和存储器字数据交换指令SWP 184
9.4.2 寄存器和存储器字节数据交换指令SWPB 185
9.5 异常产生指令 186
9.5.1 软中断指令SWI 186
9.5.2 断点中断指令BKPT 189
10.1 ARM汇编器所支持的伪操作 191
第10章 ARM汇编程序设计 191
10.1.1 符号定义(Symbol Definition)伪操作 192
10.1.2 数据定义(Data Definition)伪操作 197
10.1.3 汇编控制(Assembly Control)伪操作 206
10.1.4 信息报告(Reporting)伪操作 211
10.1.5 指令集选择(Instruction Set Selection)伪操作 215
10.1.6 杂项(Miscellaneous)伪操作 217
10.1.7 结构描述伪操作 228
10.2 ARM汇编器所支持的伪指令 235
10.2.1 ADR伪指令 235
10.2.2 ADRL伪指令 236
10.2.3 MOV32伪指令 237
10.2.4 LDR伪指令 237
10.3.1 ARM汇编语言语句格式 238
10.3 汇编语言文件格式 238
10.3.2 ARM汇编语言中的符号 239
10.3.3 汇编语言程序中的表达式和运算符 242
10.3.4 汇编语言预定义寄存器和协处理器 248
10.3.5 汇编语言内置变量 249
10.3.6 汇编语言的程序结构 250
10.3.7 汇编语言子程序调用 250
10.4 ARM汇编编译器的使用 251
10.4.1 选项说明列表 253
10.4.2 过程调用标准AAPCS 253
10.5.1 条件跳转及循环 254
10.5 ARM汇编程序设计举例 254
10.4.5 为FPU命名选项 254
10.4.3 浮点模式选项 254
10.4.4 为CPU命名选项 254
10.5.2 传送指令程序设计 257
10.5.3 宏的使用 267
10.5.4 使用MAP和FIELD命令描述数据结构 269
第11章 Thumb指令集 273
11.1 Thumb指令的特点及实现 273
11.2 Thumb编程模型 275
11.3 Thumb跳转指令 276
11.3.1 跳转指令B 276
11.3.2 带返回的无条件跳转指令BL 278
11.3.3 带返回链接的无条件跳转指令BLX(1) 279
11.3.5 带返回链接的无条件跳转指令BLX(2) 281
11.3.4 带状态切换的跳转指令BX 281
11.3.6 Thumb指令集中跳转指令举例 282
11.4 Thumb数据处理指令 282
11.4.1 ADC指令 284
11.4.2 小立即数加法指令ADD(1) 285
11.4.3 大立即数加法指令ADD(2) 285
11.4.4 寄存器加法指令ADD(3) 286
11.4.5 寄存器加法指令ADD(4) 287
11.4.6 PC相关加法指令ADD(5) 287
11.4.7 SP相关加法指令ADD(6) 288
11.4.8 SP相关加法指令ADD(7) 288
11.4.9 逻辑与指令AND 289
11.4.10 算术右移指令ASR(1) 290
11.4.11 算术右移指令ASR(2) 291
11.4.12 位清零指令BIC 291
11.4.13 比较指令CMN 292
11.4.14 比较指令CMP(1) 293
11.4.15 比较指令CMP(2) 294
11.4.16 比较指令CMP(3) 294
11.4.17 异或指令EOR 295
11.4.18 逻辑左移指令LSL(1) 296
11.4.19 逻辑左移指令LSL(2) 296
11.4.20 逻辑右移指令LSR(1) 297
11.4.21 逻辑右移指令LSR(2) 298
11.4.22 移位指令MOV(1) 299
11.4.23 移位指令MOV(2) 300
11.4.24 移位指令MOV(3) 301
11.4.25 乘法指令MUL 301
11.4.26 传送指令MVN 302
11.4.27 取反指令NEG 303
11.4.28 逻辑或指令ORR 303
11.4.29 循环右移指令ROR 304
11.4.30 带进位的减指令SBC 305
11.4.31 减法指令SUB(1) 306
11.4.32 减法指令SUB(2) 306
11.4.33 减法指令SUB(3) 307
11.4.34 减法指令SUB(4) 308
11.4.35 位测试指令TST 309
11.4.36 Thumb指令集中数据操作指令举例 309
11.5.1 寄存器装载指令LDR(1) 310
11.5 单寄存器数据传送指令 310
11.5.2 寄存器装载指令LDR(2) 311
11.5.3 寄存器装载指令LDR(3) 312
11.5.4 寄存器装载指令LDR(4) 313
11.5.5 字节加栽指令LDRB(1) 313
11.5.6 字节加载指令LDRB(2) 314
11.5.7 半字加载指令LDRH(1) 315
11.5.8 半字数据加载指令LDRH(2) 315
11.5.9 有符号字节数据加载指令LDRSB 316
11.5.10 有符号半字数据加载指令LDRSH 317
11.5.11 寄存器存储指令STR(1) 318
11.5.12 寄存器存储指令STR(2) 318
11.5.13 寄存器存储指令STR(3) 319
11.5.14 字节存储指令STRB(1) 320
11.5.15 寄存器存储指令STRB(2) 320
11.5.16 半字存储指令STRH(1) 321
11.5.17 寄存器存储指令STRH(2) 322
11.5.18 数据传送指令举例 323
11.6 多寄存器数据传送指令 323
11.6.1 多寄存器数据加载指令LDMIA 323
11.6.2 多寄存器数据存储指令STMIA 324
11.6.3 多寄存器压栈指令PUSH 325
11.6.4 多寄存器出栈指令POP 326
11.6.5 多寄存器数据传送指令举例 327
11.7 异常中断产生指令(断点指令) 328
11.7.1 软中断指令SWI 328
11.7.2 断点中断指令BKPT 329
11.8 未定义的指令空间 330
11.9 Thumb指令应用 330
11.9.1 Thumb的实现 330
11.9.2 Thumb的特点 332
11.10 ARM和Thumb的混合编程 333
11.10.1 互交工作基础 333
11.10.2 互交子程序 335
第12章 混合使用C、C++和汇编语言 345
12.1 内联汇编和嵌入型汇编的使用 345
12.1.1 内联汇编 345
12.1.2 嵌入式汇编 356
12.1.3 内联汇编中使用SP、LR和PC寄存器的遗留问题 362
12.1.4 内联汇编代码与嵌入式汇编代码之间的差异 363
12.2 从汇编代码访问C全局变量 364
12.3 在C++中使用C头文件 364
12.3.1 在C++中使用系统C头文件 365
12.3.2 在C++中使用自定义的C头文件 365
12.4 C、C++和ARM汇编语言之间的调用 366
12.4.1 相互调用的一般规则 366
12.4.2 C++的特定信息 367
12.4.3 混合编程调用举例 367
第13章 嵌入式软件开发 374
13.1 基于ARM处理器的嵌入式系统设计 374
13.1.1 未对齐的数据指针 374
13.1.2 结构体中未对齐字段 375
13.1.4 移植代码并检测非对齐内存访问 377
13.1.3 用于半字存取的非对齐LDR指令 377
13.2 编译器的缺省行为 378
13.2.1 Semihosting 379
13.2.2 C库结构 381
13.2.3 默认存储器映射 382
13.2.4 链接程序放置规则 382
13.2.5 应用程序启动 383
13.3 调整C库使其适应目标硬件 384
13.3.1 C库函数重定向 384
13.3.2 从最终代码映像中去掉Semihosting 385
13.4 映像文件存储器映射调整 385
13.4.1 关于分散加载 385
13.4.2 Scatter文件语法 389
13.4.3 Scatter文件典型用法 396
13.4.4 等效的简单映像分散载入描述 401
13.5 复位和初始化 405
13.5.1 初始化序列 405
13.5.2 向量表 406
13.5.3 ROM/RAM重映射 406
13.5.3 局部存储器设置有关的考虑事项 409
13.5.4 栈指针初始化 409
13.5.5 硬件初始化 411
13.6 进一步存储器映射考虑事项 411
13.6.1 在Scatter文件中定位目标外设 412
13.6.2 在Scatter文件中放置堆和栈 412
14.1.1 为编译器选择处理器结构 416
14.1 C编译器及其优化 416
第14章 高效的C编程 416
14.1.2 调试选项 417
14.1.3 优化选项 417
14.1.4 AAPCS选项 418
14.1.5 编译选项对代码生成影响示例 418
14.2 除法运算 422
14.2.1 合并除法和求余运算 422
14.2.2 使用2的整数次幂做除数 423
14.2.3 求余运算 423
14.2.4 除数是常数的除法 424
14.3 条件执行 424
14.4.1 范围检测 425
14.4 布尔表达式 425
14.4.2 和零的比较操作 426
14.5 C循环结构 427
14.5.1 循环中止 428
14.5.2 循环展开 429
14.6 Switch语句 430
14.7 寄存器分配 432
14.7.1 变量寄存器分配 432
14.7.2 指针别名 433
14.8 变量类型 438
14.8.1 局部变量 438
14.8.2 有符号数和无符号数 439
14.8.3 全局变量 439
14.9.1 减少函数调用开销 443
14.9 函数调用 443
14.9.2 使用_value_in_regs返回结构体 445
14.9.3 叶子函数 446
14.9.4 嵌套优化 447
14.9.5 单纯子函数 448
14.9.6 内嵌函数 449
14.9.7 函数定义 450
14.10 浮点运算 451
14.11 移植问题 452
第15章 ARM存储器 453
15.1 协处理器CP15 454
15.1.1 CP15寄存器访问指令 455
15.1.2 CP15中的寄存器 457
15.1.3 寄存器c0 458
15.1.4 寄存器c1 462
15.2 片上存储器 465
15.3 高速缓冲存储器Cache 465
15.3.1 Cache的分类 466
15.3.2 Cache性能的衡量 466
15.3.3 Cache工作原理 467
15.3.4 Cache与主存的关系 468
15.3.5 Cache的写策略 470
15.3.6 Cache的替换策略 471
15.3.7 与Cache相关的编程接口 472
15.3.8 内存一致性 476
15.3.9 Cache初始化子程序示例 478
15.4 存储保护单元MPU 480
15.4.1 保护域(Protection Regions) 481
15.4.2 内存访问顺序 482
15.4.3 使能MPU 482
15.4.4 重叠域 483
15.4.5 与MPU相关的CP15寄存器 483
15.5 存储管理单元MMU 487
15.5.1 MMU概述 487
15.5.2 MMU与MPU 488
15.5.3 内存访问过程 488
15.5.4 MMU的使能与禁止 489
15.5.5 虚拟地址到物理地址的转换 490
15.5.7 与TLB相关的操作 500
15.5.6 域(domain)和存储器访问权限 500
15.5.8 存储访问失效 502
15.5.9 快速上下文切换扩展(FCSE,Fast Context Switch Extension) 506
第16章 ARM体系结构的发展 510
16.1 ARM体系结构的发展过程 510
16.2 ARMv6增加的系统支持 511
16.2.1 存储管理 511
16.2.2 多处理单元支持 513
16.2.3 异常处理和中断 513
16.2.4 混和大小端支持 513
16.2.5 对媒体处理的支持 513
A.1.1 基本数据类型 515
A.1.2 字节顺序 515
A.1 数据类型 515
附录A ARM体系结构过程调用标准(AAPCS) 515
A.1.3 混和数据类型 516
A.2 基本过程调用标准 516
A.2.1 寄存器 516
A.2.2 进程、内存和栈 519
A.2.3 子程序调用标准 521
A.2.4 结果返回 521
A.2.5 参数传递 521
A.2.6 互交代码 522
A.3 C/C++语言数据类型 523
A.3.1 基本数据类型 523
A.3.2 结构、联合、枚举和位字段 525
A.4 浮点操作编译选项 527
附录B ARM指令速查(按字母顺序) 529
附录C Thumb指令速查(按字母顺序) 538
附录D ARM汇编伪操作速查手册(按字母顺序) 548
附录E 向量浮点编程 558
E.1 向量浮点协处理器 558
E.2 浮点寄存器 558
E.2.1 寄存器组 558
E.2.2 向量 559
E.3 向量和标量运算 560
E.4 VFP和条件码 560
E.5 VFP系统寄存器 561
E.5.1 浮点状态和控制寄存器FPSCR 561
E.6 清零模式(Flush—to—Zero) 563
E.5.3 浮点系统标识寄存器FPSID 563
E.5.2 浮点异常寄存器FPEXC 563
E.6.1 清零模式的适用范围 564
E.6.2 使用清零模式的影响 564
E.7 VFP指令 564
E.7.1 FABS、FCPY和FNEG 564
E.7.2 FADD和FSUB 565
E.7.3 FCMP 566
E.7.4 FCVTDS 567
E.7.5 FCVTSD 567
E.7.6 FDIV 568
E.7.7 FLD和FST 568
E.7.8 FLDM和FSTM 569
E.7.9 FMAC、FNMAC、FMSC和FNMSC 570
E.7.10 FMDRR和FMRRD 571
E.7.11 FMDHR、FMDLR、FMRDH和FMRDL 572
E.7.12 FMRS和FMSR 573
E.7.13 FMRRS和FMSRR 573
E.7.14 FMRX、FMXP和FMSTAT 574
E.7.15 FMUL和FNMUL 575
E.7.16 FSITO和FUITO 575
E.7.17 FSQRT 576
E.7.18 FTOSI和FTOUI 577
E.8 浮点操作伪指令(pseudo—instruction) 577
E.9 浮点运算伪操作和向量记号 578
E.9.1 VFPASSERT SCALAR 578
E.9.2 VFPASSERT VECTOR 579
E.10 浮点运算指令一览表 580
参考文献 582
- 《钒产业技术及应用》高峰,彭清静,华骏主编 2019
- 《现代水泥技术发展与应用论文集》天津水泥工业设计研究院有限公司编 2019
- 《异质性条件下技术创新最优市场结构研究 以中国高技术产业为例》千慧雄 2019
- 《Prometheus技术秘笈》百里燊 2019
- 《英汉翻译理论的多维阐释及应用剖析》常瑞娟著 2019
- 《中央财政支持提升专业服务产业发展能力项目水利工程专业课程建设成果 设施农业工程技术》赵英编 2018
- 《药剂学实验操作技术》刘芳,高森主编 2019
- 《林下养蜂技术》罗文华,黄勇,刘佳霖主编 2017
- 《脱硝运行技术1000问》朱国宇编 2019
- 《催化剂制备过程技术》韩勇责任编辑;(中国)张继光 2019
- 《市政工程基础》杨岚编著 2009
- 《家畜百宝 猪、牛、羊、鸡的综合利用》山西省商业厅组织技术处编著 1959
- 《《道德经》200句》崇贤书院编著 2018
- 《高级英语阅读与听说教程》刘秀梅编著 2019
- 《计算机网络与通信基础》谢雨飞,田启川编著 2019
- 《看图自学吉他弹唱教程》陈飞编著 2019
- 《法语词汇认知联想记忆法》刘莲编著 2020
- 《培智学校义务教育实验教科书教师教学用书 生活适应 二年级 上》人民教育出版社,课程教材研究所,特殊教育课程教材研究中心编著 2019
- 《国家社科基金项目申报规范 技巧与案例 第3版 2020》文传浩,夏宇编著 2019
- 《流体力学》张扬军,彭杰,诸葛伟林编著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《办好人民满意的教育 全国教育满意度调查报告》(中国)中国教育科学研究院 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《人民院士》吴娜著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《中国人民的心》杨朔著;夕琳编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中华人民共和国成立70周年优秀文学作品精选 短篇小说卷 上 全2册》贺邵俊主编 2019
- 《指向核心素养 北京十一学校名师教学设计 数学 九年级 上 配人教版》周志英总主编 2019
- 《中华人民共和国成立70周年优秀文学作品精选 中篇小说卷 下 全3册》洪治纲主编 2019