x86汇编语言:从实模式到保护模式

Author: 李忠  

Publisher: 电子工业出版社‎

Publication year: 2012

E-ISBN: 9787121187995

P-ISBN(Hardback):  9787121187995

Subject: TP313 汇编程序

Keyword: 汇编程序

Language: CHS

Access to resources Favorite

Disclaimer: Any content in publications that violate the sovereignty, the constitution or regulations of the PRC is not accepted or approved by CNPIEC.

Description

本书的写作角度和阐述方式是以前从来没有过的。它采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的INTEL微处理器为基础,结合最新的总线和接口技术,详细讲解了INTEL微处理器的指令系统和工作模式,以大量的代码演示了16/32/64位软件的开发方法。它介绍如何直接控制硬件,在不借助于BIOS、DOS、WINDOWS、LINUX或者任何其它软件支持的情况下来显示字符、读取硬盘数据、用声卡播放音乐,如此等等,可作为大专院校学生和计算机编程爱好者的教程。

Chapter

7.7 8086处理器的寻址方式

7.7.1 寄存器寻址

7.7.2 立即寻址

7.7.3 内存寻址

本章习题

第8章 硬盘和显卡的访问与控制

8.1 本章代码清单

8.2 用户程序的结构

8.2.1 分段、段的汇编地址和段内汇编地址

8.2.2 用户程序头部

8.3 加载程序(器)的工作流程

8.3.1 初始化和决定加载位置

8.3.2 准备加载用户程序

8.3.3 外围设备及其接口

8.3.4 I/O端口和端口访问

8.3.5 通过硬盘控制器端口读扇区数据

8.3.6 过程调用

8.3.7 加载用户程序

8.3.8 用户程序重定位

8.3.9 将控制权交给用户程序

8.3.10 8086处理器的无条件转移指令

8.4 用户程序的工作流程

8.4.1 初始化段寄存器和栈切换

8.4.2 调用字符串显示例程

8.4.3 过程的嵌套

8.4.4 屏幕光标控制

8.4.5 取当前光标位置

8.4.6 处理回车和换行字符

8.4.7 显示可打印字符

8.4.8 滚动屏幕内容

8.4.9 重置光标

8.4.10 切换到另一个代码段中执行

8.4.11 访问另一个数据段

8.5 编译和运行程序并观察结果

本章习题

第9章 中断和动态时钟显示

9.1 外部硬件中断

9.1.1 非屏蔽中断

9.1.2 可屏蔽中断

9.1.3 实模式下的中断向量表

9.1.4 实时时钟、CMOS RAM和BCD编码

9.1.5 代码清单9-1

9.1.6 初始化8259、RTC和中断向量表

9.1.7 使处理器进入低功耗状态

9.1.8 实时时钟中断的处理过程

9.1.9 代码清单9-1的编译和运行

9.2 内部中断

9.3 软中断

9.3.1 BIOS中断

9.3.2 代码清单9-2

9.3.3 从键盘读字符并显示

9.3.4 代码清单9-2的编译和运行

本章习题

第3 部分32位保护模式

第10章 32位x86处理器编程架构

10.1 IA-32架构的基本执行环境

10.1.1 寄存器的扩展

10.1.2 基本的工作模式

10.1.3 线性地址

10.2 现代处理器的结构和特点

10.2.1 流水线

10.2.2 高速缓存

10.2.3 乱序执行

10.2.4 寄存器重命名

10.2.5 分支目标预测

10.3 32位模式的指令系统

10.3.1 32位处理器的寻址方式

10.3.2 操作数大小的指令前缀

10.3.3 一般指令的扩展

本章习题

第11章 进入保护模式

11.1 代码清单11-1

11.2 全局描述符表

11.3 存储器的段描述符

11.4 安装存储器的段描述符并加载GDTR

11.5 关于第21条地址线A20的问题

11.6 保护模式下的内存访问

11.7 清空流水线并串行化处理器

11.8 保护模式下的栈

11.8.1 关于栈段描述符中的界限值

11.8.2 检验32位下的栈操作

11.9 程序的运行和调试

11.9.1 运行程序并观察结果

11.9.2 处理器刚加电时的段寄存器状态

11.9.3 设置PE位后的段寄存器状态

11.9.4 JMP指令执行后的段寄存器状态

11.9.5 察看全局描述符表GDT

11.9.6 察看控制寄存器的内容

本章习题

第12章 存储器的保护

12.1 代码清单12-1

12.2 进入32位保护模式

12.2.1 话说mov ds,ax和mov ds,eax

