
网易云 - x64汇编语言:从实模式到保护模式
来自 网络整理·免费领取学习资源
7,699 领取 · 7,701 收藏更新于 2026年9月20日
这份资料来自网络整理2026年的付费VIP课,内容以视频为主,对应《网易云 - x64汇编语言:从实模式到保护模式》。官网需要单独购买,有集上可以免费领取。
课程目录
- {01}–课程说明
- [1.1]–课程说明
- {02}–汇编语言的前世今生
- [2.10]–处理器
- [2.11]–汇编语言的诞生
- [2.1]–引子
- [2.2]–用电来表示数字
- [2.3]–二进制加法机
- [2.4]–具有记忆功能的器件——寄存器
- [2.5]–带寄存器的加法机
- [2.6]–能做四则运算的机器
- [2.7]–机器指令
- [2.8]–内存
- [2.9]–自动计算
- {03}–认识8086处理器
- [3.1]–8086的通用寄存器
- [3.2]–8086的内存访问和字节序
- [3.3]–程序的分段
- [3.4]–程序的重定位难题
- [3.5]–段地址和偏移地址
- [3.6]–8086内存访问的困境
- [3.7]–8086选择段地址的策略
- [3.8]–8086的内存访问过程
- [3.9]–逻辑地址和分段的灵活性
- {04}–原书第1版第2章检测点和习题解析
- [4.1]–原书第1版第2章检测点和习题解析
- {05}–汇编语言和汇编软件
- [5.1]–创建汇编语言源程序
- [5.2]–Notepad的下载和使用
- [5.3]–下载和安装编译器NASM
- [5.4]–编译汇编语言源程序
- [5.5]–下载和使用配套源码及工具
- [5.6]–将编译功能集成到Notepad
- {06}–原书第1版第3章检测点和习题解析
- [6.1]–原书第1版第3章检测点和习题解析
- {07}–如何执行编译好的程序
- [7.1]–8086加电或者复位时的状态
- [7.2]–8086地址空间的分配
- [7.3]–跳转指令
- [7.4]–硬盘的构造和工作原理
- [7.5]–一切从主引导扇区开始
- {08}–虚拟机的安装和使用
- [8.1]–安装VirtualBox虚拟机管理器
- [8.2]–创建VirtualBox虚拟机
- [8.3]–虚拟硬盘简介
- [8.4]–在Windows下创建虚拟硬盘并安装操作系统
- [8.5]–在Linux下创建虚拟硬盘并安装操作系统
- {09}–汇编语言程序的调试
- [9.1]–带调试功能的虚拟机
- [9.2]–安装Bochs虚拟机
- [9.3]–为Bochs虚拟机安装虚拟硬盘
- [9.4]–创建主引导扇区程序
- [9.5]–将程序写入硬盘主引导扇区
- [9.6]–用调试器观察程序的执行
- {10}–原书第1版第4章检测点和习题解析
- [10.1]–原书第1版第4章检测点和习题解析
- {11}–在屏幕上显示文本
- [11.10]–在VirtualBox中运行写屏程序
- [11.11]–主引导扇区执行时的内存布局
- [11.12]–使用标号计算跳转的偏移地址
- [11.13]–使用寄存器的绝对间接近跳转
- [11.14]–使用相对偏移量的短跳转和近跳转
- [11.1]–显卡和显存
- [11.2]–准备访问文本模式下的显存
- [11.3]–字符的编码和显示属性
- [11.4]–文本模式下的显存操作
- [11.5]–MOV指令的形式和机器码
- [11.6]–列表文件的创建和使用
- [11.7]–在汇编程序中使用标号
- [11.8]–段间直接绝对跳转指令
- [11.9]–在Bochs中运行和调试写屏程序
- {12}–在屏幕上显示数字
- [12.1]–显示数字的基本原理
- [12.2]–无符号数除法指令div
- [12.3]–在调试器里验证除法操作
- [12.4]–异或指令xor的用法
- [12.5]–加法指令add的用法
- [12.6]–使用标号访问内存数据
- [12.7]–段超越前缀的使用
- [12.8]–显示标号的汇编地址
- {13}–阶段性重点内容总结
- [13.1]–阶段性重点内容总结
- [13.2]–原书第1版第5章检测点和习题解析
- {14}–循环、批量传送和条件转移
- [14.1]–跳过非指令的数据区
- [14.2]–逻辑段地址的重新设定
- [14.3]–串传送指令和标志寄存器
- [14.4]–NASM的和$记号
- [14.5]–使用循环指令LOOP分解数位
- [14.6]–基址寻址和INC指令
- [14.7]–数字的显示和DEC指令
- [14.8]–基址变址寻址和条件转移指令
- {15}–计算机中的负数
- [15.1]–无符号数和有符号数
- [15.2]–减法指令SUB和求补指令NEG
- [15.3]–计算机如何区分对待无符号数和有符号数
- [15.4]–有符号数除法指令IDIV
- [15.5]–有符号数的符号扩展指令
- {16}–阶段性知识总结和拓展
- [16.1]–8086的标志寄存器
- [16.2]–条件转移指令和CMP指令
- [16.3]–原书第1版第6章检测点和习题解析
- {17}–从1加到100并显示结果
- [17.1]–字符串的定义和累加过程
- [17.2]–栈的原理和使用
- [17.3]–栈在数位分解和显示中的应用
- [17.4]–在调试器里观察栈操作的状态
- [17.5]–进一步认识栈和栈操作的特点
- [17.6]–逻辑或指令OR和逻辑与指令AND
- {18}–INTEL8086处理器的寻址方式
- [18.1]–寄存器、立即数和直接寻址
- [18.2]–基址寻址
- [18.3]–变址寻址
- [18.4]–基址变址寻址
- [18.5]–原书第1版第7章检测点和习题解析
- {19}–硬盘和显卡的访问与控制
- [19.10]–过程和过程调用
- [19.11]–过程调用和返回的原理
- [19.12]–加载整个用户程序
- [19.13]–用户程序的重定位
- [19.14]–比特位的移动指令
- [19.15]–转到用户程序内部执行
- [19.16]–8086的无条件转移指令
- [19.17]–用户程序的执行过程
- [19.18]–验证加载器加载和执行用户程序的过程
- [19.19]–书中第八章用户程序概述
- [19.1]–离开主引导扇区
- [19.20]–与文本显示有关的回车、换行与光标控制
- [19.21]–回车的光标处理和乘法指令MUL
- [19.22]–换行和普通字符的处理过程与滚屏操作
- [19.23]–8086的过程调用方式
- [19.24]–通过RETF指令转到另一个代码段内执行
- [19.25]–在程序中访问不同的数据段
- [19.26]–使用新版FixVhdWr写虚拟硬盘并运行程序
- [19.27]–原书第一版第8章习题解析解答
- [19.2]–给汇编语言程序分段
- [19.3]–控制段内元素的汇编地址
- [19.4]–加载器和用户程序头部段
- [19.5]–加载器的工作流程和常数声明
- [19.6]–确定用户程序的加载位置
- [19.7]–外围设备及其接口
- [19.8]–输入输出端口的访问
- [19.9]–通过硬盘控制器端口读扇区数据
- {20}–中断和动态时钟显示
- [20.10]–用NOT指令反转时间分隔符的颜色
- [20.11]–使用IRET指令从中断过程返回
- [20.12]–用停机指令HLT使处理器进入低功耗状态
- [20.13]–内部中断和软中断
- [20.14]–BIOS中断概述
- [20.15]–使用BIOS功能调用接收并显示键盘输入
- [20.16]–原书第9章检测点和习题解析
- [20.1]–中断和硬件中断
- [20.2]–中断控制器简介
- [20.3]–中断号、中断处理过程和中断向量表
- [20.4]–实时时钟、CMOSRAM和BCD编码
- [20.5]–实时时钟芯片的中断信号
- [20.6]–安装0x70号中断处理过程
- [20.7]–启用更新周期结束中断
- [20.8]–用TEST指令等待更新周期结束
- [20.9]–读取BCD码的时间并在屏幕上显示
- {21}–32位x86处理器编程架构
- [21.1]–IA-32架构和保护模式
- [21.2]–寄存器的扩展和扩充
- [21.3]–32位处理器的内存访问概况
- [21.4]–32位处理器的寻址方式概况
- [21.5]–选修-流水线技术
- [21.6]–选修-高速缓存技术
- [21.7]–选修-乱序执行技术
- [21.8]–选修-寄存器重命名技术
- [21.9]–选修-分支目标预测技术
- {22}–进入保护模式
- [22.10]–通过设置寄存器CR0的PE位进入保护模式
- [22.11]–描述符高速缓存器和保护模式下的内存访问
- [22.12]–在调试器中观察实模式和保护模式的内存访问
- [22.1]–保护模式是要保护什么
- [22.2]–全局描述符表GDT和全局描述符表寄存器GDTR
- [22.3]–准备创建全局描述符表
- [22.4]–描述符的分类
- [22.5]–存储器的段描述符-段的类型和基地址
- [22.6]–存储器的段描述符-段界限及访问控制位
- [22.7]–安装存储器的段描述符
- [22.8]–加载全局描述符表寄存器GDTR
- [22.9]–开启处理器的第21根地址线A20
- {23}–指令的格式及其操作尺寸
- [23.10]–描述符和段描述符高速缓存器的D位
- [23.11]–进入保护模式后立即切换到32位模块并使用32位默认操作尺寸
- [23.1]–80286的16位保护模式
- [23.2]–16位处理器的指令操作尺寸
- [23.3]–32位处理器的指令操作尺寸
- [23.4]–x86的指令格式-操作码和立即数部分
- [23.5]–x86的指令格式-ModRM和偏移量部分
- [23.6]–x86的指令格式-SIB部分
- [23.7]–x86的指令格式-指令前缀部分
- [23.8]–处理器的默认操作尺寸和相关指令前缀
- [23.9]–用伪指令bits生成16位和32位模块
- {24}–存储器的保护
- [24.10]–通过别名来实现段的共用和共享
- [24.11]–冒泡排序法的基本原理
- [24.12]–32位操作尺寸下的LOOP指令
- [24.13]–数据交换指令XCHG
- [24.1]–话说MOVDS,AX和MOVDS,EAX
- [24.2]–修改段寄存器时的保护
- [24.3]–代码段执行时的保护
- [24.4]–用向上扩展的段做为栈段
- [24.5]–向上扩展的段用做栈段时的保护
- [24.6]–访问普通数据段时的保护
- [24.7]–内存线性地址的回绕特性
- [24.8]–用向下扩展的段做为栈段
- [24.9]–向下扩展的段用做栈段时的保护
- {25}–保护模式程序的动态加载和执行
- [25.10]–条件传送指令簇CMOVcc
- [25.11]–计算以512字节为单位的用户程序总长度
- [25.12]–内存分配的基本策略和方法
- [25.13]–内存分配的简易实现过程
- [25.14]–加载用户程序
- [25.15]–准备安装用户程序的段描述符
- [25.16]–用SGDT和MOVZX指令确定GDT的位置
- [25.17]–安装新描述符并生成选择子
- [25.18]–安装用户程序的段描述符并回填选择子
- [25.19]–用户程序的执行和退出
- [25.1]–本章的目标和内容提要
- [25.20]–在虚拟机上观察内核的加载以及用户程序的执行与退出
- [25.2]–内核的结构和加载前的准备工作
- [25.3]–准备为内核的每个段创建和安装描述符
- [25.4]–段描述符的创建和BSWAP指令
- [25.5]–进入内核执行
- [25.6]–进入内核后显示文本信息
- [25.7]–用CPUID指令取得处理器品牌信息并显示
- [25.8]–准备加载用户程序
- [25.9]–预读用户程序并得到它的大小
- {26}–用户程序编程接口及其实现
- [26.10]–在虚拟机上验证程序的执行
- [26.11]–以十六进制形式显示一个双字以及PUSHAD、POPAD和XLAT
- [26.1]–内核与用户程序之间的栈切换问题
- [26.2]–在内核中为用户程序提供编程支持
- [26.3]–用户程序中的符号地址检索表
- [26.4]–内核程序中的符号地址检索表
- [26.5]–串比较指令CMPS
- [26.6]–串比较的方向和重复前缀
- [26.7]–使用外循环依次取得用户SALT表的每个条目
- [26.8]–使用内循环依次取得内核SALT表的每个条目并进行比较
- [26.9]–在用户程序内使用内核编程接口读硬盘和显示文本
- {27}–任务和任务的创建
- [27.10]–TSS描述符的格式和TSS描述符的创建
- [27.11]–用带参数的RET指令返回调用者
- [27.12]–加载任务寄存器TR和局部描述符表寄存器LDTR
- [27.13]–在虚拟机上验证任务的执行
- [27.1]–任务:概念和组成
- [27.2]–使用任务控制块保存任务基本信息
- [27.3]–将任务控制块加入任务控制块链表
- [27.4]–通过栈传递例程参数以及立即数的压栈指令
- [27.5]–段寄存器的压栈和出栈以及栈的随机访问机制
- [27.6]–创建任务的局部描述符表LDT
- [27.7]–在当前任务的LDT中安装描述符
- [27.8]–LDT描述符的格式和LDT描述符的创建
- [27.9]–创建任务状态段TSS
- {28}–特权级和特权级保护
- [28.10]–一般情况下的请求特权级设置
- [28.11]–为内核接口例程创建调用门
- [28.12]–调用门的测试和调用门转移过程
- [28.13]–通过调用门实施低特权级到高特权级的转移
- [28.14]–通过调用门转移控制时的栈切换过程
- [28.15]–通过调用门转移控制并返回的完整描述
- [28.16]–创建0、1和2特权级的栈并登记在TSS中
- [28.17]–通过模拟调用门返回进入用户程序执行
- [28.1]–特权级保护的必要性和特权保护机制
- [28.2]–当前特权级CPL
- [28.3]–描述符特权级DPL
- [28.4]–任务公共部分和私有部分的特权级划分
- [28.5]–依从的代码段
- [28.6]–门描述符和调用门
- [28.7]–本章程序说明及特权级检查的时机
- [28.8]–请求特权级RPL
- [28.9]–请求特权级调整指令ARPL
- {29}–协同式任务切换
- [29.10]–通过JMPFAR执行任务切换的过程
- [29.11]–内核任务与用户任务轮流执行的过程
- [29.12]–任务的终止和清理
- [29.1]–多任务和任务切换概述
- [29.2]–内核任务的创建和I/O特权级IOPL
- [29.3]–I/O特权级的修改和POPF指令
- [29.4]–任务的用户态和内核态
- [29.5]–I/O许可位串和TSS的I/O许可位映射区
- [29.6]–任务切换的方法及内核任务的确立
- [29.7]–用户任务的创建和初始化
- [29.8]–简单的任务调度和切换策略
- [29.9]–遍历TCB链表寻找忙任务和就绪任务
- {30}–中断和异常的处理与抢占式多任务
- [30.10]–中断和异常发生时的栈切换过程
- [30.11]–在中断处理过程中实施任务切换(含NOP指令的介绍)
- [30.12]–抢占式多任务的执行效果演示
- [30.1]–中断和异常概述
- [30.2]–保护模式下中断和异常的向量分配
- [30.3]–中断描述符表、中断门和陷阱门
- [30.4]–本章程序介绍
- [30.5]–创建并安装全部的256个中断门
- [30.6]–为实时时钟中断创建和安装中断门
- [30.7]–加载中断描述符表寄存器IDTR
- [30.8]–重新设置8259A主片的中断向量
- [30.9]–中断和异常发生时的特权级检查
- {31}–分页和动态页面分配
- [31.10]–设置控制寄存器CR3和CR0开启分页功能
- [31.11]–在调试器中观察页目录表和页表
- [31.12]–准备将内核映射到虚拟内存的高端
- [31.13]–在分页机制下访问页目录表自身
- [31.14]–使内核在虚拟内存高端的映射生效
- [31.15]–为内核任务创建任务控制块TCB
- [31.16]–为内核任务的TSS分配内存空间
- [31.17]–处理与线性地址对应的页目录项和页表项
- [31.18]–根据需要分配物理页并设置页表项
- [31.19]–物理内存的页面管理和页映射位串
- [31.1]–保护模式下的段式虚拟内存管理
- [31.20]–空闲页的搜索和BTS指令
- [31.21]–空闲页搜索和分配的具体过程
- [31.22]–确立内核任务并开始创建用户任务
- [31.23]–用户任务的内存分配策略
- [31.24]–清空内核任务页目录表的前半部分并刷新TLB
- [31.25]–为用户任务分配内存并创建LDT
- [31.26]–用户程序的加载和重定位
- [31.27]–用户任务页目录表的创建和访问以及INVLPG指令
- [31.28]–第二个用户任务的创建和分页模式下的任务切换
- [31.29]–分页模式下多任务切换的演示和调试
- [31.2]–每个任务独立的虚拟内存
- [31.3]–物理内存的分页以及段到页的拆分
- [31.4]–处理器的段部件和页部件
- [31.5]–从线性地址到物理地址的转换过程
- [31.6]–页目录和页表及其地址转换过程
- [31.7]–设计内核的页目录和页表
- [31.8]–页目录项和页表项的组成格式
- [31.9]–创建内核的页表并初始化低端1MB对应的页表项
- {32}–平坦模型(大结局)
- [32.1]–为什么要引入平坦模型及平坦模型的特点
- [32.2]–在主引导程序中创建平坦模型下的段
- [32.3]–平坦模型对内核程序分段的影响
- [32.4]–平坦模型对加载内核程序的影响
- [32.5]–平坦模型下的内核初始化与内核任务的确立
- [32.6]–平坦模型下的用户程序结构
- [32.7]–平坦模型下的用户任务创建
- [32.8]–在用户任务内动态分配内存
- [32.9]–平坦模型下的多任务切换演示与调试
- X86从实模式到保护模式 源代码
- x86汇编语言-从实模式到保护模式.文字版
包含内容
- · {01}–课程说明
- · [1.1]–课程说明
- · {02}–汇编语言的前世今生
- · [2.10]–处理器
- · [2.11]–汇编语言的诞生
- · [2.1]–引子
- · [2.2]–用电来表示数字
- · [2.3]–二进制加法机
贡献者
Mia
黄金
学习社区
1 人正在学习
阅读与知识交流
交流各类书籍与综合资料,分享阅读问题、笔记和延伸线索。提问时请带上资料名称。