发表于2024-12-14
ARM体系结构与编程(第2版) pdf epub mobi txt 电子书 下载
ARM处理器是一种16/32位的高性能、低成本、低功耗的嵌入式RISC微处理器,由ARM公司设计,然后授权给各半导体厂商生产,它目前已经成为应用最为广泛的嵌入式处理器。《ARM体系结构与编程(第2版)》共为分14章,对ARM处理器的体系结构、指令系统和开发工具进行了比较全面的介绍。其中包括ARM体系、ARM程序设计模型、ARM汇编语言程序设计、ARM C/C++语言程序设计、ARM连接器的使用、ARM集成开发环境CodeWarrior IDE的介绍及高性能的调试工具ADW的使用。并在此基础上介绍一些典型的基于ARM体系的嵌入式应用系统设计的基本技术。通过阅读本书,可以使读者掌握开发基于ARM的应用系统的各方面的知识。本书既可作为学习ARM技术的培训材料,也可作为嵌入式系统开发人员的参考手册。
第1章 ARM概述及其基本编程模型 1
1.1 ARM技术的应用领域及其特点 1
1.2 ARM体系结构的版本及命名方法 2
1.3 ARM处理器系列 7
1.4 ARM处理器的运行模式 11
1.5 ARM寄存器介绍 11
1.6 ARM体系的异常中断 17
1.7 ARM体系中的存储系统 19
第2章 ARM指令分类及其寻址方式 22
2.1 ARM指令集概要介绍 22
2.2 ARM指令的寻址方式 24
第3章 ARM指令集介绍 61
3.1 ARM指令集 61
3.2 一些基本的ARM指令功能段 110
3.3 Thumb指令介绍 120
第4章 ARM汇编语言程序设计 122
4.1 伪操作 122
4.2 ARM汇编语言伪指令 151
4.3 ARM汇编语言语句的格式 153
4.4 ARM汇编语言程序的格式 162
4.5 ARM汇编编译器的使用 164
4.6 汇编程序设计举例 166
第5章 ARM的存储系统 175
5.1 ARM存储系统概述 175
5.2 ARM中用于存储管理的系统控制
协处理器CP15 176
5.3 存储器管理单元MMU 186
5.4 高速缓冲存储器和写缓冲区 205
5.5 快速上下文切换技术 217
5.6 与存储系统相关的程序设计指南 219
5.7 ARM存储系统的实例 225
第6章 ATPCS介绍 242
6.1 ATPCS概述 242
6.2 基本ATPCS 242
6.3 几种特定的ATPCS 246
第7章 ARM程序和Thumb程序混合
使用 250
7.1 概述 250
7.2 在汇编语言程序中通过用户代码
支持interwork 251
7.3 在C/C++程序中实现interwork 256
7.4 在汇编语言程序中通过连接器
支持interwork 259
第8章 C/C++以及汇编语言的混合
编程 263
8.1 内嵌汇编器的使用 263
8.2 从汇编程序中访问C程序变量 270
8.3 汇编程序、C程序以及C++程序的
相互调用 271
第9章 异常中断处理 276
9.1 ARM中的异常中断处理概述 276
9.2 进入和退出异常中断的过程 279
9.3 在应用程序中安排异常中断处理
程序 285
9.4 SWI异常中断处理程序 288
9.5 FIQ和IRQ异常中断处理程序 297
9.6 复位异常中断处理程序 302
9.7 未定义指令异常中断 302
9.8 指令预取中止异常中断处理程序 303
9.9 数据访问中止异常中断处理程序 303
第10章 ARM C/C++编译器 304
10.1 ARM C/C++编译器概述 304
10.2 ARM编译器命令行格式 306
10.3 ARM编译器中的pragmas 319
10.4 ARM编译器特定的关键词 321
10.5 ARM编译器支持的基本数据
类型 335
10.6 ARM编译器中的预定义宏 337
10.7 ARM中的C/C++库 339
第11章 ARM连接器 347
11.1 ARM映像文件 347
11.2 ARM连接器介绍 351
11.3 ARM连接器生成的符号 353
11.4 连接器的优化功能 354
11.5 运行时库的使用 355
11.6 从一个映像文件中使用另一个映像
文件中的符号 359
11.7 隐藏或者重命名全局符号 362
11.8 ARM连接器的命令行选项 363
11.9 使用scatter文件定义映像文件的
地址映射 371
第12章 嵌入式应用程序示例 384
12.1 嵌入式应用程序设计的基本知识 384
12.2 使用semihosting的C语言程序
示例 388
12.3 一个嵌入式应用系统示例 392
12.4 进行ROM/RAM地址重映射的
嵌入式应用系统 401
12.5 一个嵌入式操作系统示例 405
第13章 使用CodeWarrior 412
13.1 CodeWarrior for ARM概述 412
13.2 简单工程项目的使用 413
13.3 配置生成目标 424
13.4 复杂工程项目的使用 451
13.5 工程项目模板 456
13.6 编译和连接工程项目 461
第14章 ARM体系中的调试方法 465
14.1 ARM体系中的调试系统概述 465
14.2 基于Angel的调试系统 466
14.3 基于JTAG的调试系统 495
14.4 ADW使用介绍 498
参考文献 513
其中的符号及参数说明如下。
:是指令助记符,如ADD表示算术加操作指令。
{}:表示指令执行的条件。
{S}:决定指令的操作是否影响CPSR的值。
:表示目标寄存器。
:表示包含第1个操作数的寄存器。
:表示第2个操作数。
通常有下面3种格式。
(1) 立即数方式。每个立即数由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位二进制的两倍表示。如果立即数记作,8位常数记作immed_8,4位的循环右移值记作rotate_imm,则有:
= immed_8循环右移(2*rotate_imm)
这样并不是每一个32位的常数都是合法的立即数,只有能够通过上面构造方法得到的才是合法的立即数。下面的常数是合法的立即数:
0Xff,0x104,0xff0,0xff00
而下面的数不能通过上述构造方法得到,则不是合法的立即数:
0x101,0x102,0xFF1
同时按照上面的构造方法,一个合法的立即数可能有多种编码方法。如0x3F0是一个合法的立即数,它可以采用下面两种编码方法:
immed_8=0x3F,rotate_imm=0xE 或者
immed_8=0xFC,rotate_imm=0Xf
但是,由于这种立即数的构造方法中包含了循环移位操作,而循环移位操作会影响CPSR的条件标志位C。因此,同一个合法的立即数由于采用了不同的编码方式,将使某些指令的执行产生不同的结果,这是不能允许的。ARM汇编编译器按照下面的规则来生成立即数的编码。
当立即数数值在0和0xFF范围中时,令immed_8=,rotate_ imm=0。
其他情况下,汇编编译器选择使rotate_imm数值最小的编码方式。
(2) 寄存器方式。在寄存器寻址方式下,操作数即为寄存器的数值。如下例所示:
MOV R3,R2 ; 将R2的数值放到R3中
ADD R0,R1,R2 ; R0的数值等于R1的数值加上R2的数值
(3) 寄存器移位方式。寄存器移位方式的操作数为寄存器的数值做相应的移位(或者循环移位)而得到。具体的移位(或者循环移位)的方式有下面几种。
ASR:算术右移。
LSL:逻辑左移。
LSR:逻辑右移。
ROR:循环右移。
RRX:扩展的循环右移。
移位(或者循环移位)的位数可以用立即数方式或者寄存器方式表示。
下面是一些寄存器移位方式的操作数示例:
MOV R0,R1,LSL #3 ; R0=R1*(2**3)
ADD R0,R1,R1,LSL #3 ; R0=R1+R1*(2**3)
SUB R0,R1,R2,LSR #4 ; R0=R1-R2/(2**4)
MOV R0,R1,ROR R2 ; R0=R1循环右移R2位
数据处理指令操作数的具体寻址方式有下面11种。
#
, LSL #
, LSL
, LSR #
, LSR
, ASR #
, ASR
, ROR #
, ROR
, RRX
1. #
指令编码格式
31 28 27 25 24 21 20 19 16 15 12 11 8 7 0
cond 0 0 1 opcode S Rn Rd rotate_imm immed_8
操作数生成方法
指令的操作数即为立即数#。立即数#的生成方法见前面章节的介绍。当rotate_imm=0时,循环器的进位值(即 Carry-out 位)为CPSR中的C条件标志位;当rotate_imm!=0时,循环器的进位值(即 Carry-out 位)为操作数的最高位bit[31]。
指令中操作数的语法格式
#
其中,= immed_8循环右移(2*rotate_imm)。
指令中操作数寻址操作的伪代码
shifter_operand = immed_8 R ARM体系结构与编程(第2版) 电子书 下载 mobi epub pdf txt
书很好
评分还行吧,嗯嗯额
评分这本书不错,比较全面。写的透彻,深入骨髓。适合学习翻阅。
评分书很晦涩,读起来很头大,有些错字导致理解稍差。
评分不错不错,400减300划得来
评分这方面的书籍比较少,但内容算是入门的
评分替同学买的,感觉还可以。
评分不错,特价买的,很好的,下次再买
评分nice
ARM体系结构与编程(第2版) pdf epub mobi txt 电子书 下载