学IT吧 精品IT资源库

 找回密码
 立即注册
查看: 853|回复: 1

[其它] x86汇编语言从实模式到保护模式完整版李述桐

[复制链接]

1596

主题

1596

帖子

6415

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6415
发表于 2022-6-10 22:01:51 | 显示全部楼层 |阅读模式
汇编语言.png

附:x86汇编语言-从实模式到保护模式完整文字版和源代码 pdf

课程介绍:
适用人群

了解数制,懂得二进制、十六进制,能够在二进制、十进制和十六进制之间换算,具有计算机的使用经验。

课程概述

作者亲自授课,以本书为蓝本加以拓展和细化,并附有原书课后习题的解析。不需要过多的基础即可听懂!

课程大纲:
1--课程说明

2--汇编语言的前世今生
[2.1]--引子
[2.2]--用电来表示数字
[2.3]--二进制加法机
[2.4]--具有记忆功能的器件——寄存器
[2.5]--带寄存器的加法机
[2.6]--能做四则运算的机器
[2.7]--机器指令
[2.8]--内存
[2.9]--自动计算
[2.10]--处理器
[2.11]--汇编语言的诞生

3--认识8086处理器
[3.1]--8086的通用寄存器
[3.2]--8086的内存访问和字节序
[3.3]--程序的分段
[3.4]--程序的重定位难题
[3.5]--段地址和偏移地址
[3.6]--8086内存访问的困境
[3.7]--8086选择段地址的策略
[3.8]--8086的内存访问过程
[3.9]--逻辑地址和分段的灵活性

4--原书第1版第2章检测点和习题解析

5--汇编语言和汇编软件
[5.1]--创建汇编语言源程序
[5.2]--Notepad++的下载和使用
[5.3]--下载和安装编译器NASM
[5.4]--编译汇编语言源程序
[5.5]--下载和使用配套源码及工具
[5.6]--将编译功能集成到Notepad++

6--原书第1版第3章检测点和习题解析

7--如何执行编译好的程序
[7.1]--8086加电或者复位时的状态
[7.2]--8086地址空间的分配
[7.3]--跳转指令
[7.4]--硬盘的构造和工作原理
[7.5]--一切从主引导扇区开始

8--虚拟机的安装和使用
[8.1]--安装VirtualBox虚拟机管理器
[8.2]--创建VirtualBox虚拟机
[8.3]--虚拟硬盘简介
[8.4]--在Windows下创建虚拟硬盘并安装操作系统
[8.5]--在Linux下创建虚拟硬盘并安装操作系统

9--汇编语言程序的调试
[9.1]--带调试功能的虚拟机
[9.2]--安装Bochs虚拟机
[9.3]--为Bochs虚拟机安装虚拟硬盘
[9.4]--创建主引导扇区程序
[9.5]--将程序写入硬盘主引导扇区
[9.6]--用调试器观察程序的执行

10--原书第1版第4章检测点和习题解析

11--在屏幕上显示文本
[11.1]--显卡和显存
[11.2]--准备访问文本模式下的显存
[11.3]--字符的编码和显示属性
[11.4]--文本模式下的显存操作
[11.5]--MOV指令的形式和机器码
[11.6]--列表文件的创建和使用
[11.7]--在汇编程序中使用标号
[11.8]--段间直接绝对跳转指令
[11.9]--在Bochs中运行和调试写屏程序
[11.10]--在VirtualBox中运行写屏程序
[11.11]--主引导扇区执行时的内存布局
[11.12]--使用标号计算跳转的偏移地址
[11.13]--使用寄存器的绝对间接近跳转
[11.14]--使用相对偏移量的短跳转和近跳转

12--在屏幕上显示数字
[12.1]--显示数字的基本原理
[12.2]--无符号数除法指令div
[12.3]--在调试器里验证除法操作
[12.4]--异或指令xor的用法
[12.5]--加法指令add的用法
[12.6]--使用标号访问内存数据
[12.7]--段超越前缀的使用
[12.8]--显示标号的汇编地址

13--阶段性重点内容总结

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.1]--离开主引导扇区
[19.2]--给汇编语言程序分段
[19.3]--控制段内元素的汇编地址
[19.4]--加载器和用户程序头部段
[19.5]--加载器的工作流程和常数声明
[19.6]--确定用户程序的加载位置
[19.7]--外围设备及其接口
[19.8]--输入输出端口的访问
[19.9]--通过硬盘控制器端口读扇区数据
[19.10]--过程和过程调用
[19.11]--过程调用和返回的原理
[19.12]--加载整个用户程序
[19.13]--用户程序的重定位
[19.14]--比特位的移动指令
[19.15]--转到用户程序内部执行
[19.16]--8086的无条件转移指令
[19.17]--用户程序的执行过程
[19.18]--验证加载器加载和执行用户程序的过程
[19.19]--书中第八章用户程序概述
[19.20]--与文本显示有关的回车、换行与光标控制
[19.21]--回车的光标处理和乘法指令MUL
[19.22]--换行和普通字符的处理过程与滚屏操作
[19.23]--8086的过程调用方式
[19.24]--通过RETF指令转到另一个代码段内执行
[19.25]--在程序中访问不同的数据段
[19.26]--使用新版FixVhdWr写虚拟硬盘并运行程序
[19.27]--原书第一版第8章习题解析解答

