找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 16|回复: 1

《x86汇编语言:从实模式到保护模式》教学视频的说明和下载链接

[复制链接]

720

主题

365

回帖

1407

积分

管理员

积分
1407
发表于 昨天 11:54 | 显示全部楼层 |阅读模式

本套视频课程是以《x86汇编语言:从实模式到保护模式》一书的第1版为蓝本,由本书的作者、本站站长李忠录制。


汇编语言课程是计算机专业的基础课程,类似于语文和数学。汇编语言不是用来编写大型程序的,它是用来打基础的,是用来理解计算机原理的,是用来理解和学习操作系统原理的,是用来学习处理器工作原理的。是的,对你看Linux源码有帮助,我知道你可能关心这一点。我的汇编课程不是所谓的Win32汇编。说实话,如果要写Windows程序,建议你用高级语言,不要用Win32汇编这种不伦不类的东西,它对你理解汇编没有多大帮助,对你理解Windows来说又太费事,你还不如用C语言;


本套视频与《x86汇编语言:从实模式到保护模式》这本书的第一版并不配套,但可以互相补充。图书出版时间太早,在视频录制过程中,删除了书中一些过时的内容(特别是对硬件任务切换做了削减,因为在现实中没有用,而且64位处理器已经不再支持),增加了书没有的内容(特别是指令格式部分)。书中的代码也根据视频的内容和特点做了大幅度的修改。视频要求很强的连续性,且要求容易理解,而写书则没有这种压力。




  • 本套视频以汇编语言的视角介绍x86处理器的硬件架构、指令集、实模式、保护模式、特权级和特权级保护、分段、分页、虚拟内存、平坦模型、单处理器的任务切换、系统调用(从用户态进入内核态的方法和过程)。
  • 视频文件是用.7z格式分卷压缩的,其中包含配套的源码和工具,以及视频中用到的图表和资料。内容尺寸(压缩前/压缩后):26GB/15GB;
  • 压缩后的视频文件位于百度网盘,需要下载解压后观看;
  • 视频下载链接:《x86汇编语言:从实模式到保护模式》视频下载链接 - 下载链接 - 鼠侠网 - 李忠,传播不一样的计算机知识。打开此链接时可能需要支付鼠币,此时请先按提示购买鼠币。鼠币购买链接为首页-鼠侠工作室-淘宝网
  • 你的下载速度取决于你自己的网速,不支持以下载速度慢为由申请售后;
  • 购买并下载后,你也将获得在本网站提问并获得解答服务的权限。




以下二楼是视频的目录。


720

主题

365

回帖

1407

积分

管理员

积分
1407
 楼主| 发表于 9 小时前 | 显示全部楼层
