内容简介 · · · · · ·
每一种处理器都有它自己的机器指令集,而汇编语言的发明则是为了方便这些机器指令的记忆和书写。尽管汇编语言已经较少用于大型软件程序的开发,但从学习者的角度来看,要想真正理解计算机的工作原理,掌握它内部的运行机制,学习汇编语言是必不可少的。
本书采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的Intel处理器为基础,详细讲解了Intel处理器的指令系统和工作模式。
作者简介 · · · · · ·
李忠,主要出版著作《穿越计算机的迷雾》《x86汇编语言:从实模式到保护模式》《穿越计算机的迷雾(第2版)》《C语言非常道》等。
目录 · · · · · ·
第2版前言
第1版前言
第一部分 预备知识
第1章 十六进制计数法
1.1 二进制计数法回顾
1.2 十六进制计数法
1.3 使用Windows计算器方便你的学习过程
本章习题
第2章 计算机和汇编语言
2.1 用电表示数字
2.2 二进制加法机
2.3 具有记忆功能的器件——寄存器
2.4 带寄存器的加法机
2.5 能做四则运算的机器
2.6 机器指令
2.7 内 存
2.8 自动计算
2.9 处理器
2.10 汇编语言的诞生
本章习题
第3章 分段机制和逻辑地址
3.1 寄存器和字长
3.2 内存访问和字节序
3.3 古老的INTEL 8086处理器
本章习题
第4章 汇编语言和汇编软件
4.1 汇编语言程序
4.2 NASM编译器
4.3 配书文件包的下载和使用
本章习题
第二部分 实模式
第5章 虚拟机的安装和使用
5.1 计算机的启动过程
5.2 创建和使用虚拟机
第6章 编写主引导扇区代码
6.1 本章代码清单
6.2 欢迎来到主引导扇区
6.3 注释
6.4 在屏幕上显示文字
6.5 显示标号的汇编地址
6.6 使程序进入无限循环状态
6.7 完成并编译主引导扇区代码
6.8 加载和运行主引导扇区代码
6.9 程序的调试技术
本章习题
第7章 相同的功能,不同的代码
7.1 代码清单7-1
7.2 跳过非指令的数据区
7.3 在数据声明中使用字面值
7.4 段地址的初始化
7.5 段之间的批量数据传送
7.6 使用循环分解数位
7.7 计算机中的负数
7.8 数位的显示
7.9 其他标志位和条件转移指令
7.10 NASM编译器的$和$$标记
7.11 观察运行结果
7.12 本章程序的调试
本章习题
第8章 比高斯更快的计算
8.1 从1加到100的故事
8.2 代码清单8-1
8.3 显示字符串
8.4 计算1到100的累加和
8.5 累加和各个数位的分解与显示
8.6 程序的编译和运行
8.7 8086处理器的寻址方式
本章习题
第9章 硬盘和显卡的访问与控制
9.1 本章代码清单
9.2 用户程序的结构
9.3 加载程序(器)的工作流程
9.4 用户程序的工作流程
9.5 编译和运行程序并观察结果
本章习题
第三部分 保护模式
第10章 中断和动态时钟显示
10.1 外部硬件中断
10.2 内部中断
10.3 软中断
本章习题
第11章 32位x86处理器编程架构
11.1 IA-32架构的基本执行环境
11.2 现代处理器的结构和特点
11.3 32位处理器的寻址方式
第12章 进入保护模式
12.1 代码清单12-1
12.2 全局描述符表
12.3 存储器的段描述符
12.4 安装存储器的段描述符并加载GDTR
12.5 关于第21条地址线A20的问题
12.6 保护模式下的内存访问
12.7 程序的运行和调试
本章习题
第13章 操作数和有效地址的尺寸
13.1 代码清单13-1
13.2 INTEL 80286处理器的16位保护模式
13.3 指令的操作尺寸
13.4 清空流水线并串行化处理器
13.5 有效地址尺寸和内存访问
13.6 一般指令在32位操作尺寸下的扩展
本章习题
第14章 存储器的保护
14.1 代码清单14-1
14.2 进入32位保护模式
14.3 修改段寄存器时的保护
14.4 地址变换时的保护
14.5 使用别名访问代码段对字符排序
14.6 程序的编译和运行
本章习题
第15章 程序的动态加载和执行
15.1 本章代码清单
15.2 内核的结构、功能和加载
15.3 在内核中执行
15.4 用户程序的加载和重定位
15.5 执行用户程序
15.6 代码的编译、运行和调试
本章习题
第16章 任务和特权级保护
16.1 任务的隔离和特权级保护
16.2 代码清单16-1
16.3 内核程序的初始化
16.4 加载用户程序并创建任务
16.5 用户程序的执行
本章习题
第17章 协同式任务切换
17.1 本章代码清单
17.2 任务切换前的设置
17.3 任务切换的方法
17.4 用jmp指令发起任务切换的实例
17.5 处理器在实施任务切换时的操作
17.6 程序的编译和运行
本章习题
第18章 中断和异常的处理与抢占式多任务
18.1 中断和异常
18.2 本章代码清单
18.3 内核的加载和初始化
18.4 内核任务的创建
18.5 用户任务的创建和执行
18.6 程序的编译和执行
本章习题
第19章 分页机制和动态页面分配
19.1 分页机制概述
19.2 本章代码清单
19.3 使内核在分页机制下工作
19.4 创建内核任务
19.5 用户任务的创建和切换
19.6 程序的编译、执行和调试
本章习题
第20章 平坦内存模型和软件任务切换
20.1 多段模型和平坦模型
20.2 本章代码清单
20.3 初始化系统并加载内核
20.4 内核的初始化
20.5 用户任务的创建
20.6 软件任务切换
20.7 内核任务的执行
20.8 用户任务的执行
本章习题
· · · · · · (收起)
第1版前言
第一部分 预备知识
第1章 十六进制计数法
1.1 二进制计数法回顾
1.2 十六进制计数法
1.3 使用Windows计算器方便你的学习过程
本章习题
第2章 计算机和汇编语言
2.1 用电表示数字
2.2 二进制加法机
2.3 具有记忆功能的器件——寄存器
2.4 带寄存器的加法机
2.5 能做四则运算的机器
2.6 机器指令
2.7 内 存
2.8 自动计算
2.9 处理器
2.10 汇编语言的诞生
本章习题
第3章 分段机制和逻辑地址
3.1 寄存器和字长
3.2 内存访问和字节序
3.3 古老的INTEL 8086处理器
本章习题
第4章 汇编语言和汇编软件
4.1 汇编语言程序
4.2 NASM编译器
4.3 配书文件包的下载和使用
本章习题
第二部分 实模式
第5章 虚拟机的安装和使用
5.1 计算机的启动过程
5.2 创建和使用虚拟机
第6章 编写主引导扇区代码
6.1 本章代码清单
6.2 欢迎来到主引导扇区
6.3 注释
6.4 在屏幕上显示文字
6.5 显示标号的汇编地址
6.6 使程序进入无限循环状态
6.7 完成并编译主引导扇区代码
6.8 加载和运行主引导扇区代码
6.9 程序的调试技术
本章习题
第7章 相同的功能,不同的代码
7.1 代码清单7-1
7.2 跳过非指令的数据区
7.3 在数据声明中使用字面值
7.4 段地址的初始化
7.5 段之间的批量数据传送
7.6 使用循环分解数位
7.7 计算机中的负数
7.8 数位的显示
7.9 其他标志位和条件转移指令
7.10 NASM编译器的$和$$标记
7.11 观察运行结果
7.12 本章程序的调试
本章习题
第8章 比高斯更快的计算
8.1 从1加到100的故事
8.2 代码清单8-1
8.3 显示字符串
8.4 计算1到100的累加和
8.5 累加和各个数位的分解与显示
8.6 程序的编译和运行
8.7 8086处理器的寻址方式
本章习题
第9章 硬盘和显卡的访问与控制
9.1 本章代码清单
9.2 用户程序的结构
9.3 加载程序(器)的工作流程
9.4 用户程序的工作流程
9.5 编译和运行程序并观察结果
本章习题
第三部分 保护模式
第10章 中断和动态时钟显示
10.1 外部硬件中断
10.2 内部中断
10.3 软中断
本章习题
第11章 32位x86处理器编程架构
11.1 IA-32架构的基本执行环境
11.2 现代处理器的结构和特点
11.3 32位处理器的寻址方式
第12章 进入保护模式
12.1 代码清单12-1
12.2 全局描述符表
12.3 存储器的段描述符
12.4 安装存储器的段描述符并加载GDTR
12.5 关于第21条地址线A20的问题
12.6 保护模式下的内存访问
12.7 程序的运行和调试
本章习题
第13章 操作数和有效地址的尺寸
13.1 代码清单13-1
13.2 INTEL 80286处理器的16位保护模式
13.3 指令的操作尺寸
13.4 清空流水线并串行化处理器
13.5 有效地址尺寸和内存访问
13.6 一般指令在32位操作尺寸下的扩展
本章习题
第14章 存储器的保护
14.1 代码清单14-1
14.2 进入32位保护模式
14.3 修改段寄存器时的保护
14.4 地址变换时的保护
14.5 使用别名访问代码段对字符排序
14.6 程序的编译和运行
本章习题
第15章 程序的动态加载和执行
15.1 本章代码清单
15.2 内核的结构、功能和加载
15.3 在内核中执行
15.4 用户程序的加载和重定位
15.5 执行用户程序
15.6 代码的编译、运行和调试
本章习题
第16章 任务和特权级保护
16.1 任务的隔离和特权级保护
16.2 代码清单16-1
16.3 内核程序的初始化
16.4 加载用户程序并创建任务
16.5 用户程序的执行
本章习题
第17章 协同式任务切换
17.1 本章代码清单
17.2 任务切换前的设置
17.3 任务切换的方法
17.4 用jmp指令发起任务切换的实例
17.5 处理器在实施任务切换时的操作
17.6 程序的编译和运行
本章习题
第18章 中断和异常的处理与抢占式多任务
18.1 中断和异常
18.2 本章代码清单
18.3 内核的加载和初始化
18.4 内核任务的创建
18.5 用户任务的创建和执行
18.6 程序的编译和执行
本章习题
第19章 分页机制和动态页面分配
19.1 分页机制概述
19.2 本章代码清单
19.3 使内核在分页机制下工作
19.4 创建内核任务
19.5 用户任务的创建和切换
19.6 程序的编译、执行和调试
本章习题
第20章 平坦内存模型和软件任务切换
20.1 多段模型和平坦模型
20.2 本章代码清单
20.3 初始化系统并加载内核
20.4 内核的初始化
20.5 用户任务的创建
20.6 软件任务切换
20.7 内核任务的执行
20.8 用户任务的执行
本章习题
· · · · · · (收起)
喜欢读"x86汇编语言 (第2版)"的人也喜欢 · · · · · ·
x86汇编语言 (第2版)的书评 · · · · · · ( 全部 8 条 )