20--中断和动态时钟显示
[20.1]--中断和硬件中断
[20.2]--中断控制器简介
[20.3]--中断号、中断处理过程和中断向量表
[20.4]--实时时钟、CMOSRAM和BCD编码
[20.5]--实时时钟芯片的中断信号
[20.6]--安装0x70号中断处理过程
[20.7]--启用更新周期结束中断
[20.8]--用TEST指令等待更新周期结束
[20.9]--读取BCD码的时间并在屏幕上显示
[20.10]--用NOT指令反转时间分隔符的颜色
[20.11]--使用IRET指令从中断过程返回
[20.12]--用停机指令HLT使处理器进入低功耗状态
[20.13]--内部中断和软中断
[20.14]--BIOS中断概述
[20.15]--使用BIOS功能调用接收并显示键盘输入
[20.16]--原书第9章检测点和习题解析

21--32位x86处理器编程架构
[21.1]--IA-32架构和保护模式
[21.1]--IA-32架构和保护模式_ev (3).mp4
[21.2]--寄存器的扩展和扩充
[21.2]--寄存器的扩展和扩充_ev (3).mp4
[21.3]--32位处理器的内存访问概况
[21.4]--32位处理器的寻址方式概况
[21.5]--选修-流水线技术
[21.6]--选修-高速缓存技术
[21.7]--选修-乱序执行技术
[21.8]--选修-寄存器重命名技术
[21.9]--选修-分支目标预测技术

22--进入保护模式
[22.1]--保护模式是要保护什么
[22.2]--全局描述符表GDT和全局描述符表寄存器GDTR
[22.3]--准备创建全局描述符表
[22.4]--描述符的分类
[22.5]--存储器的段描述符-段的类型和基地址
[22.6]--存储器的段描述符-段界限及访问控制位
[22.7]--安装存储器的段描述符
[22.8]--加载全局描述符表寄存器GDTR
[22.9]--开启处理器的第21根地址线A20
[22.10]--通过设置寄存器CR0的PE位进入保护模式
[22.11]--描述符高速缓存器和保护模式下的内存访问
[22.12]--在调试器中观察实模式和保护模式的内存访问

