商品详情
定价:119.8
ISBN:9787115582102
作者:奔跑吧Linux社区
版次:第1版
出版时间:2022-04
内容提要:
本书旨在详细介绍ARM64体系结构的相关技术。本书*介绍了ARM64体系结构的基础知识、搭建树莓派实验环境的方法,然后讲述了ARM64指令集中的加载与存储指令、算术与移位指令、比较与跳转等指令以及ARM64指令集中的陷阱,接着讨论了GNU汇编器、链接器、链接脚本、GCC内嵌汇编代码、异常处理、中断处理、GIC-V2,*剖析了内存管理、高速缓存、缓存一致性、TLB管理、内存屏障指令、原子操作、操作系统等内容。
本书适合嵌入式开发人员阅读。
作者简介:
奔跑吧Linux社区 由一群志同道合的工程师组成,致力于Linux等开源软件与推广,为广大工程师和读者提供深入的开源知识分享。
目录:
第 1章 ARM64体系结构基础知识1
1.1 ARM介绍1
1.2 ARMv8体系结构基础知识2
1.2.1 ARMv8体系结构2
1.2.2 采用ARMv8体系结构的常见处理器内核3
1.2.3 ARMv8体系结构中的基本概念3
1.2.4 A64指令集4
1.2.5 ARMv8处理器执行状态4
1.2.6 ARMv8支持的数据宽度5
1.3 ARMv8寄存器5
1.3.1 通用寄存器5
1.3.2 处理器状态6
1.3.3 特殊寄存器7
1.3.4 系统寄存器10
1.4 Cortex-A72处理器介绍10
1.5 ARMv9体系结构介绍13
第 2章 搭建树莓派实验环境14
2.1 树莓派介绍14
2.2 搭建树莓派实验环境15
2.2.1 配置串口线16
2.2.2 安装树莓派官方OS18
2.2.3 实验2-1:输出“Welcome BenOS!” 19
2.2.4 实验2-2:使用GDB与QEMU虚拟机调试BenOS20
2.2.5 实验2-3:使用J-Link EDU仿真器调试树莓派21
2.3 BenOS基础实验代码解析27
2.4 QEMU虚拟机与ARM64实验平台32
第3章 A64指令集1——加载与存储指令35
3.1 A64指令集介绍36
3.2 A64指令编码格式37
3.3 加载与存储指令38
3.3.1 基于基地址的寻址模式39
3.3.2 变基模式41
3.3.3 PC相对地址模式42
3.3.4 LDR伪指令43
3.4 加载与存储指令的变种44
3.4.1 不同位宽的加载与存储指令44
3.4.2 不可扩展的加载和存储指令45
3.4.3 多字节内存加载和存储指令46
3.4.4 独占内存访问指令48
3.4.5 隐含加载-获取/存储-释放
内存屏障原语48
3.4.6 非特权访问级别的加载和存储指令48
3.5 入栈与出栈49
3.6 MOV指令51
3.7 陷阱:你用对加载与存储指令了吗52
3.8 实验53
3.8.1 实验3-1:熟悉MOV和LDR指令53
3.8.2 实验3-2:前变基与后变基寻址模式153
3.8.3 实验3-3:前变基与后变基寻址模式254
3.8.4 实验3-4:PC相对地址寻址54
3.8.5 实验3-5:memcpy()函数的实现54
3.8.6 实验3-6:LDP和STP指令的使用55
第4章 A64指令集2——算术与移位指令56
4.1 条件操作码57
4.2 加法与减法指令57
4.2.1 ADD指令58
4.2.2 ADDS指令60
4.2.3 ADC指令61
4.2.4 SUB指令61
4.2.5 SUBS指令64
4.2.6 SBC指令64
4.3 CMP指令65
4.4 关于条件标志位的示例67
4.5 移位指令68
4.6 位操作指令68
4.6.1 与操作指令68
4.6.2 或操作指令69
4.6.3 位*操作指令71
4.6.4 CLZ指令71
4.7 位段操作指令71
4.7.1 位段插入操作指令71
4.7.2 位段提取操作指令72
4.8 实验73
4.8.1 实验4-1:测试ADDS和CMP指令的C标志位73
4.8.2 实验4-2:条件标志位的使用74
4.8.3 实验4-3:测试ANDS指令以及Z标志位74
4.8.4 实验4-4:测试位段操作指令74
4.8.5 实验4-5:使用位段指令来读取寄存器74
第5章 A64指令集3——比较指令与跳转指令76
5.1 比较指令76
5.1.1 CMN指令76
5.1.2 CSEL指令77
5.1.3 CSET指令78
5.1.4 CSINC指令78
5.2 跳转与返回指令79
5.2.1 跳转指令79
5.2.2 返回指令80
5.2.3 比较并跳转指令80
5.3 陷阱:为什么在RET指令之后系统*崩溃了80
5.4 实验82
5.4.1 实验5-1:CMP和CMN指令82
5.4.2 实验5-2:条件选择指令82
5.4.3 实验5-3:子函数跳转82
第6章 A64指令集4——其他重要指令83
6.1 PC相对地址加载指令83
6.2 LDR和ADRP指令的区别85
6.3 内存独占访问指令85
6.4 异常处理指令86
6.5 系统寄存器访问指令87
6.6 内存屏障指令88
6.7 实验88
6.7.1 实验6-1:测试ADRP和LDR伪指令88
6.7.2 实验6-2:ADRP和LDR伪指令的陷阱89
6.7.3 实验6-3:LDXR和STXR指令的使用190
6.7.4 实验6-4:LDXR和STXR指令的使用290
第7章 A64指令集的陷阱91
7.1 案例7-1:加载宏标签91
7.2 案例7-2:加载字符串92
7.3 案例7-3:读写寄存器导致树莓派4B死机93
7.4 案例7-4:LDXR指令导致树莓派4B死机94
7.5 汇编大作业7-1:在汇编中实现串口输出功能95
7.6 汇编大作业7-2:分析Linux 5.0的启动汇编代码95
第8章 GNU汇编器96
8.1 编译流程与ELF文件97
8.2 一个简单的汇编程序99
8.3 汇编语法102
8.3.1 注释102
8.3.2 符号102
8.4 常用的伪指令103
8.4.1 对齐伪指令103
8.4.2 数据定义伪指令103
8.4.3 与函数相关的伪指令104
8.4.4 与段相关的伪指令105
8.4.5 与宏相关的伪指令106
8.5 AArch64依赖特性108
8.5.1 AArch64特有的命令行选项108
8.5.2 语法108
8.5.3 AArch64特有的伪指令109
8.5.4 LDR伪指令109
8.6 实验110
8.6.1 实验8-1:汇编语言练习——求*数110
8.6.2 实验8-2:汇编语言练习——通过C语言调用汇编函数110
8.6.3 实验8-3:汇编语言练习——通过汇编语言调用C函数110
8.6.4 实验8-4:使用汇编伪操作来实现一张表110
8.6.5 实验8-5:汇编宏的使用111
第9章 链接器与链接脚本112
9.1 链接器介绍112
9.2 链接脚本114
9.2.1 一个简单的链接程序114
9.2.2 设置入口点115
9.2.3 基本概念115
9.2.4 符号赋值与引用115
9.2.5 当前位置计数器117
9.2.6 SECTIONS命令117
9.2.7 常用的内建函数120
9.3 重定位121
9.3.1 BenOS重定位121
9.3.2 UBoot和Linux内核重定位124
9.4 实验126
9.4.1 实验9-1:分析链接脚本文件126
9.4.2 实验9-2:输出每个段的内存布局127
9.4.3 实验9-3:加载地址不等于运行地址127
9.4.4 实验9-4:分析Linux 5.0内核的链接脚本文件127
第 10章 GCC内嵌汇编代码128
10.1 内嵌汇编代码基本用法128
10.1.1 基础内嵌汇编代码128
10.1.2 扩展内嵌汇编代码128
10.1.3 内嵌汇编代码的修饰符和约束符130
10.1.4 使用汇编符号名132
10.1.5 内嵌汇编函数与宏的结合133
10.1.6 使用goto修饰词133
10.2 案例分析134
10.3 实验138
10.3.1 实验10-1:实现简单的memcpy 函数138
10.3.2 实验10-2:使用汇编符号名编写内嵌汇编代码138
10.3.3 实验10-3:使用内嵌汇编代码完善__memset_16bytes 汇编函数138
10.3.4 实验10-4:使用内嵌汇编代码与宏138
10.3.5 实验10-5:实现读和写系统寄存器的宏139
10.3.6 实验10-6:goto模板的内嵌汇编函数139
第 11章 异常处理140
11.1 异常处理的基本概念140
11.1.1 异常类型140
11.1.2 异常等级141
11.1.3 同步异常和异步异常141
11.2 异常处理与返回142
11.2.1 异常入口142
11.2.2 异常返回142
11.2.3 异常返回地址143
11.2.4 异常处理路由143
11.2.5 栈的选择145
11.2.6 异常处理的执行状态145
11.2.7 异常返回的执行状态146
11.3 异常向量表146
11.3.1 ARMv8异常向量表146
11.3.2 Linux 5.0内核的异常向量表147
11.3.3 VBAR_ELx148
11.4 异常现场149
11.5 同步异常的解析149
11.5.1 异常类型150
11.5.2 数据异常151
11.6 案例分析153
11.6.1 从EL2切换到EL1153
11.6.2 指令不对齐的同步异常处理154
11.7 实验156
11.7.1 实验11-1:切换到EL1156
11.7.2 实验11-2:建立异常向量表157
11.7.3 实验11-3:寻找树莓派4B上触发异常的指令157
11.7.4 实验11-4:解析数据异常的信息158
第 12章 中断处理159
12.1 中断处理背景知识159
12.1.1 中断引脚159
12.1.2 中断控制器159
12.1.3 中断处理过程160
12.2 树莓派4B上的传统中断控制器160
12.3 ARM内核上的通用定时器163
12.4 中断现场165
12.4.1 保存中断现场165
12.4.2 恢复中断现场165
12.5 案例分析:在树莓派4B上实现 一个定时器166
12.5.1 中断现场的保存166
12.5.2 修改异常向量表169
12.5.3 通用定时器初始化170
12.5.4 IRQ处理170
12.5.5 打开本地中断171
12.6 实验172
12.6.1 实验12-1:在树莓派4B上 实现通用定时器中断172
12.6.2 实验12-2:使用汇编函数保存和恢复中断现场173
第 13章 GIC-V2174
13.1 GIC发展历史174
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...