基本信息
- 商品名:正版 X86汇编语言从实模式到保护模式97871□1187995李忠
- ISBN:9787121187995
- 定价:56
- 出版社:电子工业出版社
- 作者:李忠,王□□,余洁
参考信息(以实物为准)
- 出版时间:2013-01-01
- 印刷时间:
- 版次:1
- 印次:1
- 包装:平装
- 开本:16开
- 用纸:
- 页数:
- 字数:
编辑推荐
本书全面、系统、深入地介绍x86处理器在实模式,特别是保护模式下的工作原理 ,解开了计算机从16位到3□位工作模式的秘密;还以大量的实例,多侧面地展示了操作系统在整个计算机系统中的地位和作用。
内容简介
李忠编著的《x86汇编语言:从实模式到保护模式》采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的Intel处理器为基础,详细讲解了Intel处理器的指令系统和工作模式,以大量的代码演示了16/3□/64位软件的开发方法,介绍了处理器的16位实模式和3□位保护模式,以及基本的指令系统。
《x86汇编语言:从实模式到保护模式》是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬件,在不借助于BIOS、DOS、Windows、Linux或者任何其他软件支持的情况下来显示字符、读取硬盘数据、控制其他硬件等。本书可作为大专院校相关专业学生和计算机编程爱好者的教程。
目录
□□部分 预备知识
□□章 十六进制计数法
1.1 二进制计数法回顾
1.1.1 关于二进制计数法
1.1.□ 二进制到十进制的转换
1.1.3 十进制到二进制的转换
1.□ 十六进制计数法
1.□.1 十六进制计数法的原理
1.□.□ 十六进制到十进制的转换
1.□.3 十进制到十六进制的转换
1.3 为什么需要十六进制
本章习题
第□章 处理器、内存和指令
□.1 □早的处理器
□.□ 寄存器和算术逻辑部件
□.3 内存储器
□.4 指令和指令集
□.5 古老的Intel 处理器
□.5.1 的通用寄存器
□.5.□ 程序的重定位难题
□.5.3 内存分段机制
□.5.4 的内存分段机制
本章习题
第3章 汇编语言和汇编软件
3.1 汇编语言简介
3.□ NASM编译器
3.□.1 从网上下载NASM安装程序
3.□.□ 安装NASM编译器
3.□.3 下载配书源码和工具
3.□.4 用Nasmide体验代码的书写和编译过程
3.□.5 用HexView观察编译后的机器代码
本章习题
第4章 虚拟机的安装和使用
4.1 计算机的启动过程
4.1.1 如何将编译好的程序提交给处理器
4.1.□ 计算机的加电和复位
4.1.3 基本输入输出系统
4.1.4 硬盘及其工作原理
4.1.5 一切从主引导扇区开始
4.□ 创建和使用虚拟机
4.□.1 别害怕,虚拟机是软件
4.□.□ 下载Oracle VM VirtualBox
4.□.3 安装Oracle VM VirtualBox
4.□.4 创建一台虚拟PC
4.□.5 虚拟硬盘简介
4.□.6 练习使用FixVhdWr工具向虚拟硬盘写数据
第□部分 位处理器下的实模式
第5章 编写主引导扇区代码
5.1 欢迎来到主引导扇区
5.□ 注释
5.3 在屏幕上显示文字
5.3.1 显卡和显存
5.3.□ 初始化段寄存器
5.3.3 显存的访问和ASCII代码
5.3.4 显示字符
5.4 显示标号的汇编地址
5.4.1 标号
5.4.□ 如何显示十进制数字
5.4.3 在程序中声明并初始化数据
5.4.4 分解数的各个数位
5.4.5 显示分解出来的各个数位
5.5 使程序进入无限循环状态
5.6 完成并编译主引导扇区代码
5.6.1 主引导扇区有效标志
5.6.□ 代码的保存和编译
5.7 加载和运行主引导扇区代码
5.7.1 把编译后的指令写入主引导扇区
5.7.□ 启动虚拟机观察运行结果
5.7.3 程序的调试
本章习题
第6章 相同的功能,不同的代码
6.1 代码清单6-1
6.□ 跳过非指令的数据区
6.3 在数据声明中使用字面值
6.4 段地址的初始化
6.5 段之间的批量数据传送
6.6 使用循环分解数位
6.7 计算机中的负数
6.7.1 无符号数和有符号数
6.7.□ 处理器视角中的数据类型
6.8 数位的显示
6.9 其他标志位和条件转移指令
6.9.1 奇偶标志位PF
6.9.□ 进位标志CF
6.9.3 溢出标志OF
6.9.4 现有指令对标志位的影响
6.9.5 条件转移指令
6.10 NASM编译器的$和$$标记
6.11 观察运行结果
本章习题
第7章 比高斯更快的计算
7.1 从1加到100的故事
7.□ 代码清单7-1
7.3 显示字符串
7.4 计算1到100的累加和
7.5 累加和各个数位的分解与显示
7.5.1 堆栈和堆栈段的初始化
7.5.□ 分解各个数位并压栈
7.5.3 出栈并显示各个数位
7.5.4 进一步认识堆栈
7.6 程序的编译和运行
7.7 处理器的寻址方式
7.7.1 寄存器寻址
7.7.□ 立即寻址
7.7.3 内存寻址
本章习题
第8章 硬盘和显卡的访问与控制
8.1 本章代码清单
8.1.1 本章意图
8.1.□ 代码清单8-1
8.□ 用户程序的结构
8.□.1 分段、段的汇编地址和段内汇编地址
8.□.□ 用户程序头部
8.3 加载程序(器)的工作流程
8.3.1 初始化和决定加载位置
8.3.□ 准备加载用户程序
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 处理器的无条件转移指令
8.4 用户程序的工作流程
8.4.1 初始化段寄存器和堆栈切换
8.4.□ 调用字符串显示例程
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.□ 可屏蔽中断
9.1.3 实模式下的中断向量表
9.1.4 实时时钟、CMOS RAM和BCD编码
9.1.5 代码清单9-1
9.1.6 初始化8□59、RTC和中断向量表
9.1.7 使处理器进入低功耗状态
9.1.8 实时时钟中断的处理过程
9.1.9 代码清单9-1的编译和运行
9.□ 内部中断
9.3 软中断
9.3.1 常用的BIOS中断
9.3.□ 代码清单9-□
9.3.3 从键盘读字符并显示
9.3.4 代码清单9-□的编译和运行
本章习题
第3部分 位保护模式
□□0章 位Intel微处理器编程架构
10.1 IA-3□架构的基本执行环境
10.1.1 寄存器的扩展
10.1.□ 基本的工作模式
10.1.3 线性地址
10.□ 现代处理器的结构和特点
10.□.1 流水线
10.□.□ 高速缓存
10.□.3 乱序执行
10.□.4 寄存器重命名
10.□.5 分支目标预测
10.3 位模式的指令系统
10.3.1 位处理器的寻址方式
10.3.□ 操作数大小的指令前缀
10.3.3 一般指令的扩展
本章习题
□□1章 进入保护模式
11.1 代码清单11-1
11.□ 全局描述符表
11.3 存储器的段描述符
11.4 安装存储器的段描述符并加载GDTR
11.5 关于第□1条地址线A□0的问题
11.6 保护模式下的内存访问
11.7 清空流水线并串行化处理器
11.8 保护模式下的堆栈
11.8.1 关于堆栈段描述符中的界限值
11.8.□ 检验3□位下的堆栈操作
11.9 程序的编译和运行
本章习题
□□□章 存储器的保护
1□.1 代码清单1□-1
1□.□ 进入3□位保护模式
1□.□.1 话说mov ds,ax和mov ds,eax
1□.□.□ 创建GDT并安装段描述符
1□.3 修改段寄存器时的保护
1□.4 地址变换时的保护
1□.4.1 代码段执行时的保护
1□.4.□ 堆栈操作时的保护
1□.4.3 数据访问时的保护
1□.5 使用别名访问代码段对字符排序
1□.6 程序的编译和运行
本章习题
□□3章 程序的动态加载和执行
13.1 本章代码清单
13.□ 内核的结构、功能和加载
13.□.1 内核的结构
13.□.□ 内核的加载
13.□.3 安装内核的段描述符
13.3 在内核中执行
13.4 用户程序的加载和重定位
13.4.1 用户程序的结构
13.4.□ 计算用户程序占用的扇区数
13.4.3 简单的动态内存分配
13.4.4 段的重定位和描述符的创建
13.4.5 重定位用户程序内的符号地址
13.5 执行用户程序
13.6 代码的编译、运行和调试
本章习题
□□4章 任务和特权级保护
14.1 任务的隔离和特权级保护
14.1.1 任务、任务的LDT和TSS
14.1.□ 全局空间和局部空间
14.1.3 特权级保护概述
14.□ 代码清单14-1
14.3 内核程序的初始化
14.3.1 调用门
14.3.□ 调用门的安装和测试
14.4 加载用户程序并创建任务
14.4.1 任务控制块和TCB链
14.4.□ 使用堆栈传递过程参数
14.4.3 加载用户程序
14.4.4 创建局部描述符表
14.4.5 重定位U-SALT表
14.4.6 创建0、1和□特权级的堆栈
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.□ 进入3特权级的用户程序的执行
14.5.3 检查调用者的请求特权级RPL
本章习题
□□5章 任 务 切 换
15.1 本章代码清单
15.□ 任务切换前的设置
15.3 任务切换的方法
15.4 用call/jmp/iret指令发起任务切换的实例
15.5 处理器在实施任务切换时的操作
15.6 程序的编译和运行
本章习题
□□6章 分页机制和动态页面分配
16.1 分页机制概述
16.1.1 简单的分页模型
16.1.□ 页目录、页表和页
16.1.3 地址变换的具体过程
16.□ 本章代码清单
16.3 使内核在分页机制下工作
16.3.1 创建内核的页目录和页表
16.3.□ 任务全局空间和局部空间的页面映射
16.4 创建内核任务
16.4.1 内核的虚拟内存分配
16.4.□ 页面位映射串和空闲页的查找
16.4.3 创建页表并登记分配的页
16.4.4 创建内核任务的TSS
16.5 用户任务的创建和切换
16.5.1 多段模型和段页式内存管理
16.5.□ 平坦模型和用户程序的结构
16.5.3 用户任务的虚拟地址空间分配
16.5.4 用户程序的加载
16.5.5 段描述符的创建(平坦模型)
16.5.6 重定位U-SALT并□□页目录表
16.5.7 切换到用户任务执行
16.6 程序的编译和执行
本章习题
□□7章 中断和异常的处理
17.1 中断和异常
17.1.1 中断和异常概述
17.1.□ 中断描述符表、中断门和陷阱门
17.1.3 中断和异常处理程序的保护
17.1.4 中断任务
17.1.5 错误代码
17.□ 本章代码清单
17.3 内核的加载和初始化
17.3.1 彻底终结多段模型
17.3.□ 创建中断描述符表
17.3.3 用定时中断实施任务切换
17.3.4 A芯片的初始化
17.3.5 平坦模型下的字符串显示例程
17.4 内核任务的创建
17.4.1 创建内核任务的TCB
17.4.□ 宏汇编技术
17.5 用户任务的创建
17.5.1 准备加载用户程序
17.5.□ 转换后援缓冲器的刷新
17.5.3 用户任务的创建和初始化
17.6 程序的编译和执行
本章习题