汇编语言:基于x86处理器(原书第7版)
作者 : [美]基普·欧文(Kip Irvine) 著
译者 : 贺莲 龚奕利 译
丛书名 : 计算机科学丛书
出版日期 : 2016-03-28
ISBN : 978-7-111-53036-7
定价 : 99.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 567
开本 : 16
原书名 : Assembly Language for x86 Processors,Seventh Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书介绍了x86和Intel 64位处理器下的汇编语言编程和体系结构。

图书特色

本书全面细致地讲述了汇编语言程序设计的各个方面,不仅是汇编语言本科课程的经典教材,也可作为计算机系统和体系结构的入门教材。本书专门为32位和64位Intel/Windows平台编写,用通俗易懂的语言描述学生需要掌握的核心概念,首要目标是教授学生编写并调试机器级程序,并帮助他们自然过渡到后续关于计算机体系结构和操作系统的高级课程。本书作者的网站提供了更多的资源和工具,教师和学生可以访问章目标、调试工具、补充文件,以及MASM和Visual Studio 2012的入门教程等。
本书特色
教授有效的设计技巧:自上而下的程序设计演示和讲解,让学生将技术应用于多个编程课程。
理论联系实践:学生将在机器级水平编写软件,为以后在任何操作系统/面向机器的环境中工作做好准备。
灵活的课程安排:教师可结合具体情况以不同的顺序和深度覆盖可选章节主题。

作者简介
基普·欧文(Kip Irvine) 佛罗里达国际大学高级讲师,教授计算机相关的课程。著有多本编程教材,被翻译成多国语言,涵盖的主题如汇编语言、C++、Visual Basic和COBOL。

图书前言