└─x86汇编语言:从实模式到保护模式
    ├─Appendix.视频中的图表和资料
    ├─Appendix.视频源码和工具
    │  └─booktool
    │      └─配书源码和工具
    │          ├─c05
    │          ├─c06
    │          ├─c07
    │          ├─c08
    │          ├─c09
    │          ├─c11
    │          ├─c12
    │          ├─c13
    │          ├─c14
    │          ├─c15
    │          ├─c16
    │          ├─c17
    │          ├─c18
    │          ├─c30
    │          ├─c31
    │          └─c32
    ├─C01-课程说明
    ├─C02-汇编语言的前世今生
    │  ├─002-引子
    │  ├─002.用电表示数字
    │  ├─003-用电来表示数字
    │  ├─003.二进制加法机
    │  ├─004-二进制加法机
    │  ├─004.寄存器
    │  ├─005-具有记忆功能的器件——寄存器
    │  ├─005.带寄存器的加法机
    │  ├─006-带寄存器的加法机
    │  ├─006.能做四则运算的机器
    │  ├─007-能做四则运算的机器
    │  ├─007.机器指令
    │  ├─008-机器指令
    │  ├─008.内存和内存地址
    │  ├─009-内存
    │  ├─009.习题和辅导(1)
    │  │  └─VIP
    │  ├─010-自动计算
    │  ├─010.字节
    │  ├─011-处理器
    │  ├─011.内存访问
    │  ├─012-汇编语言的诞生
    │  ├─012.存储器的分类
    │  ├─013.习题和辅导(2)
    │  │  └─VIP
    │  ├─014.自动计算
    │  ├─015.处理器
    │  ├─016.汇编语言的产生
    │  └─017.习题和辅导(3)
    │      └─VIP
    ├─C03-认识8086处理器
    │  ├─001.8086的通用寄存器
    │  ├─002.习题和辅导1
    │  ├─003.8086的内存访问和字节序
    │  ├─004.习题和辅导2
    │  ├─005.程序的分段
    │  ├─006.程序的重定位难题
    │  ├─007.段地址和偏移地址
    │  ├─008.8086内存访问的困境
    │  ├─009.8086选择段地址的策略
    │  ├─010.8086的内存访问过程
    │  ├─011.逻辑地址和分段的灵活性
    │  └─012.习题和辅导3
    ├─C04.原书第1版第2章检测点和习题解析
    │  └─022.习题解答e1c02
    ├─C05.汇编语言和汇编软件
    │  ├─01.创建汇编语言源程序
    │  ├─02.下载和安装编译器NASM
    │  ├─03.编译汇编语言源程序
    │  ├─04.配套源码和工具的使用
    │  └─新建文件夹
    │      ├─01.创建汇编语言源程序
    │      ├─02.下载和安装编译器NASM
    │      ├─03.编译汇编语言源程序
    │      └─04.配套源码和工具的使用
    ├─C06.原书第1版第3章检测点和习题解析
    │  └─029.原书第1版第3章检测点和习题解析
    ├─C07.如何执行编译好的程序
    │  ├─01.8086加电或者复位时的状态
    │  ├─02.8086地址空间的分配
    │  ├─03.跳转指令
    │  ├─04.习题和辅导1
    │  ├─05.硬盘的构造和工作原理
    │  └─06.一切从主引导扇区开始
    ├─C08.虚拟机的安装和使用
    │  ├─01.安装VirtualBox虚拟机管理器
    │  ├─02.创建VirtualBox虚拟机
    │  ├─03.虚拟硬盘简介
    │  ├─04.在Windows下创建虚拟硬盘并安装操作系统
    │  └─05.在Linux下创建虚拟硬盘并安装操作系统
    ├─C09.汇编语言程序的调试
    │  ├─040.带调试功能的虚拟机
    │  ├─041.安装Bochs虚拟机
    │  ├─042.为Bochs虚拟机安装虚拟硬盘
    │  ├─043.创建主引导扇区程序
    │  ├─044.将程序写入硬盘主引导扇区
    │  └─045.用调试器观察程序的执行
    │      └─DOCS
    ├─C10.原书第1版第4章检测点和习题解析
    │  └─046.习题解答e1c04
    ├─C11.在屏幕上显示文本
    │  ├─001.显卡和显存
    │  ├─002.准备访问文本模式下的显存
    │  ├─003.字符的编码和显示属性
    │  ├─004.文本模式下的显存操作
    │  ├─005.MOV指令的形式和机器码
    │  ├─006.习题1
    │  ├─007.列表文件的创建和使用
    │  ├─008.在汇编程序中使用标号
    │  ├─009.段间直接绝对跳转指令
    │  ├─010.在Bochs中运行和调试写屏程序
    │  ├─011.在VirtualBox中运行写屏程序
    │  ├─012.主引导扇区执行时的内存布局
    │  ├─013.使用标号计算跳转的偏移地址
    │  ├─014.使用寄存器的绝对间接近跳转
    │  ├─015.使用相对偏移量的短跳转和近跳转
    │  └─016.习题2
    ├─C12.在屏幕上显示数字
    │  ├─001.显示数字的基本原理
    │  ├─002.无符号数除法指令div
    │  ├─003.在调试器里验证除法操作
    │  ├─004.异或指令xor的用法
    │  ├─005.加法指令add的用法
    │  ├─006.使用标号访问内存数据
    │  ├─007.段超越前缀的使用
    │  ├─008.显示标号的汇编地址
    │  └─009.习题1
    ├─C13.阶段性重点内容总结
    │  ├─001.阶段性重点内容总结
    │  └─002.原书第1版第5章检测点和习题解析
    ├─C14.循环、批量传送和条件转移
    │  ├─001.跳过非指令的数据区
    │  ├─002.逻辑段地址的重新设定
    │  ├─003.串传送指令和标志寄存器
    │  ├─004.NASM的$和$$记号
    │  ├─005.使用循环指令LOOP分解数位
    │  ├─006.基址寻址和INC指令
    │  ├─007.数字的显示和DEC指令
    │  ├─008.基址变址寻址和条件转移指令
    │  └─009.习题1
    ├─C15.计算机中的负数
    │  ├─079.无符号数和有符号数
    │  ├─080.减法指令SUB和求补指令NEG
    │  ├─081.计算机如何区分对待无符号数和有符号数
    │  ├─082.有符号数除法指令IDIV
    │  └─083.有符号数的符号扩展指令
    ├─C16.阶段性知识总结和拓展
    │  ├─084.8086的标志寄存器
    │  ├─085.条件转移指令和CMP指令
    │  └─086.原书第1版第6章检测点和习题解析
    ├─C17.从1加到100并显示结果
    │  ├─001.字符串的定义和累加过程
    │  ├─002.栈的原理和使用
    │  ├─003.栈在数位分解和显示中的应用
    │  ├─004.在调试器里观察栈操作的状态
    │  ├─005.进一步认识栈和栈操作的特点
    │  ├─006.逻辑或指令OR和逻辑与指令AND
    │  └─007.习题1
    ├─C18.INTEL8086处理器的寻址方式
    │  ├─001.寄存器、立即数和直接寻址
    │  ├─002.基址寻址
    │  ├─003.变址寻址
    │  ├─004.基址变址寻址
    │  └─005.原书第1版第7章检测点和习题解析
    ├─C19.硬盘和显卡的访问与控制
    │  ├─001.离开主引导扇区
    │  ├─002.给汇编语言程序分段
    │  ├─003.控制段内元素的汇编地址
    │  ├─004.习题1
    │  ├─005.加载器和用户程序头部段
    │  ├─006.加载器的工作流程和常数声明
    │  ├─007.确定用户程序的加载位置
    │  ├─008.外围设备及其接口
    │  ├─009.输入输出端口的访问
    │  ├─010.通过硬盘控制器端口读扇区数据
    │  ├─011.过程和过程调用
    │  ├─012.过程调用和返回的原理
    │  ├─013.加载整个用户程序
    │  ├─014.用户程序的重定位
    │  ├─015.比特位的移动指令
    │  ├─016.转到用户程序内部执行
    │  ├─017.8086的无条件转移指令
    │  ├─018.用户程序的执行过程
    │  ├─019.验证加载器加载和执行用户程序的过程
    │  ├─020.书中第八章用户程序概述
    │  ├─021.习题2
    │  ├─022.与文本显示有关的回车、换行与光标控制
    │  ├─023.回车的光标处理和乘法指令MUL
    │  ├─024.换行和普通字符的处理过程与滚屏操作
    │  ├─025.8086的过程调用方式
    │  ├─026.通过RETF指令转到另一个代码段内执行
    │  ├─027.在程序中访问不同的数据段
    │  ├─028.使用新版FixVhdWr写虚拟硬盘并运行程序
    │  └─029.原书第一版第8章习题解析解答
    ├─C20.中断和动态时钟显示
    │  ├─001.中断和硬件中断
    │  ├─002.中断控制器简介
    │  ├─003.中断号、中断处理过程和中断向量表
    │  ├─004.实时时钟、CMOS RAM和BCD编码
    │  ├─005.实时时钟芯片的中断信号
    │  ├─006.安装0x70号中断处理过程
    │  ├─007.启用更新周期结束中断
    │  ├─008.用TEST指令等待更新周期结束
    │  ├─009.读取BCD码的时间并在屏幕上显示
    │  ├─010.用NOT指令反转时间分隔符的颜色
    │  ├─011.使用IRET指令从中断过程返回
    │  ├─012.用停机指令HLT使处理器进入低功耗状态
    │  ├─013.内部中断和软中断
    │  ├─014.BIOS中断概述
    │  ├─015.使用BIOS功能调用接收并显示键盘输入
    │  ├─016.原书第9章检测点和习题解析
    │  └─017.习题1
    ├─C21.32位x86处理器编程架构
    │  ├─001.IA-32架构和保护模式
    │  ├─002.寄存器的扩展和扩充
    │  ├─003.32位处理器的内存访问概况
    │  ├─004.32位处理器的寻址方式概况
    │  ├─005.选修-流水线技术
    │  ├─006.选修-高速缓存技术
    │  ├─007.选修-乱序执行技术
    │  ├─008.选修-寄存器重命名技术
    │  └─009.选修-分支目标预测技术
    ├─C22.进入保护模式
    │  ├─001.保护模式是要保护什么
    │  ├─002.全局描述符表GDT和全局描述符表寄存器GDTR
    │  ├─003.准备创建全局描述符表
    │  ├─004.描述符的分类
    │  ├─005.存储器的段描述符-段的类型和基地址
    │  ├─006.存储器的段描述符-段界限及访问控制位
    │  ├─007.安装存储器的段描述符
    │  ├─008.加载全局描述符表寄存器GDTR
    │  ├─009.开启处理器的第21根地址线A20
    │  ├─010.通过设置寄存器CR0的PE位进入保护模式
    │  ├─011.描述符高速缓存器和保护模式下的内存访问
    │  ├─012.在调试器中观察实模式和保护模式的内存访问
    │  └─013.习题1
    ├─C23.指令的格式及其操作尺寸
    │  ├─001.80286的16位保护模式
    │  ├─002.16位处理器的指令操作尺寸
    │  ├─003.32位处理器的指令操作尺寸
    │  ├─004.x86的指令格式-操作码和立即数部分
    │  ├─005.x86的指令格式-ModRM和偏移量部分
    │  ├─006.x86的指令格式-SIB部分
    │  ├─007.x86的指令格式-指令前缀部分
    │  ├─008.处理器的默认操作尺寸和相关指令前缀
    │  ├─009.用伪指令bits生成16位和32位模块
    │  ├─010.描述符和段描述符高速缓存器的D位
    │  ├─011.进入保护模式后立即切换到32位模块并使用32位默认操作尺寸
    │  └─012.习题1
    ├─C24.存储器的保护
    │  ├─001.话说MOV DS,AX和MOV DS,EAX
    │  ├─002.修改段寄存器时的保护
    │  ├─003.代码段执行时的保护
    │  ├─004.用向上扩展的段做为栈段
    │  ├─005.向上扩展的段用做栈段时的保护
    │  ├─006.访问普通数据段时的保护
    │  ├─007.内存线性地址的回绕特性
    │  ├─008.用向下扩展的段做为栈段
    │  ├─009.向下扩展的段用做栈段时的保护
    │  ├─010.通过别名来实现段的共用和共享
    │  ├─011.冒泡排序法的基本原理
    │  ├─012.32位操作尺寸下的LOOP指令
    │  └─013.数据交换指令XCHG
    ├─C25.保护模式程序的动态加载和执行
    │  ├─001.本章的目标和内容提要
    │  ├─002.内核的结构和加载前的准备工作
    │  ├─003.准备为内核的每个段创建和安装描述符
    │  ├─004.段描述符的创建和BSWAP指令
    │  ├─005.进入内核执行
    │  ├─006.进入内核后显示文本信息
    │  ├─007.用CPUID指令取得处理器品牌信息并显示
    │  ├─008.准备加载用户程序
    │  ├─009.预读用户程序并得到它的大小
    │  ├─010.条件传送指令簇CMOVcc
    │  ├─011.计算以512字节为单位的用户程序总长度
    │  ├─012.内存分配的基本策略和方法
    │  ├─013.内存分配的简易实现过程
    │  ├─014.加载用户程序
    │  ├─015.准备安装用户程序的段描述符
    │  ├─016.用SGDT和MOVZX指令确定GDT的位置
    │  ├─017.安装新描述符并生成选择子
    │  ├─018.安装用户程序的段描述符并回填选择子
    │  ├─019.用户程序的执行和退出
    │  └─020.在虚拟机上观察内核的加载以及用户程序的执行与退出
    ├─C26.用户程序编程接口及其实现
    │  ├─001.内核与用户程序之间的栈切换问题
    │  ├─002.在内核中为用户程序提供编程支持
    │  ├─003.用户程序中的符号地址检索表
    │  ├─004.内核程序中的符号地址检索表
    │  ├─005.串比较指令CMPS
    │  ├─006.串比较的方向和重复前缀
    │  ├─007.使用外循环依次取得用户SALT表的每个条目
    │  ├─008.使用内循环依次取得内核SALT表的每个条目并进行比较
    │  ├─009.在用户程序内使用内核编程接口读硬盘和显示文本
    │  ├─010.在虚拟机上验证程序的执行
    │  └─011.以十六进制形式显示一个双字以及PUSHAD、POPAD和XLAT指令的使用
    ├─C27.任务和任务的创建
    │  ├─001.任务:概念和组成
    │  ├─002.使用任务控制块保存任务基本信息
    │  ├─003.将任务控制块加入任务控制块链表
    │  ├─004.通过栈传递例程参数以及立即数的压栈指令
    │  ├─005.段寄存器的压栈和出栈以及栈的随机访问机制
    │  ├─006.创建任务的局部描述符表LDT
    │  ├─007.在当前任务的LDT中安装描述符
    │  ├─008.LDT描述符的格式和LDT描述符的创建
    │  ├─009.创建任务状态段TSS
    │  ├─010.TSS描述符的格式和TSS描述符的创建
    │  ├─011.用带参数的RET指令返回调用者
    │  ├─012.加载任务寄存器TR和局部描述符表寄存器LDTR
    │  └─013.在虚拟机上验证任务的执行
    ├─C28.特权级和特权级保护
    │  ├─001.特权级保护的必要性和特权保护机制
    │  ├─002.当前特权级CPL
    │  ├─003.描述符特权级DPL
    │  ├─004.任务公共部分和私有部分的特权级划分
    │  ├─005.依从的代码段
    │  ├─006.门描述符和调用门
    │  ├─007.本章程序说明及特权级检查的时机
    │  ├─008.请求特权级RPL
    │  ├─009.请求特权级调整指令ARPL
    │  ├─010.一般情况下的请求特权级设置
    │  ├─011.为内核接口例程创建调用门
    │  ├─012.调用门的测试和调用门转移过程
    │  ├─013.通过调用门实施低特权级到高特权级的转移
    │  ├─014.通过调用门转移控制时的栈切换过程
    │  ├─015.通过调用门转移控制并返回的完整描述
    │  ├─016.创建0、1和2特权级的栈并登记在TSS中
    │  ├─017.通过模拟调用门返回进入用户程序执行
    │  └─018.习题1
    ├─C29.协同式任务切换
    │  ├─001.多任务和任务切换概述
    │  ├─002.内核任务的创建和I/O特权级IOPL
    │  ├─003.I/O特权级的修改和POPF指令
    │  ├─004.任务的用户态和内核态
    │  ├─005.I/O许可位串和TSS的I/O许可位映射区
    │  ├─006.任务切换的方法及内核任务的确立
    │  ├─007.用户任务的创建和初始化
    │  ├─008.简单的任务调度和切换策略
    │  ├─009.遍历TCB链表寻找忙任务和就绪任务
    │  ├─010.通过JMP FAR执行任务切换的过程
    │  ├─011.内核任务与用户任务轮流执行的过程
    │  └─012.任务的终止和清理
    ├─C30.中断和异常的处理与抢占式多任务
    │  ├─001.中断和异常概述
    │  ├─002.保护模式下中断和异常的向量分配
    │  ├─003.中断描述符表、中断门和陷阱门
    │  ├─004.本章程序介绍
    │  ├─005.创建并安装全部的256个中断门
    │  ├─006.为实时时钟中断创建和安装中断门
    │  ├─007.加载中断描述符表寄存器IDTR
    │  ├─008.重新设置8259A主片的中断向量
    │  ├─009.中断和异常发生时的特权级检查
    │  ├─010.中断和异常发生时的栈切换过程
    │  ├─011.在中断处理过程中实施任务切换(含NOP指令的介绍)
    │  └─012.抢占式多任务的执行效果演示
    ├─C31.分页和动态页面分配
    │  ├─001.保护模式下的段式虚拟内存管理
    │  ├─002.每个任务独立的虚拟内存
    │  ├─003.物理内存的分页以及段到页的拆分
    │  ├─004.习题1
    │  ├─005.处理器的段部件和页部件
    │  ├─006.从线性地址到物理地址的转换过程
    │  ├─007.习题2
    │  ├─008.页目录和页表及其地址转换过程
    │  ├─009.设计内核的页目录和页表
    │  ├─010.页目录项和页表项的组成格式
    │  ├─011.创建内核的页表并初始化低端1MB对应的页表项
    │  ├─012.设置控制寄存器CR3和CR0开启分页功能
    │  ├─013.在调试器中观察页目录表和页表
    │  ├─014.准备将内核映射到虚拟内存的高端
    │  ├─015.在分页机制下访问页目录表自身
    │  ├─016.使内核在虚拟内存高端的映射生效
    │  ├─017.为内核任务创建任务控制块TCB
    │  ├─018.为内核任务的TSS分配内存空间
    │  ├─019.处理与线性地址对应的页目录项和页表项
    │  ├─020.根据需要分配物理页并设置页表项
    │  ├─021.物理内存的页面管理和页映射位串
    │  ├─022.空闲页的搜索和BTS指令
    │  ├─023.空闲页搜索和分配的具体过程
    │  ├─024.确立内核任务并开始创建用户任务
    │  ├─025.用户任务的内存分配策略
    │  ├─026.清空内核任务页目录表的前半部分并刷新TLB
    │  ├─027.为用户任务分配内存并创建LDT
    │  ├─028.用户程序的加载和重定位
    │  ├─029.用户任务页目录表的创建和访问以及INVLPG指令
    │  ├─030.第二个用户任务的创建和分页模式下的任务切换
    │  └─031.分页模式下多任务切换的演示和调试
    └─C32.平坦模型
        ├─300.为什么要引入平坦模型及平坦模型的特点
        ├─301.在主引导程序中创建平坦模型下的段
        ├─302.平坦模型对内核程序分段的影响
        ├─303.平坦模型对加载内核程序的影响
        ├─304.平坦模型下的内核初始化与内核任务的确立
        ├─305.平坦模型下的用户程序结构
        ├─306.平坦模型下的用户任务创建
        ├─307.在用户任务内动态分配内存
        └─308.平坦模型下的多任务切换演示与调试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-7-4 21:35 , Processed in 0.223620 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表