加入VIP
x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf

编辑点评:x86汇编语言从实模式到保护模式完整版pdf

尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们格格不入。处理器的工作是执行指令并获得结果,而为了驾驭处理器,汇编语言为每一种指令提供了简单好记、易于书写的符号化表示形式。

x86汇编语言从实模式到保护模式完整版pdf

内容简介

《x86汇编语言:从实模式到保护模式》采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的Intel处理器为基础,详细讲解了Intel处理器的指令系统和工作模式,

以大量的代码演示了16/32/64位软件的开发方法,介绍了处理器的16位实模式和32位保护模式,以及基本的指令系统。

《x86汇编语言:从实模式到保护模式》是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬件,在不借助于BIOS、DOS、Windows、

Linux或者任何其他软件支持的情况下来显示字符、读取硬盘数据、控制其他硬件等。《x86汇编语言:从实模式到保护模式》可作为大专院校相关专业学生和计算机编程爱好者的教程。

相关内容部分预览

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(1)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(2)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(3)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(4)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(5)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(6)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(7)

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(8)

目录

第1部分 预备知识

第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 VM VirtualBox37

4.2.3 虚拟硬盘简介39

4.2.4 练习使用FixVhdWr工具向虚拟硬盘写数据40

第2部分 实模式

第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位保护模式

第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

读者评价

偶然的机会在书店读了这本书,以前读过王爽写的汇编语言,看到最后发现仅仅讲了实模式的汇编语言,而没有保护模式的汇编语言,觉得很遗憾,而其他的保护模式的书,说实话,我也看过,

但是实在是读不下去。而这本书的语言确实比较不错,读起来并不觉得枯燥,更重要的是。实验配置的很好,如果你想写一个小型的操作系统内核,这本书,再适合不过了,因为全书的实验就是在无操作系统的环境下讲解的,

从引到扇区开始讲解,最后到如何跳转到保护模式,并且作者自己编写了一个不叫内核的内核,用来加载用户的程序。

x86汇编语言从实模式到保护模式读后感

这书的优点如下:结构合理循序渐进,任务驱动不枯燥,不依赖操作系统,使用开源的NASM,每个章节都配备小练习。不过疯狂吐槽一下,纸张特别薄,能看到后面好几页的内容,在当当买的,感觉是TM盗版书。

而且出版重印这么多年了,书中的笔误仍在。。。比如检查点4.2的题目给出代码异常,无法制作引导扇区,最终上网上查阅相关内容,终于了解了引导扇区必须要使用0x55aa作为结束符。最后一个槽点,代码没有印在书上,

除非你对汇编已经了然于胸,否则看书的时候基本离不开电脑。不过了然于胸了,还看这种入门书干嘛

x86汇编语言从实模式到保护模式完整版pdf截图

x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(9)x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(10)x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(11)x86汇编语言从实模式到保护模式电子版下载-x86汇编语言从实模式到保护模式完整版pdf插图(12)

评分及评论

无用户评分

来评个分数吧

  • 5 分
    0
  • 4 分
    0
  • 3 分
    0
  • 2 分
    0
  • 1 分
    0

评论