本书介绍x86和Intel64处理器的汇编语言编程与架构,适合作为下述几类大学课程的教材:
汇编语言编程
计算机系统基础
计算机体系结构基础
学生使用Intel或AMD处理器,用Microsoft宏汇编器(Microsoft Macro Assembler,MASM)编程,MASM运行在Microsoft Windows最新的版本上。尽管本书的初衷是作为大学生的编程教材,但它也是计算机体系结构课程的有效补充。本书广受欢迎,前几个版本已被翻译为多种语言。
重点主题 本版所含主题可以自然过渡到讲述计算机体系结构、操作系统和编写编译器的后续课程:
虚拟机概念
指令集架构
基本布尔运算
指令执行周期
内存访问和握手
中断和轮询
基于硬件的I/O
浮点数二进制表示
其他主题则专门针对x86和Intel64架构:
受保护的内存和分页
实地址模式的内存分段
16位中断处理
MS-DOS和BIOS系统调用(中断)
浮点单元架构和编程
指令编码
本书中的某些例子还可以用于计算机科学课程体系中的后续课程:
搜索与排序算法
高级语言结构
有限状态机
代码优化示例
第7版的新内容
这一版增加了对程序示例的讨论,添加了更多的复习题和关键术语,介绍了64位编程,降低了对子程序库的依赖性。具体内容如下:
本版前面的几章现在包含了以64位CPU架构和编程为主的小节,并且还创建了子程序库的64位版本Irvine64。
修改、替换了很多复习题和练习,部分题目从章节内移动到该章末尾,且习题分为两部分:简答题和算法基础练习。后者要求学生编写一小段代码实现一个目标。
每章有一节为关键术语,列出了新的术语和概念,以及新的MASM伪指令和Intel指令。
添加了新的编程练习,删除了一些旧习题,并对一些现有的练习进行了修改。
本书对作者子程序库的依赖性大大减低。鼓励学生自己调用系统函数,并使用Visual Studio调试器单步执行程序。Irvine32和Irvine64链接库可以帮助学生处理输入/输出,但是不强制要求使用它们。
作者录制的新视频教程涵盖了本书的基本内容,并已添加到Pearson网站。
本书仍然关注其首要目标,即教授学生编写并调试机器级程序。它不能代替计算机体系结构的完整教材,但它确实在告诉学生计算机工作原理的基础上,给出了编写软件的第一手经验。我们认为,理论联系实际能让学生更好地掌握知识。在工程课程中,学生构建原型;在计算机体系结构课程中,学生应编写机器级程序。在这些课程里,学生都能获得难忘的经验,从而有信心在任何OS/面向机器的环境中工作。
保护模式编程是纸版章节(第1章~第13章)的重中之重。因此,学生需要在最新版本的Microsoft Windows环境下创建并运行32位和64位程序。其他4章是电子版,讲述16位编程。这些章包含了BIOS编程、MS-DOS服务、键盘和鼠标输入、视频编程和图形图像内容。其中一章为磁盘存储基础,还有一章为高级DOS编程技术。
子程序库 本书为学生提供了三个版本的子程序库,用于基本输入/输出、模拟、计时和其他有用的任务。Irvine32和Irvine64链接库运行于保护模式。16位版本的链接库(Irvine16.lib)运行于实地址模式,且只用于第14章~第17章。这些库的完整源代码见于配套的网站。链接库是为了使用方便,而不是为了阻止学生学习如何自行对输入–输出编程。鼓励学生创建自己的链接库。
所含软件与示例 所有示例程序均在Microsoft Visual Studio 2012下,用Microsoft Macro Assembler Version 11.0进行了验证。此外,还提供了批处理文件允许学生用Windows命令行汇编和运行应用程序。第14章中的32位C++应用程序已用Microsoft Visual C++ .NET测试。本书的内容更新与勘误参见配套的网站,其中包括了一些额外的编程项目,老师可以在章节结束的时候布置给学生。
总体目标
本书的以下目标旨在提高学生对汇编语言相关知识的兴趣并拓展知识面:
Intel和AMD处理器架构与编程;
实地址模式和保护模式编程;
汇编语言伪指令、宏、运算符与程序结构;
编程方法,展示了如何用汇编语言创建系统级软件工具和应用程序;
计算机硬件操作;
汇编语言程序、操作系统和其他应用程序之间的交互作用。
本书的目标之一是帮助学生以机器级的思维方式来处理编程问题。将CPU视为交互工具,学习尽可能直接地监控其操作是很重要的。调试器是程序员最好的朋友,不仅可以捕捉错误,还可以用作学习CPU和操作系统的教学工具。我们鼓励学生探查高级语言的内部机制,并能意识到大多数编程语言都被设计为可移植的,因此,也独立于其运行的主机。除了短小的示例外,本书还有几百个可运行的程序来演示书中讲述的指令和思想。本书结尾有参考资料,包括MS-DOS中断和指令助记符指南。
背景知识 读者应至少能熟练使用一种高级语言进行编程,比如Python、Java、C或C++。本书有一章涉及C++接口,因此,如果手边有编译器将会非常有帮助。本书不仅已经用于计算机科学和管理信息系统专业课堂,而且还用于其他工程课程。
特点
完整的程序清单 配套的网站包含了补充资料、学习指南,以及本书全部示例的源代码。本书还提供了丰富的链接库,其中包括30多个过程,可以简化用户输入–输出、数字处理、磁盘和文件处理,以及字符串处理。课程初期,学生可以用这个链接库来改进自己编写的程序。之后,学生可以自行编写过程并将它们添加到链接库中。
编程逻辑 本书用两章的篇幅重点介绍了布尔逻辑和位操作,并且有意识地尝试将高级编程逻辑与底层机器细节对应起来。这有助于学生创建更有效的实现,且有助于他们更好地理解编译器是如何生成目标代码的。
硬件和操作系统概念 本书前两章介绍基础硬件和数据表示概念,包括二进制数、CPU架构、状态标志和内存映射。概述硬件和以历史的角度审视Intel处理器系列可以帮助学生更好地理解其目标计算机系统。
结构化程序设计方法 从第5章开始,关注重点为过程和功能分解。同时,提供了更复杂的编程练习,要求学生在编码之前把设计作为重点。
Java字节码和Java虚拟机 第8章和第9章解释了Java字节码的基本操作,并给出了简短的演示例子。很多短示例不仅给出了反汇编字节码形式,还给出了详细的步骤解释。
磁盘存储概念 学生从硬件和软件的角度学习基于MS-Windows的磁盘存储系统的基本原理。
创建链接库 学生不仅可以自由地把自己编写的过程添加到本书链接库,还可以创建新的链接库。他们要学习用工具箱方法进行编程,并编写多个程序可以共用的代码。
宏和结构 本书用一章专门描述创建结构、联合以及宏,这些对汇编语言编程和系统编程是非常重要的。条件宏和高级运算符使得宏更加专业。
高级语言接口 本书用一章专门描述汇编语言与C和C++的接口。对于想要从事高级语言编程工作的学生而言,这是一项重要的工作技能。他们可以学习代码优化,还可以通过例子了解C++编译器是如何优化代码的。
教学辅助 所有的程序清单都在网上。同时向教师提供了测试库、复习题答案、编程练习的解决方案,以及每章的PPT。
章节说明
第1章~第9章为汇编语言核心概念,需要按顺序学习。后面的章节则可以自由选择。下面的章节示意图展示了后续章节与其他章节知识之间的依赖关系。