12.2.2 创建GDT并安装段描述符

12.3 修改段寄存器时的保护

12.4 地址变换时的保护

12.4.1 代码段执行时的保护

12.4.2 栈操作时的保护

12.4.3 数据访问时的保护

12.5 使用别名访问代码段对字符排序

12.6 程序的编译和运行

本章习题

第13章 程序的动态加载和执行

13.1 本章代码清单

13.2 内核的结构、功能和加载

13.2.1 内核的结构

13.2.2 内核的加载

13.2.3 安装内核的段描述符

13.3 在内核中执行

13.4 用户程序的加载和重定位

13.4.1 用户程序的结构

13.4.2 计算用户程序占用的扇区数

13.4.3 简单的动态内存分配

13.4.4 段的重定位和描述符的创建

13.4.5 重定位用户程序内的符号地址

13.5 执行用户程序

13.6 代码的编译、运行和调试

本章习题

第14章 任务和特权级保护

14.1 任务的隔离和特权级保护

14.1.1 任务、任务的LDT和TSS

14.1.2 全局空间和局部空间

14.1.3 特权级保护概述

14.2 代码清单14-1

14.3 内核程序的初始化

14.3.1 调用门

14.3.2 调用门的安装和测试

14.4 加载用户程序并创建任务

14.4.1 任务控制块和TCB链

14.4.2 使用栈传递过程参数

14.4.3 加载用户程序

14.4.4 创建局部描述符表

14.4.5 重定位U-SALT表

14.4.6 创建0、1和2特权级的栈

14.4.7 安装LDT描述符到GDT中

14.4.8 任务状态段TSS的格式

14.4.9 创建任务状态段TSS

14.4.10 安装TSS描述符到GDT中

14.4.11 带参数的过程返回指令

14.5 用户程序的执行

14.5.1 通过调用门转移控制的完整过程

14.5.2 进入3特权级的用户程序的执行

14.5.3 检查调用者的请求特权级RPL

14.5.4 在Bochs中调试程序的新方法

本章习题

第15章 任务切换

15.1 本章代码清单

15.2 任务切换前的设置

15.3 任务切换的方法

15.4 用call/jmp/iret指令发起任务切换的实例

15.5 处理器在实施任务切换时的操作

15.6 程序的编译和运行

本章习题

第16章 分页机制和动态页面分配

16.1 分页机制概述

16.1.1 简单的分页模型

16.1.2 页目录、页表和页

16.1.3 地址变换的具体过程

16.2 本章代码清单

16.3 使内核在分页机制下工作

16.3.1 创建内核的页目录表和页表

16.3.2 任务全局空间和局部空间的页面映射

16.4 创建内核任务

16.4.1 内核的虚拟内存分配

16.4.2 页面位映射串和空闲页的查找

16.4.3 创建页表并登记分配的页

16.4.4 创建内核任务的TSS

16.5 用户任务的创建和切换

16.5.1 多段模型和段页式内存管理

16.5.2 平坦模型和用户程序的结构

16.5.3 用户任务的虚拟地址空间分配

16.5.4 用户程序的加载

16.5.5 段描述符的创建(平坦模型)

16.5.6 重定位U-SALT并复制页目录表

16.5.7 切换到用户任务执行

16.6 程序的编译、执行和调试

16.6.1 本章程序的编译和运行方法

16.6.2 察看CR3寄存器的内容

16.6.3 察看线性地址对应的物理页信息

16.6.4 察看当前任务的页表信息

16.6.5 使用线性(虚拟)地址调试程序

本章习题

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

17.1 中断和异常

17.1.1 中断和异常概述

17.1.2 中断描述符表、中断门和陷阱门

17.1.3 中断和异常处理程序的保护

17.1.4 中断任务

17.1.5 错误代码

17.2 本章代码清单

17.3 内核的加载和初始化

17.3.1 彻底终结多段模型

17.3.2 创建中断描述符表

17.3.3 用定时中断实施任务切换

17.3.4 8259A芯片的初始化

17.3.5 平坦模型下的字符串显示例程

17.4 内核任务的创建

17.4.1 创建内核任务的TCB

17.4.2 宏汇编技术

17.5 用户任务的创建

17.5.1 准备加载用户程序

17.5.2 转换后援缓冲器的刷新

17.5.3 用户任务的创建和初始化

17.6 程序的编译和执行

本章习题

附录Ⅰ 本书用到的x86指令及其页码

附录Ⅱ 本书用到的重要图表及其页码

The users who browse this book also browse


No browse record.