Drollery Medieval drollery of a knight on a horse

🏆 欢迎来到本站: https://xuchangwei.com/希望这里有你感兴趣的内容

flowery border with man falling
flowery border with man falling

Assembly: x86保持模式

保持模式

主要内容

中断和动态时钟显示

主要内容

  • 中断和硬件中断
  • 中断控制器简介
  • 中断号、中断处理过程和中断向量表
  • 实时时钟、CMOS RAM和BCD编码
  • 实时时钟芯片的中断信号
  • 安装0x70号中断处理过程
  • 启用更新周期结束中断
  • 用TEST指令等待更新周期结束
  • 读取BCD码的时间并在屏幕上显示
  • 用NOT指令反转时间分隔符的颜色
  • 使用IRET指令从中断过程返回
  • 用停机指令HLT使处理器进入低功耗状态
  • 内部中断和软中断
  • BIOS中断概述
  • 使用BIOS功能调用接收并显示键盘输入
  • 练习

32 位 x86 处理器编程架构

主要内容

  • IA-32架构和保护模式
  • 寄存器的扩展和扩充
  • 32位处理器的内存访问概况
  • 32位处理器的寻址方式概况
  • 选修-流水线技术
  • 选修-高速缓存技术
  • 选修-乱序执行技术
  • 选修-寄存器重命名技术
  • 选修-分支目标预测技术

进入保护模式

主要内容

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

指令的格式及其操作尺寸

主要内容

  • 80286的16位保护模式
  • 16位处理器的指令操作尺寸
  • 32位处理器的指令操作尺寸
  • x86的指令格式-操作码和立即数部分
  • x86的指令格式-ModRM和偏移量部分
  • x86的指令格式-SIB部分
  • x86的指令格式-指令前缀部分
  • 处理器的默认操作尺寸和相关指令前缀
  • 用伪指令bits生成16位和32位模块
  • 描述符和段描述符高速缓存器的D位
  • 进入保护模式后立即切换到32位模块并使用32位默认操作尺寸

存储器的保护

主要内容

  • 话说MOV DS,AX和MOV DS,EAX
  • 修改段寄存器时的保护
  • 代码段执行时的保护
  • 用向上扩展的段做为栈段
  • 向上扩展的段用做栈段时的保护
  • 访问普通数据段时的保护
  • 内存线性地址的回绕特性
  • 用向下扩展的段做为栈段
  • 向下扩展的段用做栈段时的保护
  • 通过别名来实现段的共用和共享
  • 冒泡排序法的基本原理
  • 32位操作尺寸下的LOOP指令
  • 数据交换指令XCHG

保持模式程序的动态加载和执行

主要内容

  • 本章的目标和内容提要
  • 内核的结构和加载前的准备工作
  • 准备为内核的每个段创建和安装描述符
  • 段描述符的创建和BSWAP指令
  • 进入内核执行
  • 进入内核后显示文本信息
  • 用CPUID指令取得处理器品牌信息并显示
  • 准备加载用户程序
  • 预读用户程序并得到它的大小
  • 条件传送指令簇CMOVcc
  • 计算以512字节为单位的用户程序总长度
  • 内存分配的基本策略和方法
  • 内存分配的简易实现过程
  • 加载用户程序
  • 准备安装用户程序的段描述符
  • 用SGDT和MOVZX指令确定GDT的位置
  • 安装新描述符并生成选择子
  • 安装用户程序的段描述符并回填选择子
  • 用户程序的执行和退出
  • 在虚拟机上观察内核的加载以及用户程序的执行与退出

用户程序编程接口及其实现

主要内容

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

任务和任务的创建

主要内容

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

特权级和特权级保护

主要内容

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

协同式任务切换

主要内容

  • 多任务和任务切换概述
  • 内核任务的创建和I/O特权级IOPL
  • I/O特权级的修改和POPF指令
  • 任务的用户态和内核态
  • I/O许可位串和TSS的I/O许可位映射区
  • 任务切换的方法及内核任务的确立
  • 用户任务的创建和初始化
  • 简单的任务调度和切换策略
  • 遍历TCB链表寻找忙任务和就绪任务
  • 通过JMP FAR执行任务切换的过程
  • 内核任务与用户任务轮流执行的过程
  • 任务的终止和清理

中断和异常的处理与抢占式多任务

主要内容

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

分布和动态页分配

主要内容

  • 保护模式下的段式虚拟内存管理
  • 每个任务独立的虚拟内存
  • 物理内存的分页以及段到页的拆分
  • 处理器的段部件和页部件
  • 从线性地址到物理地址的转换过程
  • 页目录和页表及其地址转换过程
  • 设计内核的页目录和页表
  • 页目录项和页表项的组成格式
  • 创建内核的页表并初始化低端1MB对应的页表项
  • 设置控制寄存器CR3和CR0开启分页功能
  • 在调试器中观察页目录表和页表
  • 准备将内核映射到虚拟内存的高端
  • 在分页机制下访问页目录表自身
  • 使内核在虚拟内存高端的映射生效
  • 为内核任务创建任务控制块TCB
  • 为内核任务的TSS分配内存空间
  • 处理与线性地址对应的页目录项和页表项
  • 根据需要分配物理页并设置页表项
  • 物理内存的页面管理和页映射位串
  • 空闲页的搜索和BTS指令
  • 空闲页搜索和分配的具体过程
  • 确立内核任务并开始创建用户任务
  • 用户任务的内存分配策略
  • 清空内核任务页目录表的前半部分并刷新TLB
  • 为用户任务分配内存并创建LDT
  • 用户程序的加载和重定位
  • 用户任务页目录表的创建和访问以及INVLPG指令
  • 第二个用户任务的创建和分页模式下的任务切换
  • 分页模式下多任务切换的演示和调试

平坦模型

主要内容

为什么要引入平坦模型及平坦模型的特点 在主引导程序中创建平坦模型下的段 平坦模型对内核程序分段的影响 平坦模型对加载内核程序的影响 平坦模型下的内核初始化与内核任务的确立 平坦模型下的用户程序结构 平坦模型下的用户任务创建 在用户任务内动态分配内存 平坦模型下的多任务切换演示与调试