23--指令的格式及其操作尺寸
[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位模块
[23.10]--描述符和段描述符高速缓存器的D位
[23.11]--进入保护模式后立即切换到32位模块并使用32位默认操作尺寸

24--存储器的保护
[24.1]--话说MOVDS,AX和MOVDS,EAX
[24.2]--修改段寄存器时的保护
[24.3]--代码段执行时的保护
[24.4]--用向上扩展的段做为栈段
[24.5]--向上扩展的段用做栈段时的保护
[24.6]--访问普通数据段时的保护
[24.7]--内存线性地址的回绕特性
[24.8]--用向下扩展的段做为栈段
[24.9]--向下扩展的段用做栈段时的保护
[24.10]--通过别名来实现段的共用和共享
[24.11]--冒泡排序法的基本原理
[24.12]--32位操作尺寸下的LOOP指令
[24.13]--数据交换指令XCHG

25--保护模式程序的动态加载和执行
[25.1]--本章的目标和内容提要
[25.2]--内核的结构和加载前的准备工作
[25.3]--准备为内核的每个段创建和安装描述符
[25.4]--段描述符的创建和BSWAP指令
[25.5]--进入内核执行
[25.6]--进入内核后显示文本信息
[25.7]--用CPUID指令取得处理器品牌信息并显示
[25.8]--准备加载用户程序
[25.9]--预读用户程序并得到它的大小
[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.20]--在虚拟机上观察内核的加载以及用户程序的执行与退出

26--用户程序编程接口及其实现
[26.1]--内核与用户程序之间的栈切换问题
[26.2]--在内核中为用户程序提供编程支持
[26.3]--用户程序中的符号地址检索表
[26.4]--内核程序中的符号地址检索表
[26.5]--串比较指令CMPS
[26.6]--串比较的方向和重复前缀
[26.7]--使用外循环依次取得用户SALT表的每个条目
[26.8]--使用内循环依次取得内核SALT表的每个条目并进行比较
[26.9]--在用户程序内使用内核编程接口读硬盘和显示文本
[26.10]--在虚拟机上验证程序的执行
[26.11]--以十六进制形式显示一个双字以及PUSHAD、POPAD和XLAT

27--任务和任务的创建
[27.1]--任务:概念和组成
[27.2]--使用任务控制块保存任务基本信息
[27.3]--将任务控制块加入任务控制块链表
[27.4]--通过栈传递例程参数以及立即数的压栈指令
[27.5]--段寄存器的压栈和出栈以及栈的随机访问机制
[27.6]--创建任务的局部描述符表LDT
[27.7]--在当前任务的LDT中安装描述符
[27.8]--LDT描述符的格式和LDT描述符的创建
[27.9]--创建任务状态段TSS
[27.10]--TSS描述符的格式和TSS描述符的创建
[27.11]--用带参数的RET指令返回调用者
[27.12]--加载任务寄存器TR和局部描述符表寄存器LDTR
[27.13]--在虚拟机上验证任务的执行

28--特权级和特权级保护
[28.1]--特权级保护的必要性和特权保护机制
[28.2]--当前特权级CPL
[28.3]--描述符特权级DPL
[28.4]--任务公共部分和私有部分的特权级划分
[28.5]--依从的代码段
[28.6]--门描述符和调用门
[28.7]--本章程序说明及特权级检查的时机
[28.8]--请求特权级RPL
[28.9]--请求特权级调整指令ARPL
[28.10]--一般情况下的请求特权级设置
[28.11]--为内核接口例程创建调用门
[28.12]--调用门的测试和调用门转移过程
[28.13]--通过调用门实施低特权级到高特权级的转移
[28.14]--通过调用门转移控制时的栈切换过程
[28.15]--通过调用门转移控制并返回的完整描述
[28.16]--创建0、1和2特权级的栈并登记在TSS中
[28.17]--通过模拟调用门返回进入用户程序执行

29--协同式任务切换
[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链表寻找忙任务和就绪任务
[29.10]--通过JMPFAR执行任务切换的过程
[29.11]--内核任务与用户任务轮流执行的过程
[29.12]--任务的终止和清理

30--中断和异常的处理与抢占式多任务
[30.1]--中断和异常概述
[30.2]--保护模式下中断和异常的向量分配
[30.3]--中断描述符表、中断门和陷阱门
[30.4]--本章程序介绍
[30.5]--创建并安装全部的256个中断门
[30.6]--为实时时钟中断创建和安装中断门
[30.7]--加载中断描述符表寄存器IDTR
[30.8]--重新设置8259A主片的中断向量
[30.9]--中断和异常发生时的特权级检查
[30.10]--中断和异常发生时的栈切换过程
[30.11]--在中断处理过程中实施任务切换(含NOP指令的介绍)
[30.12]--抢占式多任务的执行效果演示

31--分页和动态页面分配
[31.1]--保护模式下的段式虚拟内存管理
[31.2]--每个任务独立的虚拟内存
[31.3]--物理内存的分页以及段到页的拆分
[31.4]--处理器的段部件和页部件
[31.5]--从线性地址到物理地址的转换过程
[31.6]--页目录和页表及其地址转换过程
[31.7]--设计内核的页目录和页表
[31.8]--页目录项和页表项的组成格式
[31.9]--创建内核的页表并初始化低端1MB对应的页表项
[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.20]--空闲页的搜索和BTS指令
[31.21]--空闲页搜索和分配的具体过程
[31.22]--确立内核任务并开始创建用户任务
[31.23]--用户任务的内存分配策略
[31.24]--清空内核任务页目录表的前半部分并刷新TLB
[31.25]--为用户任务分配内存并创建LDT
[31.26]--用户程序的加载和重定位
[31.27]--用户任务页目录表的创建和访问以及INVLPG指令
[31.28]--第二个用户任务的创建和分页模式下的任务切换
[31.29]--分页模式下多任务切换的演示和调试

32--平坦模型(大结局)
[32.1]--为什么要引入平坦模型及平坦模型的特点
[32.2]--在主引导程序中创建平坦模型下的段
[32.3]--平坦模型对内核程序分段的影响
[32.4]--平坦模型对加载内核程序的影响
[32.5]--平坦模型下的内核初始化与内核任务的确立
[32.6]--平坦模型下的用户程序结构
[32.7]--平坦模型下的用户任务创建
[32.8]--在用户任务内动态分配内存
[32.9]--平坦模型下的多任务切换演示与调试

X86从实模式到保护模式 源代码.pdf
x86汇编语言-从实模式到保护模式.文字版.pdf
购买主题 已有 1 人购买  本主题需向作者支付 85 学币 才能浏览
回复

使用道具 举报

0

主题

18

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2022-10-12 19:46:57 | 显示全部楼层
BHBDSJDSJDDD
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|学IT吧

GMT+8, 2024-12-24 08:33 , Processed in 0.094548 second(s), 23 queries .

学IT吧 www.xueit8.com X3.4

Copyright © 2001-2021, Tencent Cloud.

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