其实是本写操作系统的书
没想到写长评的人如此之少。 我是买的二手,很便宜,现在书可是越来越贵了,也只能买买二手。书里后半部分基本没有笔记,可能原主看一半就弃了吧,正好我把半后部分给读完,完美。我是读完王爽老师的《汇编语言》直接读这本书的,于是此书前半部分,我基本是直接略过了,从第10章...
(展开)

最佳汇编语言入门书籍
相比于其他将汇编语言的书,这本书的优势在于两点:一、理论与实践的结合,实际动手编写汇编语言程序并在Bochs虚拟机上面运行观察程序的输出/效果;二、突出强调了汇编语言是底层硬件和操作系统的结合点,并介绍了中断、页表、进程切换等核心操作系统概念,为读者进一步学习并...
(展开)

学汇编语言,究竟应该学些什么?
据我的观察,很多人掌握了若干计算机指令,会编写一个从键盘输入数据,然后进行加减乘除或者归类排序的程序后,就认为自己掌握了汇编语言。还有,直到现在,我还经常在网上看到学生们使用DOS中断编写程序,他们讨论的也大多是实模式,而非32位或64位保护模式。他们知道如何编译...
(展开)

学习x86架构保护模式的好书
这篇书评可能有关键情节透露
整体给8分。 读过该书的第一和第二版。总体来说,是把x86架构从实模式引导一直到进入保护模式的过程讲的比较清晰,并且把分段、分页、权限这些内容有涉及。如果做x86系统编程,或者操作系统这块的工作,该书很值得阅读。 再说一下值得改进的地方(以第二版为基准): 1. 关于从... (展开)
很好的讲述了 x86 体系的演化
为什么引入段寄存器? 1. 8086实模式下,16位寄存器不足以访问 1MB 的内存,因而采用 段+偏移地址 来访问 2. 方便程序重定位 为什么需要保护模式? 1. 避免应用程序使用内核段选择子来破坏系统 2. 多任务环境下,GDT+LDT 的搭配使任务既能调用内核代码,又能实现程序之间的彼此...
(展开)
> 更多书评 8篇
论坛 · · · · · ·
在这本书的论坛里发言以下书单推荐 · · · · · · ( 全部 )
- 计算机 (YASAY)
- 入门(by Chi & in Chi) (sinceever)
- 入门(rough) (sinceever)
- CS (缄默规则)
- 书单|编程 (Xianhui)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有206人想读,手里有一本闲着?
订阅关于x86汇编语言 (第2版)的评论:
feed: rss 2.0
11 有用 黑黑 2023-12-27 17:26:38 浙江
我都不想推荐这本书,自己的小私心。这本书太好了,读完就是两字:通透。 李忠老师每章节知识点都是闭环的,一本书能带你粗略领略下os/链接器/用户程序加载流程/bootloader。另外,还能清楚的告诉你,在简单的每条汇编语言背后,保护模式下的CPU背着你偷摸干了哪些事情。 如果有一天程序出轨了,作为原配的你能清楚的通过汇编指令和寄存器信息得知问题根因所在。 李忠老师在书中提到自己95年买了一台700... 我都不想推荐这本书,自己的小私心。这本书太好了,读完就是两字:通透。 李忠老师每章节知识点都是闭环的,一本书能带你粗略领略下os/链接器/用户程序加载流程/bootloader。另外,还能清楚的告诉你,在简单的每条汇编语言背后,保护模式下的CPU背着你偷摸干了哪些事情。 如果有一天程序出轨了,作为原配的你能清楚的通过汇编指令和寄存器信息得知问题根因所在。 李忠老师在书中提到自己95年买了一台7000左右的16mb是电脑,一看就是老黑客了,高山仰止。 期待李忠老师的64位的汇编书! ps.后面有点难度,最好配合老师的课程一起完成。 (展开)
2 有用 五十梦幻 2024-06-10 16:21:04 北京
本书结合汇编源代码讲述了 x86 的 32 为保护模式的工作的各种细节。
4 有用 攀岩人生 2023-09-12 13:56:31 湖北
后面难度跨度太大了,也不那么清楚,不过整体还是很推荐的
1 有用 cxym 2024-07-27 21:51:47 辽宁
不怕你骄傲,期待arm版的书
3 有用 乱卷书生 2024-05-02 21:34:04 海南
国内不可多得的良心教材!表面上是在讲汇编,实则实现了一个微型OS内核,引出概念的同时对源码进行了细致入微的讲解,引人入胜到像在读一本小说,足以见作者对于内容安排、表达方式和知识屏蔽等方面的良苦用心。读这类技术书要有抓大放小的能力,不然容易迷失在细节里不见森林,比如18章里8259A芯片大部分内容可以略过,而对于一些重要例程如19章的task_alloc_memory,在跟着书过完一遍后要回想一下其... 国内不可多得的良心教材!表面上是在讲汇编,实则实现了一个微型OS内核,引出概念的同时对源码进行了细致入微的讲解,引人入胜到像在读一本小说,足以见作者对于内容安排、表达方式和知识屏蔽等方面的良苦用心。读这类技术书要有抓大放小的能力,不然容易迷失在细节里不见森林,比如18章里8259A芯片大部分内容可以略过,而对于一些重要例程如19章的task_alloc_memory,在跟着书过完一遍后要回想一下其大致过程,关键点是什么。适当的忽略细节更容易在保持阅读流畅性的状态下把握全书重点和脉络。 遗憾的是本书的整体内容还不够modern,期待作者下一本书对X64多处理器多线程OS的实现。 (展开)