5.0 用户推荐指数
互联网
类型
9.2
豆瓣评分
可以朗读
语音朗读
372千字
字数
2013-01-01
发行日期
展开全部
主编推荐语
想真正理解计算机的工作原理,掌握它内部的运行机制,学习汇编语言必不可少。
内容简介
每一种处理器都有它自己的机器指令集,而汇编语言的发明则是为了方便这些机器指令的记忆和书写。尽管汇编语言已经较少用于大型软件程序的开发,但从学习者的角度来看,要想真正理解计算机的工作原理,掌握它内部的运行机制,学习汇编语言是必不可少的。
本书采用开源的NASM汇编语言编译器和VirtualBox虚拟机软件,以个人计算机广泛采用的Intel处理器为基础,详细讲解了Intel处理器的指令系统和工作模式,以大量的代码演示了16/32/64位软件的开发方法,介绍了处理器的16位实模式和32位保护模式,以及基本的指令系统。
这是一本有趣的书,它没有把篇幅花在计算一些枯燥的数学题上。相反,它教你如何直接控制硬件,在不借助于BIOS、DOS、Windows、Linux或者任何其他软件支持的情况下来显示字符、读取硬盘数据、控制其他硬件等。本书可作为大专院校相关专业学生和计算机编程爱好者的教程。
目录
- 版权信息
- 前言
- 第1部分 预备知识
- 第1章 十六进制计数法
- 1.1 二进制计数法回顾
- 1.1.1 关于二进制计数法
- 1.1.2 二进制到十进制的转换
- 1.1.3 十进制到二进制的转换
- 1.2 十六进制计数法
- 1.2.1 十六进制计数法的原理
- 1.2.2 十六进制到十进制的转换
- 1.2.3 十进制到十六进制的转换
- 1.2.4 为什么需要十六进制
- 1.3 使用Windows计算器方便你的学习过程
- 本章习题
- 第2章 处理器、内存和指令
- 2.1 最早的处理器
- 2.2 寄存器和算术逻辑部件
- 2.3 内存储器
- 2.4 指令和指令集
- 2.5 古老的Intel 8086处理器
- 2.5.1 8086的通用寄存器
- 2.5.2 程序的重定位难题
- 2.5.3 内存分段机制
- 2.5.4 8086的内存分段机制
- 本章习题
- 第3章 汇编语言和汇编软件
- 3.1 汇编语言简介
- 3.2 NASM编译器
- 3.2.1 NASM的下载和安装
- 3.2.2 代码的书写和编译过程
- 3.2.3 用HexView观察编译后的机器代码
- 本章习题
- 第4章 虚拟机的安装和使用
- 4.1 计算机的启动过程
- 4.1.1 如何将编译好的程序提交给处理器
- 4.1.2 计算机的加电和复位
- 4.1.3 基本输入输出系统
- 4.1.4 硬盘及其工作原理
- 4.1.5 一切从主引导扇区开始
- 4.2 创建和使用虚拟机
- 4.2.1 别害怕,虚拟机是软件
- 4.2.2 下载和安装Oracle VM VirtualBox
- 4.2.3 虚拟硬盘简介
- 4.2.4 练习使用FixVhdWr工具向虚拟硬盘写数据
- 第2部分 实模式
- 第5章 编写主引导扇区代码
- 5.1 本章代码清单
- 5.2 欢迎来到主引导扇区
- 5.3 注释
- 5.4 在屏幕上显示文字
- 5.4.1 显卡和显存
- 5.4.2 初始化段寄存器
- 5.4.3 显存的访问和ASCII代码
- 5.4.4 显示字符
- 5.4.5 MOV指令的格式
- 5.5 显示标号的汇编地址
- 5.5.1 标号
- 5.5.2 如何显示十进制数字
- 5.5.3 在程序中声明并初始化数据
- 5.5.4 分解数的各个数位
- 5.5.5 显示分解出来的各个数位
- 5.6 使程序进入无限循环状态
- 5.7 完成并编译主引导扇区代码
- 5.7.1 主引导扇区有效标志
- 5.7.2 代码的保存和编译
- 5.8 加载和运行主引导扇区代码
- 5.8.1 把编译后的指令写入主引导扇区
- 5.8.2 启动虚拟机观察运行结果
- 5.9 程序的调试技术
- 5.9.1 开源的Bochs虚拟机软件
- 5.9.2 Bochs下的程序调试入门
- 本章习题
- 第6章 相同的功能,不同的代码
- 6.1 代码清单6-1
- 6.2 跳过非指令的数据区
- 6.3 在数据声明中使用字面值
- 6.4 段地址的初始化
- 6.5 段之间的批量数据传送
- 6.6 使用循环分解数位
- 6.7 计算机中的负数
- 6.7.1 无符号数和有符号数
- 6.7.2 处理器视角中的数据类型
- 6.8 数位的显示
- 6.9 其他标志位和条件转移指令
- 6.9.1 奇偶标志位PF
- 6.9.2 进位标志CF
- 6.9.3 溢出标志OF
- 6.9.4 现有指令对标志位的影响
- 6.9.5 条件转移指令
- 6.10 NASM编译器的$和$$标记
- 6.11 观察运行结果
- 6.12 本章程序的调试
- 6.12.1 调试命令“n”的使用
- 6.12.2 调试命令“u”的使用
- 6.12.3 用调试命令“info”察看标志位
- 本章习题
- 第7章 比高斯更快的计算
- 7.1 从1加到100的故事
- 7.2 代码清单7-1
- 7.3 显示字符串
- 7.4 计算1到100的累加和
- 7.5 累加和各个数位的分解与显示
- 7.5.1 栈和栈段的初始化
- 7.5.2 分解各个数位并压栈
- 7.5.3 出栈并显示各个数位
- 7.5.4 进一步认识栈
- 7.6 程序的编译和运行
- 7.6.1 观察程序的运行结果
- 7.6.2 在调试过程中察看栈中内容
- 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指令及其页码
- 附录Ⅱ 本书用到的重要图表及其页码
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。