第1章 基本概念:汇编语言的应用、基础概念、机器语言和数据表示。
第2章 x86处理器架构:基本微计算机设计、指令执行周期、x86处理器架构、Intel64架构、x86内存管理、微计算机组件、输入–输出系统。
第3章 汇编语言基础:介绍汇编语言、链接和调试、常量和变量定义。
第4章 数据传送、寻址和算术运算:简单的数据传送和算术运算指令、汇编–链接–执行周期、运算符、伪指令、表达式、JMP和LOOP指令、间接寻址。
第5章 过程:与外部链接库的链接、描述本书链接库、堆栈操作、过程的定义和使用、流程图、自顶向下的结构设计。
第6章 条件处理:布尔和比较指令、条件跳转和循环、高级逻辑结构、有限状态机。
第7章 整数运算:移位和循环移位指令及其应用、乘法和除法、扩展加法和减法、ASCII和压缩十进制运算。
第8章 高级过程:堆栈参数、局部变量、高级PROC和INVOKE伪指令、递归。
第9章 字符串和数组:字符串原语、操作字符和整数数组、二维数组、排序和检索。
第10章 结构和宏:结构、宏、条件汇编伪指令、定义重复块。
第11章 MS-Windows编程:保护模式内存管理概念、用Microsoft-Windows API显示文本和颜色,动态内存分配。
第12章 浮点数处理与指令编码:浮点数二进制表示和浮点运算。学习IA-32浮点单元编程。理解IA-32机器指令编码。
第13章 高级语言接口:参数传递规范、内嵌汇编代码、将汇编语言模块链接到C和C++程序。
附录A MASM参考知识
附录B x86指令集
附录C “本节回顾”问题答案
下面的章节和附录由配套网站提供:
第14章 16位MS-DOS编程:内存组织、中断、函数调用、标准MS-DOS文件I/O服务。
第15章 磁盘基础知识:磁盘存储系统、扇区、簇、目录、文件分配表、处理MS-DOS错误码、驱动器和目录操作。
第16章 BIOS编程:键盘输入、视频文本、图形、鼠标编程。
第17章 高级MS-DOS编程:自定义设计段、运行时程序结构、中断处理、用I/O端口的硬件控制。
附录D BIOS和MS-DOS中断
附录E “本节回顾”问题答案(第14章~第17章)
教师和学生资源
教师资源
下面受保护的教师资源见配套网站www.pearsonhighered.com/irvine:
PPT讲义
教师解题手册
学生资源
学生通过位于www.pearsonhighered.com/irvine的出版社网站可以找到本书作者的网站链接。下述资源位于www.asmirvine.com,且不需要用访问卡:
Getting Started(入门),循序渐进的完整教程,帮助学生设置Visual Studio进行汇编语言编程。
与汇编语言编程主题相关的补充读物。
本书全部示例程序的完整代码,以及作者补充链接库的源代码。
Assembly Language Workbook(汇编语言工作手册),一个交互式的工作手册,其中包括数值转换、寻址模式、寄存器使用、调试编程和浮点二进制数。内容页面是可以自定义的HTML文档,帮助文件为Windows帮助格式。
调试工具:Microsoft Visual Studio调试器用法教程。
致谢
非常感谢培生教育(Pearson Education)计算机科学的执行主编Tracy Johnson,过去几年提供了友好且有益的指导。感谢Jouve公司的Pavithra Jayapaul以及培生出版社的产品编辑Greg Dulles为本书出版所做的出色工作。
早期版本
特别感谢以下诸位,他们在本书早期版本中提供了极大的帮助:
William Barrett,圣何塞州立大学
Scott Blackledge
James Brink,太平洋路德大学
Gerald Cahill,羚羊谷学院
John Taylor
ASCII控制字符
下表给出了按下控制键组合后生成的ASCII码。助记符和描述是指用于屏幕和打印机格式以及数据通信的ASCII函数。
ASCII码① Ctrl- 助记符 描述 ASCII码① Ctrl- 助记符 描述
00 NUL 空字符 10 Ctrl-P DLE 换码
01 Ctrl-A SOH 标题开始 11 Ctrl-Q DC1 设备控制1
02 Ctrl-B STX 正文开始 12 Ctrl-R DC2 设备控制2
03 Ctrl-C ETX 正文结束 13 Ctrl-S DC3 设备控制3
04 Ctrl-D EOT 传输结束 14 Ctrl-T DC4 设备控制4
05 Ctrl-E ENQ 查询 15 Ctrl-U NAK 拒绝接收
06 Ctrl-F ACK 确认 16 Ctrl-V SYN 同步空闲
07 Ctrl-G BEL 响铃 17 Ctrl-W ETB 传输块结束
08 Ctrl-H BS 退格 18 Ctrl-W CAN 取消
09 Ctrl-I HT 水平制表符 19 Ctrl-Y EM 媒体结束
0A Ctrl-J LF 换行 1A Ctrl-Z SUB 替换
0B Ctrl-K VT 垂直制表符 1B Ctrl-[ ESC 退出
0C Ctrl-L FF 换页 1C Ctrl-\ FS 文件分隔符
0D Ctrl-M CR 回车 1D Ctrl-] GS 分组符
0E Ctrl-N SO 不用切换 1E Ctrl-^ RS 记录分隔符
0F Ctrl-O SI 启用切换 1F Ctrl-② UX 单元分隔符

①ASCII码为十六进制。
②ASCII码1Fh为Ctrl-连字符(-)。
Alt组合键
按住Alt键的同时按下其他键将会产生的十六进制扫描码:
键 扫描码 键 扫描码 键 扫描码
1 78 A 1E N 31
2 79 B 30 O 18
3 7A C 2E P 19
4 7B D 20 Q 10
5 7C E 12 R 13
6 7D F 21 S 1F
7 7E G 22 T 14
8 7F H 23 U 16
9 80 I 17 V 2F
0 81 J 24 W 11
– 82 K 25 X 2D
= 83 L 26 Y 15
M 32 Z 2C

