图书介绍
x86汇编语言 从实模式到保护模式2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- 李忠,王晓波,余洁著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121187995
- 出版时间:2013
- 标注页数:375页
- 文件大小:159MB
- 文件页数:389页
- 主题词:汇编语言-程序设计
PDF下载
下载说明
x86汇编语言 从实模式到保护模式PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1部分 预备知识3
第1章 十六进制计数法3
1.1 二进制计数法回顾3
1.1.1 关于二进制计数法3
1.1.2 二进制到十进制的转换4
1.1.3 十进制到二进制的转换4
1.2 十六进制计数法5
1.2.1 十六进制计数法的原理5
1.2.2 十六进制到十进制的转换6
1.2.3 十进制到十六进制的转换6
1.2.4 为什么需要十六进制6
1.3 使用Windows计算器方便你的学习过程8
本章习题9
第2章 处理器、内存和指令10
2.1 最早的处理器10
2.2 寄存器和算术逻辑部件10
2.3 内存储器12
2.4 指令和指令集14
2.5 古老的Intel 8086处理器16
2.5.1 8086的通用寄存器16
2.5.2 程序的重定位难题16
2.5.3 内存分段机制19
2.5.4 8086的内存分段机制21
本章习题24
第3章 汇编语言和汇编软件25
3.1 汇编语言简介25
3.2 NASM编译器27
3.2.1 NASM的下载和安装27
3.2.2 代码的书写和编译过程27
3.2.3 用HexView观察编译后的机器代码30
本章习题31
第4章 虚拟机的安装和使用32
4.1 计算机的启动过程32
4.1.1 如何将编译好的程序提交给处理器32
4.1.2 计算机的加电和复位33
4.1.3 基本输入输出系统33
4.1.4 硬盘及其工作原理34
4.1.5 一切从主引导扇区开始36
4.2 创建和使用虚拟机37
4.2.1 别害怕,虚拟机是软件37
4.2.2 下载和安装Oracle VMVirtualBox37
4.2.3 虚拟硬盘简介39
4.2.4 练习使用FixVhdWr工具向虚拟硬盘写数据40
第2部分 实模式45
第5章 编写主引导扇区代码45
5.1 本章代码清单45
5.2 欢迎来到主引导扇区45
5.3 注释46
5.4 在屏幕上显示文字46
5.4.1 显卡和显存46
5.4.2 初始化段寄存器49
5.4.3 显存的访问和ASCII代码49
5.4.4 显示字符51
5.4.5 MOV指令的格式52
5.5 显示标号的汇编地址54
5.5.1 标号54
5.5.2 如何显示十进制数字58
5.5.3 在程序中声明并初始化数据58
5.5.4 分解数的各个数位59
5.5.5 显示分解出来的各个数位63
5.6 使程序进入无限循环状态64
5.7 完成并编译主引导扇区代码66
5.7.1 主引导扇区有效标志66
5.7.2 代码的保存和编译67
5.8 加载和运行主引导扇区代码67
5.8.1 把编译后的指令写入主引导扇区67
5.8.2 启动虚拟机观察运行结果68
5.9 程序的调试技术68
5.9.1 开源的Bochs虚拟机软件68
5.9.2 Bochs下的程序调试入门69
本章习题75
第6章 相同的功能,不同的代码76
6.1 代码清单6-176
6.2 跳过非指令的数据区76
6.3 在数据声明中使用字面值77
6.4 段地址的初始化77
6.5 段之间的批量数据传送78
6.6 使用循环分解数位80
6.7 计算机中的负数81
6.7.1 无符号数和有符号数81
6.7.2 处理器视角中的数据类型85
6.8 数位的显示87
6.9 其他标志位和条件转移指令88
6.9.1 奇偶标志位PF88
6.9.2 进位标志CF89
6.9.3 溢出标志OF89
6.9.4 现有指令对标志位的影响90
6.9.5 条件转移指令90
6.10 NASM编译器的$和$$标记92
6.11 观察运行结果93
6.12 本章程序的调试93
6.12.1 调试命令“n”的使用93
6.12.2 调试命令“u”的使用94
6.12.3 用调试命令“info”察看标志位96
本章习题97
第7章 比高斯更快的计算98
7.1 从1加到100的故事98
7.2 代码清单7-198
7.3 显示字符串98
7.4 计算1到100的累加和99
7.5 累加和各个数位的分解与显示99
7.5.1 栈和栈段的初始化99
7.5.2 分解各个数位并压栈101
7.5.3 出栈并显示各个数位103
7.5.4 进一步认识栈104
7.6 程序的编译和运行105
7.6.1 观察程序的运行结果105
7.6.2 在调试过程中察看栈中内容106
7.7 8086处理器的寻址方式107
7.7.1 寄存器寻址107
7.7.2 立即寻址107
7.7.3 内存寻址108
本章习题112
第8章 硬盘和显卡的访问与控制113
8.1 本章代码清单114
8.2 用户程序的结构114
8.2.1 分段、段的汇编地址和段内汇编地址114
8.2.2 用户程序头部117
8.3 加载程序(器)的工作流程120
8.3.1 初始化和决定加载位置120
8.3.2 准备加载用户程序121
8.3.3 外围设备及其接口122
8.3.4 I/O端口和端口访问123
8.3.5 通过硬盘控制器端口读扇区数据125
8.3.6 过程调用127
8.3.7 加载用户程序133
8.3.8 用户程序重定位134
8.3.9 将控制权交给用户程序137
8.3.10 8086处理器的无条件转移指令138
8.4 用户程序的工作流程140
8.4.1 初始化段寄存器和栈切换140
8.4.2 调用字符串显示例程141
8.4.3 过程的嵌套142
8.4.4 屏幕光标控制142
8.4.5 取当前光标位置143
8.4.6 处理回车和换行字符144
8.4.7 显示可打印字符145
8.4.8 滚动屏幕内容145
8.4.9 重置光标146
8.4.10 切换到另一个代码段中执行146
8.4.11 访问另一个数据段147
8.5 编译和运行程序并观察结果147
本章习题148
第9章 中断和动态时钟显示149
9.1 外部硬件中断149
9.1.1 非屏蔽中断150
9.1.2 可屏蔽中断150
9.1.3 实模式下的中断向量表152
9.1.4 实时时钟、CMOS RAM和BCD编码154
9.1.5 代码清单9-1157
9.1.6 初始化8259、RTC和中断向量表157
9.1.7 使处理器进入低功耗状态159
9.1.8 实时时钟中断的处理过程160
9.1.9 代码清单9-1的编译和运行162
9.2 内部中断163
9.3 软中断163
9.3.1 BIOS中断163
9.3.2 代码清单9-2165
9.3.3 从键盘读字符并显示165
9.3.4 代码清单9-2的编译和运行165
本章习题166
第3部分 32位保护模式169
第10章 32位x86处理器编程架构169
10.1 IA-32架构的基本执行环境169
10.1.1 寄存器的扩展169
10.1.2 基本的工作模式172
10.1.3 线性地址173
10.2 现代处理器的结构和特点174
10.2.1 流水线174
10.2.2 高速缓存175
10.2.3 乱序执行175
10.2.4 寄存器重命名176
10.2.5 分支目标预测177
10.3 32位模式的指令系统178
10.3.1 32位处理器的寻址方式178
10.3.2 操作数大小的指令前缀179
10.3.3 一般指令的扩展181
本章习题184
第11章 进入保护模式185
11.1 代码清单11-1185
11.2 全局描述符表186
11.3 存储器的段描述符187
11.4 安装存储器的段描述符并加载GDTR191
11.5 关于第21条地址线A20的问题193
11.6 保护模式下的内存访问195
11.7 清空流水线并串行化处理器199
11.8 保护模式下的栈200
11.8.1 关于栈段描述符中的界限值200
11.8.2 检验32位下的栈操作201
11.9 程序的运行和调试202
11.9.1 运行程序并观察结果202
11.9.2 处理器刚加电时的段寄存器状态203
11.9.3 设置PE位后的段寄存器状态205
11.9.4 JMP指令执行后的段寄存器状态205
11.9.5 察看全局描述符表GDT206
11.9.6 察看控制寄存器的内容207
本章习题207
第12章 存储器的保护208
12.1 代码清单12-1208
12.2 进入32位保护模式208
12.2.1 话说mov ds,ax和mov ds,eax208
12.2.2 创建GDT并安装段描述符209
12.3 修改段寄存器时的保护211
12.4 地址变换时的保护213
12.4.1 代码段执行时的保护213
12.4.2 栈操作时的保护214
12.4.3 数据访问时的保护216
12.5 使用别名访问代码段对字符排序217
12.6 程序的编译和运行219
本章习题220
第13章 程序的动态加载和执行221
13.1 本章代码清单222
13.2 内核的结构、功能和加载222
13.2.1 内核的结构222
13.2.2 内核的加载223
13.2.3 安装内核的段描述符225
13.3 在内核中执行229
13.4 用户程序的加载和重定位230
13.4.1 用户程序的结构230
13.4.2 计算用户程序占用的扇区数232
13.4.3 简单的动态内存分配233
13.4.4 段的重定位和描述符的创建234
13.4.5 重定位用户程序内的符号地址238
13.5 执行用户程序242
13.6 代码的编译、运行和调试243
本章习题244
第14章 任务和特权级保护245
14.1 任务的隔离和特权级保护246
14.1.1 任务、任务的LDT和TSS246
14.1.2 全局空间和局部空间248
14.1.3 特权级保护概述250
14.2 代码清单14-1257
14.3 内核程序的初始化257
14.3.1 调用门258
14.3.2 调用门的安装和测试261
14.4 加载用户程序并创建任务264
14.4.1 任务控制块和TCB链264
14.4.2 使用栈传递过程参数266
14.4.3 加载用户程序268
14.4.4 创建局部描述符表269
14.4.5 重定位U-SALT表270
14.4.6 创建0、1和2特权级的栈271
14.4.7 安装LDT描述符到GDT中271
14.4.8 任务状态段TSS的格式272
14.4.9 创建任务状态段TSS276
14.4.10 安装TSS描述符到GDT中276
14.4.11 带参数的过程返回指令277
14.5 用户程序的执行278
14.5.1 通过调用门转移控制的完整过程278
14.5.2 进入3特权级的用户程序的执行281
14.5.3 检查调用者的请求特权级RPL284
14.5.4 在Bochs中调试程序的新方法286
本章习题286
第15章 任务切换287
15.1 本章代码清单287
15.2 任务切换前的设置287
15.3 任务切换的方法289
15.4 用call/jmp/iret指令发起任务切换的实例292
15.5 处理器在实施任务切换时的操作296
15.6 程序的编译和运行298
本章习题299
第16章 分页机制和动态页面分配300
16.1 分页机制概述301
16.1.1 简单的分页模型301
16.1.2 页目录、页表和页305
16.1.3 地址变换的具体过程307
16.2 本章代码清单308
16.3 使内核在分页机制下工作309
16.3.1 创建内核的页目录表和页表309
16.3.2 任务全局空间和局部空间的页面映射314
16.4 创建内核任务319
16.4.1 内核的虚拟内存分配319
16.4.2 页面位映射串和空闲页的查找320
16.4.3 创建页表并登记分配的页323
16.4.4 创建内核任务的TSS324
16.5 用户任务的创建和切换325
16.5.1 多段模型和段页式内存管理325
16.5.2 平坦模型和用户程序的结构327
16.5.3 用户任务的虚拟地址空间分配328
16.5.4 用户程序的加载329
16.5.5 段描述符的创建(平坦模型)332
16.5.6 重定位U-SALT并复制页目录表333
16.5.7 切换到用户任务执行334
16.6 程序的编译、执行和调试336
16.6.1 本章程序的编译和运行方法336
16.6.2 察看CR3寄存器的内容337
16.6.3 察看线性地址对应的物理页信息337
16.6.4 察看当前任务的页表信息338
16.6.5 使用线性(虚拟)地址调试程序339
本章习题339
第17章 中断和异常的处理与抢占式多任务340
17.1 中断和异常340
17.1.1 中断和异常概述340
17.1.2 中断描述符表、中断门和陷阱门343
17.1.3 中断和异常处理程序的保护345
17.1.4 中断任务347
17.1.5 错误代码348
17.2 本章代码清单349
17.3 内核的加载和初始化349
17.3.1 彻底终结多段模型349
17.3.2 创建中断描述符表352
17.3.3 用定时中断实施任务切换354
17.3.4 8259A芯片的初始化359
17.3.5 平坦模型下的字符串显示例程362
17.4 内核任务的创建362
17.4.1 创建内核任务的TCB362
17.4.2 宏汇编技术364
17.5 用户任务的创建366
17.5.1 准备加载用户程序366
17.5.2 转换后援缓冲器的刷新367
17.5.3 用户任务的创建和初始化368
17.6 程序的编译和执行370
本章习题371
附录Ⅰ 本书用到的x86指令及其页码372
附录Ⅱ 本书用到的重要图表及其页码374
热门推荐
- 904684.html
- 1995521.html
- 3595182.html
- 2920238.html
- 3496097.html
- 357767.html
- 1072684.html
- 2125237.html
- 3527452.html
- 1404673.html
- http://www.ickdjs.cc/book_2793308.html
- http://www.ickdjs.cc/book_2478357.html
- http://www.ickdjs.cc/book_3712216.html
- http://www.ickdjs.cc/book_38451.html
- http://www.ickdjs.cc/book_2274404.html
- http://www.ickdjs.cc/book_1321883.html
- http://www.ickdjs.cc/book_158499.html
- http://www.ickdjs.cc/book_2654533.html
- http://www.ickdjs.cc/book_3009994.html
- http://www.ickdjs.cc/book_616840.html