内容简介 · · · · · ·
每一种处理器都有它自己的机器指令集,而汇编语言的发明则是为了方便这些机器指令的记忆和书写。尽管汇编语言已经较少用于大型软件程序的开发,但从学习者的角度来看,要想真正理解计算机的工作原理,掌握它内部的运行机制,学习汇编语言是必不可少的。
本书采用开源的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版)"的人也喜欢的电子书 · · · · · ·
支持 Web、iPhone、iPad、Android 阅读器
喜欢读"x86汇编语言 (第2版)"的人也喜欢 · · · · · ·
-
- 数据库系统概念 (原书第7版) 9.7
-
- 软件调试 第2版 卷2 9.2
-
- CPU设计实战 9.3
-
- 操作系统原理、实现与实践 9.4
-
- CPython设计与实现 7.6
-
- 用Go语言自制编译器 9.0
-
- 计算机底层的秘密 8.6
-
- Rust程序设计 (第2版) 9.2
-
- 深入理解Linux进程与内存 8.1
x86汇编语言 (第2版)的书评 · · · · · · ( 全部 9 条 )
其实是本写操作系统的书
没想到写长评的人如此之少。 我是买的二手,很便宜,现在书可是越来越贵了,也只能买买二手。书里后半部分基本没有笔记,可能原主看一半就弃了吧,正好我把半后部分给读完,完美。我是读完王爽老师的《汇编语言》直接读这本书的,于是此书前半部分,我基本是直接略过了,从第10章...
(展开)
最佳汇编语言入门书籍
相比于其他将汇编语言的书,这本书的优势在于两点:一、理论与实践的结合,实际动手编写汇编语言程序并在Bochs虚拟机上面运行观察程序的输出/效果;二、突出强调了汇编语言是底层硬件和操作系统的结合点,并介绍了中断、页表、进程切换等核心操作系统概念,为读者进一步学习并...
(展开)
学汇编语言,究竟应该学些什么?
据我的观察,很多人掌握了若干计算机指令,会编写一个从键盘输入数据,然后进行加减乘除或者归类排序的程序后,就认为自己掌握了汇编语言。还有,直到现在,我还经常在网上看到学生们使用DOS中断编写程序,他们讨论的也大多是实模式,而非32位或64位保护模式。他们知道如何编译...
(展开)
作者虽然不善于讲解知识,但知识渊博、技术高超,4星。
后四分之一,读得很糙。 本书需要安装的 VirtualBox 和 Bochs 跟 王爽老师的《汇编语言》需要安装的 DOSBox 差不多。 作者后面写了一个微型操作系统内核,让人受益匪浅。 另外,读这本书的时候,不要过分拘泥于每一行代码。 缺点: 第一,把 "保护模式相关知识" 、 "汇编语言语...
(展开)
很好的讲述了 x86 体系的演化
为什么引入段寄存器? 1. 8086实模式下,16位寄存器不足以访问 1MB 的内存,因而采用 段+偏移地址 来访问 2. 方便程序重定位 为什么需要保护模式? 1. 避免应用程序使用内核段选择子来破坏系统 2. 多任务环境下,GDT+LDT 的搭配使任务既能调用内核代码,又能实现程序之间的彼此...
(展开)
> 更多书评 9篇
论坛 · · · · · ·
在这本书的论坛里发言以下书单推荐 · · · · · · ( 全部 )
- 计算机 (YASAY)
- 入门(by Chi & in Chi) (sinceever)
- 入门(rough) (sinceever)
- CS (缄默规则)
- 书单|编程 (Xianhui)
谁读这本书? · · · · · ·
二手市场
· · · · · ·
- 在豆瓣转让 有243人想读,手里有一本闲着?
订阅关于x86汇编语言 (第2版)的评论:
feed: rss 2.0

0 有用 dain 2025-08-04 16:25:34 江苏
没有读完,从第15章开始,难度曲线太陡峭了!
1 有用 楚门 2024-03-12 17:29:19
看的出来作者真的很想推荐他的《穿越计算机迷雾》这本书。
4 有用 攀岩人生 2023-09-12 13:56:31 湖北
后面难度跨度太大了,也不那么清楚,不过整体还是很推荐的
12 有用 黑黑 2023-12-27 17:26:38 浙江
我都不想推荐这本书,自己的小私心。这本书太好了,读完就是两字:通透。 李忠老师每章节知识点都是闭环的,一本书能带你粗略领略下os/链接器/用户程序加载流程/bootloader。另外,还能清楚的告诉你,在简单的每条汇编语言背后,保护模式下的CPU背着你偷摸干了哪些事情。 如果有一天程序出轨了,作为原配的你能清楚的通过汇编指令和寄存器信息得知问题根因所在。 李忠老师在书中提到自己95年买了一台700... 我都不想推荐这本书,自己的小私心。这本书太好了,读完就是两字:通透。 李忠老师每章节知识点都是闭环的,一本书能带你粗略领略下os/链接器/用户程序加载流程/bootloader。另外,还能清楚的告诉你,在简单的每条汇编语言背后,保护模式下的CPU背着你偷摸干了哪些事情。 如果有一天程序出轨了,作为原配的你能清楚的通过汇编指令和寄存器信息得知问题根因所在。 李忠老师在书中提到自己95年买了一台7000左右的16mb是电脑,一看就是老黑客了,高山仰止。 期待李忠老师的64位的汇编书! ps.后面有点难度,最好配合老师的课程一起完成。 (展开)
6 有用 LS_Hower 2023-03-03 21:23:53 河南
刚到手,是刚出炉的第 2 版。之前读了《穿越计算机的迷雾》(作者也是李忠),就觉得很有意思,让我已经迫不及待要开始读这本书啦。 2023-03-03 更新:读完了。正如一些长评所说的,这本书讲的东西更贴近硬件和操作系统。