汇编语言 基于x86处理器(原书第7版) 内容简介
本书是汇编语言课程的经典教材,系统介绍x86和Intel64处理器的汇编语言编程和架构。前9章为汇编语言的核心概念,包括:汇编语言基础,x86处理器架构,数据传送、寻址和算术运算,过程,条件处理,整数运算,高级过程,以及字符串和数组。本书为原书第7版,增加了部分实例程序的讨论,补充了更多的复习题和关键术语,介绍了64位编程;还有配套的网上资料,提供完整的程序清单、复习题答案和编程练习的解决方案。
汇编语言 基于x86处理器(原书第7版) 目录
第1章 基本概念
1.1 欢迎来到汇编语言的世界
1.1.1 读者可能会问的问题
1.1.2 汇编语言的应用
1.1.3 本节回顾
1.2 虚拟机概念
1.3 数据表示
1.3.1 二进制整数
1.3.2 二进制加法
1.3.3 整数存储大小
1.3.4 十六进制整数
1.3.5 十六进制加法
1.3.6 有符号二进制整数
1.3.7 二进制减法
1.3.8 字符存储
1.3.9 本节回顾
1.4 布尔表达式
1.4.1 布尔函数真值表
1.4.2 本节回顾
1.5 本章小结
1.6 关键术语
1.7 复习题和练习
1.7.1 简答题
1.7.2 算法基础
第2章 x86处理器架构
2.1 一般概念
2.1.1 基本微机设计
2.1.2 指令执行周期
2.1.3 读取内存
2.1.4 加载并执行程序
2.1.5 本节回顾
2.2 32位x86处理器
2.2.1 操作模式
2.2.2 基本执行环境
2.2.3 x86内存管理
2.2.4 本节回顾
2.3 64位x86-64处理器
2.3.1 64位操作模式
2.3.2 基本64位执行环境
2.4 典型x86计算机组件
2.4.1 主板
2.4.2 内存
2.4.3 本节回顾
2.5 输入输出系统
2.5.1 I/O访问层次
2.5.2 本节回顾
2.6 本章小结
2.7 关键术语
2.8 复习题
第3章 汇编语言基础
3.1 基本语言元素
3.1.1 第一个汇编语言程序
3.1.2 整数常量
3.1.3 整型常量表达式
3.1.4 实数常量
3.1.5 字符常量
3.1.6 字符串常量
3.1.7 保留字
3.1.8 标识符
3.1.9 伪指令
3.1.10 指令
3.1.11 本节回顾
3.2 示例:整数加减法
3.2.1 AddTwo程序
3.2.2 运行和调试AddTwo程序
3.2.3 程序模板
3.2.4 本节回顾
3.3 汇编、链接和运行程序
3.3.1 汇编-链接-执行周期
3.3.2 列表文件
3.3.3 本节回顾
3.4 定义数据
3.4.1 内部数据类型
3.4.2 数据定义语句
3.4.3 向AddTwo程序添加一个变量
3.4.4 定义BYTE和SBYTE数据
3.4.5 定义WORD和SWORD数据
3.4.6 定义DWORD和SDWORD数据
3.4.7 定义QWORD数据
3.4.8 定义压缩BCD(TBYTE)数据
3.4.9 定义浮点类型
3.4.10 变量加法程序
3.4.11 小端顺序
3.4.12 声明未初始化数据
3.4.13 本节回顾
3.5 符号常量
3.5.1 等号伪指令
3.5.2 计算数组和字符串的大小
3.5.3 EQU伪指令
3.5.4 TEXTEQU伪指令
3.5.5 本节回顾
3.6 64位编程
3.7 本章小结
3.8 关键术语
3.8.1 术语
3.8.2 指令、运算符和伪指令
3.9 复习题和练习
3.9.1 简答题
3.9.2 算法基础
3.10 编程练习
第4章 数据传送、寻址和算术运算
4.1 数据传送指令
4.1.1 引言
4.1.2 操作数类型
4.1.3 直接内存操作数
4.1.4 MOV指令
4.1.5 整数的全零/符号扩展
4.1.6 LAHF和SHF指令
4.1.7 XCHG指令
4.1.8 直接-偏移量操作数
4.1.9 示例程序(Moves)
4.1.10 本节回顾
4.2 加法和减法
4.2.1 INC和DEC指令
4.2.2 ADD指令
4.2.3 SUB指令
4.2.4 NEG指令
4.2.5 执行算术表达式
4.2.6 加减法影响的标志位
4.2.7 示例程序(AddSubTest)
4.2.8 本节回顾
4.3 与数据相关的运算符和伪指令
4.3.1 OFFSET运算符
4.3.2 ALIGN伪指令
4.3.3 PTR运算符
4.3.4 TYPE运算符
4.3.5 LENGTHOF运算符
4.3.6 SIZEOF运算符
4.3.7 LABEL伪指令
4.3.8 本节回顾
4.4 间接寻址
4.4.1 间接操作数
4.4.2 数组
4.4.3 变址操作数
4.4.4 指针
4.4.5 本节回顾
4.5 JMP和LOOP指令
4.5.1 JMP指令
4.5.2 LOOP指令
4.5.3 在Visual Studio调试器中显示数组
4.5.4 整数数组求和
4.5.5 复制字符串
4.5.6 本节回顾
4.6 64位编程
4.6.1 MOV指令
4.6.2 64位的SumArray程序
4.6.3 加法和减法
4.6.4 本节回顾
4.7 本章小结
4.8 关键术语
4.8.1 术语
4.8.2 指令、运算符和伪指令
4.9 复习题和练习
4.9.1 简答题
4.9.2 算法基础
4.10 编程练习
第5章 过程
5.1 堆栈操作
5.1.1 运行时堆栈(32位模式)
5.1.2 PUSH和POP指令
5.1.3 本节回顾
5.2 定义并使用过程
5.2.1 PROC伪指令
5.2.2 CALL和RET指令
5.2.3 过程调用嵌套
5.2.4 向过程传递寄存器参数
5.2.5 示例:整数数组求和
5.2.6 保存和恢复寄存器
5.2.7 本节回顾
5.3 链接到外部库
5.3.1 背景知识
5.3.2 本节回顾
5.4 Irvine32链接库
5.4.1 创建库的动机
5.4.2 概述
5.4.3 过程详细说明
5.4.4 库测试程序
5.4.5 本节回顾
5.5 64位汇编编程
5.5.1 Irvine64链接库
5.5.2 调用64位子程序
5.5.3 x64调用规范
5.5.4 调用过程示例
5.6 本章小结
5.7 关键术语
5.7.1 术语
5.7.2 指令、运算符和伪指令
5.8 复习题和练习
5.8.1 简答题
5.8.2 算法基础
5.9 编程练习
第6章 条件处理
6.1 条件分支
6.2 布尔和比较指令
6.2.1 CPU状态标志
6.2.2 AND指令
6.2.3 OR指令
6.2.4 位映射集
6.2.5 XOR指令
6.2.6 NOT指令
6.2.7 TEST指令
6.2.8 CMP指令
6.2.9 置位和清除单个CPU标志位
6.2.10 64位模式下的布尔指令
6.2.11 本节回顾
6.3 条件跳转
6.3.1 条件结构
6.3.2 Jcond指令
6.3.3 条件跳转指令类型
6.3.4 条件跳转应用
6.3.5 本节回顾
6.4 条件循环指令
6.4.1 LOOPZ和LOOPE指令
6.4.2 LOOPNZ和LOOPNE指令
6.4.3 本节回顾
6.5 条件结构
6.5.1 块结构的IF语句
6.5.2 复合表达式
6.5.3 WHILE循环
6.5.4 表驱动选择
6.5.5 本节回顾
6.6 应用:有限状态机
6.6.1 验证输入字符串
6.6.2 验证有符号整数
6.6.3 本节回顾
6.7 条件控制流伪指令
6.7.1 新建IF语句
6.7.2 有符号数和无符号数的比较
6.7.3 复合表达式
6.7.4 用.REPEAT和.WHILE创建循环
6.8 本章小结
6.9 关键术语
6.9.1 术语
6.9.2 指令、运算符和伪指令
6.10 复习题和练习
6.10.1 简答题
6.10.2 算法基础
6.11 编程练习
6.11.1 测试代码的建议
6.11.2 习题
第7章 整数运算
7.1 移位和循环移位指令
7.1.1 逻辑移位和算术移位
7.1.2 SHL指令
7.1.3 SHR指令
7.1.4 SAL和SAR指令
7.1.5 ROL指令
7.1.6 ROR指令
7.1.7 RCL和RCR指令
7.1.8 有符号数溢出
7.1.9 SHLD/SHRD指令
7.1.10 本节回顾
7.2 移位和循环移位的应用
7.2.1 多个双字的移位
7.2.2 二进制乘法
7.2.3 显示二进制位
7.2.4 提取文件日期字段
7.2.5 本节回顾
7.3 乘法和除法指令
7.3.1 MUL指令
7.3.2 IMUL指令
7.3.3 测量程序执行时间
7.3.4 DIV指令
7.3.5 有符号数除法
7.3.6 实现算术表达式
7.3.7 本节回顾
7.4 扩展加减法
7.4.1 ADC指令
7.4.2 扩展加法示例
7.4.3 SBB指令
7.4.4 本节回顾
7.5 ASCII和非压缩十进制运算
7.5.1 AAA指令
7.5.2 AAS指令
7.5.3 AAM指令
7.5.4 AAD指令
7.5.5 本节回顾
7.6 压缩十进制运算
7.6.1 DAA指令
7.6.2 DAS指令
7.6.3 本节回顾
7.7 本章小结
7.8 关键术语
7.8.1 术语
7.8.2 指令、运算符和伪指令
7.9 复习题和练习
7.9.1 简答题
7.9.2 算法基础
7.10 编程练习
第8章 高级过程
8.1 引言
8.2 堆栈帧
8.2.1 堆栈参数
8.2.2 寄存器参数的缺点
8.2.3 访问堆栈参数
8.2.4 32位调用规范
8.2.5 局部变量
8.2.6 引用参数
8.2.7 LEA指令
8.2.8 ENTER和LEAVE指令
8.2.9 LOCAL伪指令
8.2.10 Microsoft x64调用规范
8.2.11 本节回顾
8.3 递归
8.3.1 递归求和
8.3.2 计算阶乘
8.3.3 本节回顾
8.4 INVOKE、ADDR、PROC和PROTO
8.4.1 INVOKE伪指令
8.4.2 ADDR运算符
8.4.3 PROC伪指令
8.4.4 PROTO伪指令
8.4.5 参数类别
8.4.6 示例:交换两个整数
8.4.7 调试提示
8.4.8 WriteStackFrame过程
8.4.9 本节回顾
8.5 新建多模块程序
8.5.1 隐藏和导出过程名
8.5.2 调用外部过程
8.5.3 跨模块使用变量和标号
8.5.4 示例:ArraySum程序
8.5.5 用Extern新建模块
8.5.6 用INVOKE和PROTO新建模块
8.5.7 本节回顾
8.6 参数的高级用法(可选主题)
8.6.1 受USES运算符影响的堆栈
8.6.2 向堆栈传递8位和16位参数
8.6.3 传递64位参数
8.6.4 非双字局部变量
8.7 Java字节码(可选主题)
8.7.1 Java虚拟机
8.7.2 指令集
8.7.3 Java反汇编示例
8.7.4 示例:条件分支
8.8 本章小结
8.9 关键术语
8.9.1 术语
8.9.2 指令、运算符和伪指令
8.10 复习题和练习
8.10.1 简答题
8.10.2 算法基础
8.11 编程练习
第9章 字符串和数组
9.1 引言
9.2 字符串基本指令
9.2.1 MOVSB、MOVSW和MOVSD
9.2.2 CMPSB、CMPSW和CMPSD
9.2.3 SCASB、SCASW和SCASD
9.2.4 STOSB、STOSW和STOSD
9.2.5 LODSB、LODSW和LODSD
9.2.6 本节回顾
9.3 部分字符串过程
9.3.1 Str_compare过程
9.3.2 Str_length过程
9.3.3 Str_copy过程
9.3.4 Str_trim过程
9.3.5 Str_ucase过程
9.3.6 字符串库演示程序
9.3.7 Irivne64库中的字符串过程
9.3.8 本节回顾
9.4 二维数组
9.4.1 行列顺序
9.4.2 基址-变址操作数
9.4.3 基址-变址-偏移量操作数
9.4.4 64位模式下的基址-变址操作数
9.4.5 本节回顾
9.5 整数数组的检索和排序
9.5.1 冒泡排序
9.5.2 对半查找
9.5.3 本节回顾
9.6 Java字节码:字符串处理(可选主题)
9.7 本章小结
9.8 关键术语和指令
9.9 复习题和练习
9.9.1 简答题
9.9.2 算法基础
9.10 编程练习
第10章 结构和宏
10.1 结构
10.1.1 定义结构
10.1.2 声明结构变量
10.1.3 引用结构变量
10.1.4 示例:显示系统时间
10.1.5 结构包含结构
10.1.6 示例:醉汉行走
10.1.7 声明和使用联合
10.1.8 本节回顾
10.2 宏
10.2.1 概述
10.2.2 定义宏
10.2.3 调用宏
10.2.4 其他宏特性
10.2.5 使用本书的宏库(仅32位模式)
10.2.6 示例程序:封装器
10.2.7 本节回顾
10.3 条件汇编伪指令
10.3.1 检查缺失的参数
10.3.2 默认参数初始值设定
10.3.3 布尔表达式
10.3.4 IF、ELSE和ENDIF伪指令
10.3.5 IFIDN和IFIDNI伪指令
10.3.6 示例:矩阵行求和
10.3.7 特殊运算符
10.3.8 宏函数
10.3.9 本节回顾
10.4 定义重复语句块
10.4.1 WHILE伪指令
10.4.2 REPEAT伪指令
10.4.3 FOR伪指令
10.4.4 FORC伪指令
10.4.5 示例:链表
10.4.6 本节回顾
10.5 本章小结
10.6 关键术语
10.6.1 术语
10.6.2 运算符和伪指令
10.7 复习题和练习
10.7.1 简答题
10.7.2 算法基础
10.8 编程练习
第11章 MS-Windows编程
11.1 Win32控制台编程
11.1.1 背景知识
11.1.2 Win32控制台函数
11.1.3 显示消息框
11.1.4 控制台输入
11.1.5 控制台输出
11.1.6 读写文件
11.1.7 Irvine32链接库的文件I/O
11.1.8 测试文件I/O过程
11.1.9 控制台窗口操作
11.1.10 控制光标
11.1.11 控制文本颜色
11.1.12 时间与日期函数
11.1.13 使用64位Windows API
11.1.14 本节回顾
11.2 编写图形化的Windows应用程序
11.2.1 必要的结构
11.2.2 MessageBox函数
11.2.3 WinMain过程
11.2.4 WinProc过程
11.2.5 ErrorHandler过程
11.2.6 程序清单
11.2.7 本节回顾
11.3 动态内存分配
11.3.1 Heap Test程序
11.3.2 本节回顾
11.4 x86存储管理
11.4.1 线性地址
11.4.2 页转换
11.4.3 本节回顾
11.5 本章小结
11.6 关键术语
11.7 复习题和练习
11.7.1 简答题
11.7.2 算法基础
11.8 编程练习
第12章 浮点数处理与指令编码
12.1 浮点数二进制表示
12.1.1 IEEE二进制浮点数表示
12.1.2 阶码
12.1.3 规格化二进制浮点数
12.1.4 新建IEEE表示
12.1.5 十进制小数转换为二进制实数
12.1.6 本节回顾
12.2 浮点单元
12.2.1 FPU寄存器栈
12.2.2 舍入
12.2.3 浮点数异常
12.2.4 浮点数指令集
12.2.5 算术运算指令
12.2.6 比较浮点数值
12.2.7 读写浮点数值
12.2.8 异常同步
12.2.9 代码示例
12.2.10 混合模式运算
12.2.11 屏蔽与未屏蔽异常
12.2.12 本节回顾
12.3 x86指令编码
12.3.1 指令格式
12.3.2 单字节指令
12.3.3 立即数送寄存器
12.3.4 寄存器模式指令
12.3.5 处理器操作数大小前缀
12.3.6 内存模式指令
12.3.7 本节回顾
12.4 本章小结
12.5 关键术语
12.6 复习题和练习
12.6.1 简答题
12.6.2 算法基础
12.7 编程练习
第13章 高级语言接口
13.1 引言
13.1.1 通用规范
13.1.2 .MODEL伪指令
13.1.3 检查编译器生成的代码
13.1.4 本节回顾
13.2 内嵌汇编代码
13.2.1 Visual C++中的__asm伪指令
13.2.2 文件加密示例
13.2.3 本节回顾
13.3 32位汇编程序与C/C++的链接
13.3.1 IndexOf示例
13.3.2 调用C和C++函数
13.3.3 乘法表示例
13.3.4 调用C库函数
13.3.5 目录表程序
13.3.6 本节回顾
13.4 本章小结
13.5 关键术语
13.6 复习题
13.7 编程练习
附录A MASM参考知识
附录B x86指令集
附录C “本节回顾”问题答案
索引
汇编语言 基于x86处理器(原书第7版) 精彩文摘
汇编语言有规则吗? 大多数汇编语言规则都是以目标处理器及其机器语言的物理局限性为基础的。比如,CPU要求两个指令操作数的大小相同。与C++或Java相比,汇编语言的规则较少,因为,前者是J材语法规则来减少意外的逻辑错误,而这是以限制底层数据访问为代价的。汇编语言程序员可以很容易地绕过高级语言的限制性特征。例如,Java就不允许访问特定的内存地址j程序员可以使用JN](Java Native Interface)类来调用C函数绕过这个限制,可结果程序不容易维护。反之,汇编语言可以访问所有的内存地址。但这种自由的代价也很高:汇编语言程序员需要花费大量的时间进行调试!
本文来自不茫然未来投稿,不代表电子书资源网立场,如若转载,请联系原作者获取。