键盘扫描码
通过对键盘输入二次(第一次读键盘返回0)调用INT 16h或INT 21h可获得键盘扫描码。所有扫描码均为十六进制:
功能键
键 正常 与Shift组合 与Ctrl组合 与Alt组合
F1 3B 54 5E 68
F2 3C 55 5F 69
F3 3D 56 60 6A
F4 3E 57 61 6B
F5 3F 58 62 6C
F6 40 59 63 6D
F7 41 5A 64 6E
F8 42 5B 65 6F
F9 43 5C 66 70
F10 44 5D 67 74
F11 85 87 89 8B
F12 86 88 8A 8C

键 单独使用 与Ctrl键组合
Home 47 77
End 4F 75
PgUp 49 84
PgDn 51 76
PrtSc 37 72
Left arrow 4B 73
Rt arrow 4D 74
Up arrow 48 8D
Dn arrow 50 91
Ins 52 92
Del 53 93
Back tab 0F 94
Gray + 4E 90
Gary - 4A 8E

十进制 1 16 32 48 64 80 96 112
十六进制 0 1 2 3 4 5 6 7
0 0 null ▲ space 0 @ P ` p
1 1 ▲ ! 1 A Q a q
2 2 " 2 B R b r
3 3 # 3 C S c s
4 4 ∏ $ 4 D T d t
5 5 § % 5 E U e u
6 6 ▅ & 6 F V f v
7 7 ' 7 G W g w
8 8 ^ ( 8 H X h x
9 9 ○ ↓ ) 9 I Y i y
10 A → * : J Z j z
11 B ♂ ← + ; K [ k {
12 C ♀ ∟ , < L \ l |
13 D - = M ] m }
14 E ▲ . > N ^ n ~
15 F ▼ / O _ o Δ

十进制 128 144 160 176 192 208 224 240
十六进制 8 9 A B C D E F
0 0 é á └ ╨ α ≡
1 1 ü í ┴ ╤ β ±
2 2 é ó ┬ ╥ Γ ≥
3 3 a ú │ ├ ╙ π ≤
4 4 ┤ ─ ╘ ∑
5 5 à ò ╡ ┼ ╒ σ
6 6 a ╢ ╞ ╓ μ ÷
7 7 ù o ╖ ╟ ╫ τ ≈
8 8 ê ╖ ╚ ╪ Φ ○
9 9 ┌ ╣ ╔ ┘ θ
10 A è ü ┐ ║ ╩ ┌
11 B ¢ ╗ ╦ ■ δ √
12 C £ ╝ ╠ ∞
13 D ì ¥ ╜ ═ ▌ φ 2
14 E Pt ╛ ╬ ∈
15 F ┐ ╪ ▄ ∩ blank

上架指导

计算机\硬件

封底文字

本书全面细致地讲述了汇编语言程序设计的各个方面,不仅是汇编语言本科课程的经典教材,也可作为计算机系统和体系结构的入门教材。本书专门为32位和64位Intel/Windows平台编写,用通俗易懂的语言描述学生需要掌握的核心概念,首要目标是教授学生编写并调试机器级程序,并帮助他们自然过渡到后续关于计算机体系结构和操作系统的高级课程。本书作者的网站提供了更多的资源和工具,教师和学生可以访问章目标、调试工具、补充文件,以及MASM和Visual Studio 2012的入门教程等。
本书提供了出色的教学互动经验,包括:
• 教授有效的设计技巧:自上而下的程序设计演示和讲解,让学生将技术应用于多个编程课程。
• 理论联系实践:学生将在机器级水平编写软件,为以后在任何操作系统/面向机器的环境中工作做好准备。
• 灵活的课程安排:教师可结合具体情况以不同的顺序和深度覆盖可选章节主题。

作者简介

[美]基普·欧文(Kip Irvine) 著:基普·欧文(Kip Irvine)拥有迈阿密大学计算机科学硕士、音乐艺术博士学位,现为佛罗里达国际大学高级教师,教授计算机相关的课程。著有多本编程教材,被翻译成多国语言,涵盖的主题如汇编语言、C++、Visual Basic和COBOL。

译者简介

贺莲 龚奕利 译:暂无简介

译者序

大多数计算机专业的学生并不太喜欢也不太愿意学习汇编语言,因为它和机器硬件结合得非常紧密,使用起来不怎么得心应手,在解决问题方面,好像也不如其他高级语言有用。在教学过程中,不止一次听到学生抱怨说:“现在都不用汇编语言了,为什么还要学它?”彼时,受限于时间和授课内容,总觉得不能完全讲清楚这种语言的有用性和重要性。因此,当看到这本书后,我们就想要将它介绍给大家。
本书译自《Assembly Language for x86 Processors》第7版,内容包括:基本概念,x86处理器架构,汇编语言基础,数据传输、寻址和算术运算,过程,条件处理,整数运算,高级过程,字符串和数组,结构和宏,MS-Windows编程,浮点数处理和指令编码,高级语言接口等。本书还包括64位CPU架构和编程的内容,以及64位的子程序库Irvine64。
如果读者想了解BIOS编程、MS-DOS服务等内容,可以登录英文书配套网站进行阅读。同时,网站上还提供了VideoNotes教学视频直观演示汇编语言的基本概念。
本书具有丰富的习题,并按照不同要求与难度分为简答题、算法基础练习以及编程练习。因此,做习题的过程就是一个循序渐进、学以致用的过程。相信完成这些习题后,大家就不再会觉得汇编语言有多么遥远了。
在此感谢机械工业出版社华章分社的朱劼编辑,感谢她向我们推荐了这本书,以及在翻译过程中给予我们的支持和帮助。
虽然在翻译过程中我们尽量做到认真细致,对每一个有疑问的点都进行了讨论,但是由于能力所限,还是会存在错误与疏漏,希望广大读者批评指正,同时我们也会将勘误更新到网站。

贺莲 龚奕利
2015年9月于珞珈山

图书目录

出版者的话
译者序
前言
第1章 基本概念  1
1.1 欢迎来到汇编语言的世界  1
1.1.1 读者可能会问的问题  2
1.1.2 汇编语言的应用  4
1.1.3 本节回顾  5
1.2 虚拟机概念  5
1.3 数据表示  7
1.3.1 二进制整数  7
1.3.2 二进制加法  8
1.3.3 整数存储大小  9
1.3.4 十六进制整数  10
1.3.5 十六进制加法  11
1.3.6 有符号二进制整数  12
1.3.7 二进制减法  13
1.3.8 字符存储  14
1.3.9 本节回顾  15
1.4 布尔表达式  16
1.4.1 布尔函数真值表  18
1.4.2 本节回顾  18
1.5 本章小结  19
1.6 关键术语  19
1.7 复习题和练习  20
1.7.1 简答题  20
1.7.2 算法基础  21
第2章 x86处理器架构  23
2.1 一般概念  23
2.1.1 基本微机设计  23
2.1.2 指令执行周期  24
2.1.3 读取内存  25
2.1.4 加载并执行程序  26
2.1.5 本节回顾  26
2.2 32位x86处理器  27
2.2.1 操作模式  27
2.2.2 基本执行环境  27
2.2.3 x86内存管理  30
2.2.4 本节回顾  30
2.3 64位x86-64处理器  30
2.3.1 64位操作模式  31
2.3.2 基本64位执行环境  31
2.4 典型x86计算机组件  32
2.4.1 主板  32
2.4.2 内存  34
2.4.3 本节回顾  34
2.5 输入输出系统  34
2.5.1 I/O访问层次  34
2.5.2 本节回顾  36
2.6 本章小结  36
2.7 关键术语  37
2.8 复习题  38
第3章 汇编语言基础  39
3.1 基本语言元素  39
3.1.1 第一个汇编语言程序  39
3.1.2 整数常量  40
3.1.3 整型常量表达式  41
3.1.4 实数常量  41
3.1.5 字符常量  42
3.1.6 字符串常量  42
3.1.7 保留字  42
3.1.8 标识符  43
3.1.9 伪指令  43
3.1.10 指令  44
3.1.11 本节回顾  46
3.2 示例:整数加减法  46
3.2.1 AddTwo程序  46
3.2.2 运行和调试AddTwo程序  48
3.2.3 程序模板  52
3.2.4 本节回顾  52
3.3 汇编、链接和运行程序  53
3.3.1 汇编–链接–执行周期  53
3.3.2 列表文件  53
3.3.3 本节回顾  55
3.4 定义数据  55
3.4.1 内部数据类型  55
3.4.2 数据定义语句  55
3.4.3 向AddTwo程序添加一个变量  56
3.4.4 定义BYTE和SBYTE数据  57
3.4.5 定义WORD和SWORD数据  59
3.4.6 定义DWORD和SDWORD数据  59
3.4.7 定义QWORD数据  60
3.4.8 定义压缩BCD(TBYTE)数据  60
3.4.9 定义浮点类型  61
3.4.10 变量加法程序  61
3.4.11 小端顺序  62
3.4.12 声明未初始化数据  62
3.4.13 本节回顾  63
3.5 符号常量  63
3.5.1 等号伪指令  63
3.5.2 计算数组和字符串的大小  64
3.5.3 EQU伪指令  65
3.5.4 TEXTEQU伪指令  66
3.5.5 本节回顾  66
3.6 64位编程  67
3.7 本章小结  68
3.8 关键术语  69
3.8.1 术语  69
3.8.2 指令、运算符和伪指令  70
3.9 复习题和练习  70
3.9.1 简答题  70
3.9.2 算法基础  71
3.10 编程练习  71
第4章 数据传送、寻址和算术运算  73
4.1 数据传送指令  73
4.1.1 引言  73
4.1.2 操作数类型  73
4.1.3 直接内存操作数  74
4.1.4 MOV指令  75
4.1.5 整数的全零/符号扩展  76
4.1.6 LAHF和SAHF指令  77
4.1.7 XCHG指令  78
4.1.8 直接–偏移量操作数  78
4.1.9 示例程序(Moves)  79
4.1.10 本节回顾  80
4.2 加法和减法  81
4.2.1 INC和DEC指令  81
4.2.2 ADD指令  81
4.2.3 SUB指令  81
4.2.4 NEG指令  82
4.2.5 执行算术表达式  82
4.2.6 加减法影响的标志位  82
4.2.7 示例程序(AddSubTest)  85
4.2.8 本节回顾  86
4.3 与数据相关的运算符和伪指令  87
4.3.1 OFFSET运算符  87
4.3.2 ALIGN伪指令  88
4.3.3 PTR运算符  88
4.3.4 TYPE运算符  89
4.3.5 LENGTHOF运算符  89
4.3.6 SIZEOF运算符  90
4.3.7 LABEL伪指令  90
4.3.8 本节回顾  90
4.4 间接寻址  91
4.4.1 间接操作数  91
4.4.2 数组  91
4.4.3 变址操作数  92
4.4.4 指针  93
4.4.5 本节回顾  95
4.5 JMP和LOOP指令  95
4.5.1 JMP指令  96
4.5.2 LOOP指令  96
4.5.3 在Visual Studio调试器中显示数组  97
4.5.4 整数数组求和  98
4.5.5 复制字符串  98
4.5.6 本节回顾  99
4.6 64位编程  99
4.6.1 MOV指令  99
4.6.2 64位的SumArray程序  100
4.6.3 加法和减法  101
4.6.4 本节回顾  102
4.7 本章小结  102
4.8 关键术语  104
4.8.1 术语  104
4.8.2 指令、运算符和伪指令  104
4.9 复习题和练习  104
4.9.1 简答题  104
4.9.2 算法基础  106
4.10 编程练习  107
第5章 过程  108
5.1 堆栈操作  108
5.1.1 运行时堆栈(32位模式)  108
5.1.2 PUSH和POP指令  110
5.1.3 本节回顾  112
5.2 定义并使用过程  112
5.2.1 PROC伪指令  112
5.2.2 CALL和RET指令  114
5.2.3 过程调用嵌套  115
5.2.4 向过程传递寄存器参数  116
5.2.5 示例:整数数组求和  116
5.2.6 保存和恢复寄存器  118
5.2.7 本节回顾  119
5.3 链接到外部库  119
5.3.1 背景知识  119
5.3.2 本节回顾  120
5.4 Irvine32链接库  120
5.4.1 创建库的动机  120
5.4.2 概述  122
5.4.3 过程详细说明  123
5.4.4 库测试程序  133
5.4.5 本节回顾  139
5.5 64位汇编编程  139
5.5.1 Irvine64链接库  139
5.5.2 调用64位子程序  140
5.5.3 x64调用规范  140
5.5.4 调用过程示例  141
5.6 本章小结  142
5.7 关键术语  143
5.7.1 术语  143
5.7.2 指令、运算符和伪指令  143
5.8 复习题和练习  143
5.8.1 简答题  143
5.8.2 算法基础  146
5.9 编程练习  146
第6章 条件处理  148
6.1 条件分支  148
6.2 布尔和比较指令  148
6.2.1 CPU状态标志  149
6.2.2 AND指令  149
6.2.3 OR指令  150
6.2.4 位映射集  151
6.2.5 XOR指令  152
6.2.6 NOT指令  153
6.2.7 TEST指令  153
6.2.8 CMP指令  154
6.2.9 置位和清除单个CPU标志位  155
6.2.10 64位模式下的布尔指令  155
6.2.11 本节回顾  156
6.3 条件跳转  156
6.3.1 条件结构  156
6.3.2 Jcond指令  156
6.3.3 条件跳转指令类型  157
6.3.4 条件跳转应用  159
6.3.5 本节回顾  163
6.4 条件循环指令  163
6.4.1 LOOPZ和LOOPE指令  163
6.4.2 LOOPNZ和LOOPNE指令  164
6.4.3 本节回顾  164
6.5 条件结构  164
6.5.1 块结构的IF语句  165
6.5.2 复合表达式  167
6.5.3 WHILE循环  168
6.5.4 表驱动选择  169
6.5.5 本节回顾  171
6.6 应用:有限状态机  172
6.6.1 验证输入字符串  172
6.6.2 验证有符号整数  172
6.6.3 本节回顾  176
6.7 条件控制流伪指令  176
6.7.1 新建IF语句  177
6.7.2 有符号数和无符号数的比较  178
6.7.3 复合表达式  179
6.7.4 用.REPEAT和.WHILE创建循环  181
6.8 本章小结  182
6.9 关键术语  183
6.9.1 术语  183
6.9.2 指令、运算符和伪指令  184
6.10 复习题和练习  184
6.10.1 简答题  184
6.10.2 算法基础  186
6.11 编程练习  187
6.11.1 测试代码的建议  187
6.11.2 习题  188
第7章 整数运算  191
7.1 移位和循环移位指令  191
7.1.1 逻辑移位和算术移位  191
7.1.2 SHL指令  192
7.1.3 SHR指令  193
7.1.4 SAL和SAR指令  193
7.1.5 ROL指令  194
7.1.6 ROR指令  195
7.1.7 RCL和RCR指令  195
7.1.8 有符号数溢出  196
7.1.9 SHLD/SHRD指令  196
7.1.10 本节回顾  198
7.2 移位和循环移位的应用  198
7.2.1 多个双字的移位  198
7.2.2 二进制乘法  199
7.2.3 显示二进制位  200
7.2.4 提取文件日期字段  200
7.2.5 本节回顾  201
7.3 乘法和除法指令  201
7.3.1 MUL指令  201
7.3.2 IMUL指令  203
7.3.3 测量程序执行时间  205
7.3.4 DIV指令  207
7.3.5 有符号数除法  208
7.3.6 实现算术表达式  211
7.3.7 本节回顾  212
7.4 扩展加减法  212
7.4.1 ADC指令  212
7.4.2 扩展加法示例  213
7.4.3 SBB指令  215
7.4.4 本节回顾  215
7.5 ASCII和非压缩十进制运算  216
7.5.1 AAA指令  217
7.5.2 AAS指令  218
7.5.3 AAM指令  218
7.5.4 AAD指令  219
7.5.5 本节回顾  219
7.6 压缩十进制运算  219
7.6.1 DAA指令  220
7.6.2 DAS指令  220
7.6.3 本节回顾  221
7.7 本章小结  221
7.8 关键术语  222
7.8.1 术语  222
7.8.2 指令、运算符和伪指令  222
7.9 复习题和练习  222
7.9.1 简答题  222
7.9.2 算法基础  224
7.10 编程练习  225
第8章 高级过程  227
8.1 引言  227
8.2 堆栈帧  227
8.2.1 堆栈参数  227
8.2.2 寄存器参数的缺点  228
8.2.3 访问堆栈参数  230
8.2.4 32位调用规范  232
8.2.5 局部变量  233
8.2.6 引用参数  235
8.2.7 LEA指令  235
8.2.8 ENTER和LEAVE指令  236
8.2.9 LOCAL伪指令  238
8.2.10 Microsoft x64调用规范  239
8.2.11 本节回顾  239
8.3 递归  239
8.3.1 递归求和  240
8.3.2 计算阶乘  241
8.3.3 本节回顾  246
8.4 INVOKE、ADDR、PROC和PROTO  246
8.4.1 INVOKE伪指令  246
8.4.2 ADDR运算符  247
8.4.3 PROC伪指令  247
8.4.4 PROTO伪指令  250
8.4.5 参数类别  253
8.4.6 示例:交换两个整数  253
8.4.7 调试提示  254
8.4.8 WriteStackFrame过程  255
8.4.9 本节回顾  256
8.5 新建多模块程序  256
8.5.1 隐藏和导出过程名  256
8.5.2 调用外部过程  257
8.5.3 跨模块使用变量和标号  258
8.5.4 示例:ArraySum程序  259
8.5.5 用Extern新建模块  259
8.5.6 用INVOKE和PROTO新建模块  262
8.5.7 本节回顾  265
8.6 参数的高级用法(可选主题)  265
8.6.1 受USES运算符影响的堆栈  265
8.6.2 向堆栈传递8位和16位参数  266
8.6.3 传递64位参数  267
8.6.4 非双字局部变量  268
8.7 Java字节码(可选主题)  269
8.7.1 Java虚拟机  269
8.7.2 指令集  270
8.7.3 Java反汇编示例  271
8.7.4 示例:条件分支  273
8.8 本章小结  274
8.9 关键术语  275
8.9.1 术语  275
8.9.2 指令、运算符和伪指令  276
8.10 复习题和练习  276
8.10.1 简答题  276
8.10.2 算法基础  276
8.11 编程练习  277
第9章 字符串和数组  279
9.1 引言  279
9.2 字符串基本指令  279
9.2.1 MOVSB、MOVSW和MOVSD  280
9.2.2 CMPSB、CMPSW和CMPSD  280
9.2.3 SCASB、SCASW和SCASD  281
9.2.4 STOSB、STOSW和STOSD  282
9.2.5 LODSB、LODSW和LODSD  282
9.2.6 本节回顾  282
9.3 部分字符串过程  283
9.3.1 Str_compare过程  283
9.3.2 Str_length过程  284
9.3.3 Str_copy过程  284
9.3.4 Str_trim过程  285
9.3.5 Str_ucase过程  287
9.3.6 字符串库演示程序  288
9.3.7 Irivne64库中的字符串过程  289
9.3.8 本节回顾  291
9.4 二维数组  291
9.4.1 行列顺序  291
9.4.2 基址–变址操作数  292
9.4.3 基址–变址–偏移量操作数  294
9.4.4 64位模式下的基址–变址操作数  294
9.4.5 本节回顾  295
9.5 整数数组的检索和排序  295
9.5.1 冒泡排序  295
9.5.2 对半查找  297
9.5.3 本节回顾  302
9.6 Java字节码:字符串处理(可选主题)  302
9.7 本章小结  303
9.8 关键术语和指令  304
9.9 复习题和练习  304
9.9.1 简答题  304
9.9.2 算法基础  305
9.10 编程练习  305
第10章 结构和宏  308
10.1 结构  308
10.1.1 定义结构  308
10.1.2 声明结构变量  309
10.1.3 引用结构变量  310
10.1.4 示例:显示系统时间  313
10.1.5 结构包含结构  315
10.1.6 示例:醉汉行走  315
10.1.7 声明和使用联合  318
10.1.8 本节回顾  320
10.2 宏  320
10.2.1 概述  320
10.2.2 定义宏  321
10.2.3 调用宏  322
10.2.4 其他宏特性  323
10.2.5 使用本书的宏库(仅32位模式)  326
10.2.6 示例程序:封装器  332
10.2.7 本节回顾  333
10.3 条件汇编伪指令  333
10.3.1 检查缺失的参数  333
10.3.2 默认参数初始值设定  334
10.3.3 布尔表达式  335
10.3.4 IF、ELSE和ENDIF伪指令  335
10.3.5 IFIDN和IFIDNI伪指令  336
10.3.6 示例:矩阵行求和  336
10.3.7 特殊运算符  339
10.3.8 宏函数  342
10.3.9 本节回顾  343
10.4 定义重复语句块  344
10.4.1 WHILE伪指令  344
10.4.2 REPEAT伪指令  344
10.4.3 FOR伪指令  345
10.4.4 FORC伪指令  345
10.4.5 示例:链表  346
10.4.6 本节回顾  347
10.5 本章小结  348
10.6 关键术语  349
10.6.1 术语  349
10.6.2 运算符和伪指令  349
10.7 复习题和练习  349
10.7.1 简答题  349
10.7.2 算法基础  350
10.8 编程练习  351
第11章 MS-Windows编程  354
11.1 Win32控制台编程  354
11.1.1 背景知识  354
11.1.2 Win32控制台函数  357
11.1.3 显示消息框  359
11.1.4 控制台输入  361
11.1.5 控制台输出  366
11.1.6 读写文件  368
11.1.7 Irvine32链接库的文件I/O  371
11.1.8 测试文件I/O过程  373
11.1.9 控制台窗口操作  375
11.1.10 控制光标  378
11.1.11 控制文本颜色  379
11.1.12 时间与日期函数  380
11.1.13 使用64位Windows API  383
11.1.14 本节回顾  384
11.2 编写图形化的Windows应用程序  384
11.2.1 必要的结构  385
11.2.2 MessageBox函数  386
11.2.3 WinMain过程  387
11.2.4 WinProc过程  387
11.2.5 ErrorHandler过程  388
11.2.6 程序清单  388
11.2.7 本节回顾  391
11.3 动态内存分配  391
11.3.1 HeapTest程序  394
11.3.2 本节回顾  397
11.4 x86存储管理  397
11.4.1 线性地址  398
11.4.2 页转换  400
11.4.3 本节回顾  401
11.5 本章小结  402
11.6 关键术语  403
11.7 复习题和练习  403
11.7.1 简答题  403
11.7.2 算法基础  404
11.8 编程练习  404
第12章 浮点数处理与指令编码  406
12.1 浮点数二进制表示  406
12.1.1 IEEE二进制浮点数表示  406
12.1.2 阶码  407
12.1.3 规格化二进制浮点数  407
12.1.4 新建IEEE表示  408
12.1.5 十进制小数转换为二进制实数  409
12.1.6 本节回顾  411
12.2 浮点单元  411
12.2.1 FPU寄存器栈  411
12.2.2 舍入  413
12.2.3 浮点数异常  414
12.2.4 浮点数指令集  414
12.2.5 算术运算指令  416
12.2.6 比较浮点数值  419
12.2.7 读写浮点数值  422
12.2.8 异常同步  423
12.2.9 代码示例  423
12.2.10 混合模式运算  425
12.2.11 屏蔽与未屏蔽异常  426
12.2.12 本节回顾  427
12.3 x86指令编码  427
12.3.1 指令格式  427
12.3.2 单字节指令  428
12.3.3 立即数送寄存器  428
12.3.4 寄存器模式指令  429
12.3.5 处理器操作数大小前缀  429
12.3.6 内存模式指令  430
12.3.7 本节回顾  432
12.4 本章小结  432
12.5 关键术语  433
12.6 复习题和练习  434
12.6.1 简答题  434
12.6.2 算法基础  434
12.7 编程练习  435
第13章 高级语言接口  438
13.1 引言  438
13.1.1 通用规范  438
13.1.2 .MODEL伪指令  439
13.1.3 检查编译器生成的代码  441
13.1.4 本节回顾  444
13.2 内嵌汇编代码  444
13.2.1 Visual C++中的__asm伪指令  444
13.2.2 文件加密示例  447
13.2.3 本节回顾  449
13.3 32位汇编程序与C/C++的链接  449
13.3.1 IndexOf示例  450
13.3.2 调用C和C++函数  453
13.3.3 乘法表示例  454
13.3.4 调用C库函数  457
13.3.5 目录表程序  459
13.3.6 本节回顾  461
13.4 本章小结  461
13.5 关键术语  462
13.6 复习题  462
13.7 编程练习  462
附录A MASM参考知识  464
附录B x86指令集  483
附录C “本节回顾”问题答案  510
索引  527

教学资源推荐
作者: [美]基普·R. 欧文(Kip R. Irvine) 著
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
作者: [美]沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 索娅·坎南(Sowmya Kannan) 雷蒙德·盖拉多(Raymond Gallardo) 著
作者: 谢满德 刘文强 张国萍 编著
参考读物推荐
作者: (美)Michael C. Feathers 著
作者: 张昆 戴艳 编著
作者: (美)Christopher Moyer 著