汇编语言程序设计
作者 : Richard Blum
译者 : 马朝晖 等
出版日期 : 2005-11-16
ISBN : 7-111-17532-8
定价 : 48.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 409
开本 : 16开
原书名 : Professional Assembly Language
原出版社: John Wiley & Sons
属性分类: 教材
包含CD :
绝版 :
图书简介

每种高级语言(比如C和C++)在连接为可执行程序之前都会被编译器转换成汇编语言。本书面向使用高级语言的开发人员,讲解如何查看和解释编译器生成的汇编语言代码,了解它们是如何创建的,从而可以修改编译器生成的代码或创建自己的汇编语言例程。本书揭示如何使程序中的函数更快更高效的内幕,以及提高应用程序性能的方法。

本书主要内容:
● 查看高级语言程序生成的汇编语言代码的好处
● 如何为Linux奔腾处理器环境创建独立的汇编语言程序
● 如何将高级函数和库整合到汇编语言程序中
● 如何将汇编语言例程整合到C和C++应用程序中
● 如何在汇编语言程序中使用Linux系统调用
● 如何在应用程序中使用奔腾处理器的MMX和SSE功能

图书特色

图书前言

在目前正在使用的程序设计语言之中,汇编语言是被误解得最深的一种。当提到“汇编语言”这个术语时,经常使人联想到低级的位移动和在长达数千页的指令手册中费力地查找正确的指令格式。随着各种出色的高级语言开发工具的快速发展,在各种程序设计新闻组中“汇编语言程序设计已经死亡了”这种评论并不少见。
  但是,汇编语言程序设计远没有到死亡的时候。每种高级语言程序在能够连接为可执行程序之前都必须被编译为汇编语言程序。对于高级语言程序设计者来说,了解编译器如何生成汇编语言代码很有用处,这表现在使用汇编语言直接编写例程和了解编译器如何把高级语言转换为汇编语言方面。

本书目的
  本书的主要目的是向使用高级语言的程序员讲解高级语言程序是如何被转换为汇编语言的,以及如何掌握生成的汇编语言代码。这就是说,本书的主要读者是已经熟悉高级语言(比如C、C++,甚至Java)的程序员。本书没有花时间讲解基本的程序设计原则。我们假设读者已经熟悉计算机程序设计的基础,并且有兴趣学习汇编语言以便了解程序运行的幕后发生了什么。
  但是,如果你是程序设计的初学者并且把汇编语言程序设计作为起点,本书也没有完全忽略你的要求。可以从头到尾阅读各个章节获得如何进行汇编语言程序设计(和一般的程序设计)的基础知识。书中的每个主题都包括范例代码来演示汇编语言指令如何工作。如果你完全是程序设计新手,也可以从本书开始学习程序设计,进而学习本书其他高级主题。

本书范围
  本书的主要目的是使C和C++程序员熟悉汇编语言,讲解编译器如何从C和C++程序创建汇编语言例程,并讲解如何整理生成的汇编语言例程以便提高应用程序的性能。
  所有用高级语言(比如C和C++)编写的程序,在被连接为可执行程序之前,都会被编译器转换为汇编语言。编译器使用编译器的设计者定义的特定规则来确定如何正确地转换高级语言语句。很多程序员只是编写高级语言程序并且假设编译器会创建正确的可执行代码来实现程序。
  但是,情况并非总是如此。当编译器把高级语言代码转换为汇编语言代码时,稀奇古怪的事情经常出现。另外,编译器往往遵循非常特别的转换规则,以至于不能在最终的汇编语言代码中发现节省时间的捷径,而对于编写不良的高级例程,它也不能加以改善。在这样的情况下,汇编语言代码的知识就有用武之地了。
  本书正是讲解汇编语言的知识,描述在连接为可执行程序之前如何检查编译器生成的汇编语言代码,并发现可以修改何处代码来提高性能或者提供附加功能,帮助读者理解编译器的转换处理是如何影响高级语言例程的。

本书结构
  本书分为三个部分。第一部分讲解汇编语言程序设计环境的基础。因为汇编语言在各种处理器和汇编器之间是不同的,所以必须选择常见的平台。本书使用运行在Intel处理器系列上的Linux操作系统。Linux环境提供丰富的程序开发工具,比如优化编译器、汇编器、连接器和调试器,它们的费用很低,或者是免费的。Linux环境之中这些丰富的开发工具使它非常适合把C程序剖析为汇编语言代码。
  第一部分的各章如下:
  第1章“什么是汇编语言”,一开始确保你确切地了解什么是汇编语言以及如何将它融入程序设计模型。这一章揭开了汇编语言的神秘面纱,并且提供了解如何把汇编语言和高级语言一起使用的基础知识。
  第2章“IA-32平台”,提供对Intel奔腾处理器系列的简要介绍。当使用汇编语言时,了解底层的处理器和它如何处理程序是很重要的。但是这一章没有打算对IA-32平台的操作进行深入的分析,也没有提供在这个平台上进行程序设计涉及到的硬件和操作。
  第3章“相关的工具”,讲解本书中使用的Linux开放源代码的开发工具。本书中使用GNU编译器、汇编器、连接器和调试器对程序进行编译、汇编、连接和调试。
  第4章“汇编语言程序范例”,演示如何在Linux系统上使用GNU工具创建、汇编、连接和调试简单的汇编语言程序。这一章还演示如何在Linux系统上在汇编语言程序中使用C库函数为汇编语言应用程序添加额外的特性。
  本书的第二部分研究汇编语言程序设计的基础。在能够分析编译器生成的汇编语言代码之前,必须了解汇编语言指令。这一部分的各章如下:
  第5章“传送数据”,讲解在汇编语言程序中如何传送数据元素。讲解寄存器、内存位置和堆栈的概念,并且提供在它们之间传送数据的范例。
  第6章“控制执行流程”,描述汇编语言程序中使用的分支指令。这可能是程序最为重要的特性之一,认识分支并且优化分支的能力对提高应用程序的性能是至关重要的。
  第7章“使用数字”,讨论在汇编语言中如何使用不同的数字数据类型。能够在汇编语言程序内正确地处理整数和浮点值是很重要的。
  第8章“基本数学功能”,讲解如何使用汇编语言指令实现基本的数学功能,比如加、减、乘和除。虽然这些通常是直接的功能,但是可以使用灵活的技巧提高这一领域工作的性能。
  第9章“高级数学功能”,讨论IA-32浮点运算单元(Floating Point Unit,FPU),以及如何使用它处理复杂的浮点运算。浮点运算对于数据处理程序经常是至关重要的,了解它如何工作对高级语言程序员有非常大的好处。
  第10章“处理字符串”,讲解汇编语言的各种字符串处理指令。字符数据是高级语言程序设计的另一个重要方面。在高级语言中处理字符串时,了解汇编语言层面上如何处理字符串能够提供深入的认识。
  第11章“使用函数”,开始深入地讲解汇编语言程序设计。创建汇编语言函数去执行例程是汇编语言优化的核心。了解汇编语言函数的基础知识是有益的,因为编译器从高级语言代码生成汇编语言代码时经常会使用它们。
  第12章“使用Linux系统调用”,这一章结束了这一部分,它演示使用已经创建的函数可以在汇编语言中执行多少高级功能。Linux系统提供很多高级功能,例如输出到显示器的功能。在汇编语言程序中经常可以利用它们。
  第三部分讲解更加高级的汇编语言主题。因为本书的主要主题是如何在C或者C++代码之中并入汇编语言例程,所以最初的几章只是讲解如何这样做。其余的各章讲解一些更加高级的主题,圆满地完成读者对汇编语言程序设计的学习。这一部分包括下面这几章:
  第13章“使用内联汇编”,讲解如何把汇编语言例程直接并入你的C或者C++语言程序中。内联汇编语言经常用于在C程序中“硬编码”快速例程,以便确保编译器为例程生成适当的汇编语言代码。
  第14章“调用汇编库”,演示可以如何把汇编语言函数组合为库,供众多应用程序(包括汇编语言程序和高级语言程序)使用。能够把频繁使用的函数组合为C或者C++程序可以调用的单一库是非常节省时间的特性。
  第15章“优化例程”,本书的核心部分:修改编译器生成的汇编语言代码以便满足特定要求。这一章讲解在汇编语言代码中究竟如何生成不同类型的C例程(比如if-then语句和for-next循环)。了解了汇编语言代码在做什么之后,就可以对它进行修改以便为特定的环境定制代码。
  第16章“使用文件”,讲解汇编语言程序设计中最被忽视的功能之一。几乎所有应用程序都需要对系统进行某种类型的文件访问。汇编语言程序也不例外。这一章讲解如何使用Linux的文件处理系统调用读取、写入和修改系统中文件内的数据。
  第17章“使用高级IA-32特性”,这一章结束了本书,它讲解高级的Intel的单指令多数据(Single Instruction Multiple Data,SIMD)技术。这种技术为程序员提供在单一指令之中执行多个运算操作的平台。在音频和视频数据处理的领域之中,这种技术变得非常重要。

使用本书的要求
  本书中的所有范例都用汇编语言编写,并且运行在Linux操作系统和Intel处理器平台上。本书中广泛地使用开放源代码的GNU编译器(gcc)、汇编器(gas)、连接器(ld)和调试器(gdb)演示汇编语言特性。第4章专门讨论如何在Linux平台上使用这些工具创建、汇编、连接和调试汇编语言程序。如果读者没有安装Linux平台,第4章演示了如何使用可以直接从光盘引导的、无需修改工作站硬盘的Linux版本。无需在工作站上安装Linux,就可以使用本书中使用的所有GNU开发工具。

约定
  为了帮助读者从书中得到最大的收益以及充分理解内容,我们在本书中使用了数种约定。
  技巧、提示、诀窍和当前讨论之外的内容使用楷体排版。在代码范例中我们使用灰色背景突出显示新的和重要的代码,而当前上下文中不那么重要的代码以及以前显示过的代码将不用灰色背景。

源代码
  当你研究本书中的范例时,可以选择手工输入所有代码,或者从网上下载本书源代码文件。本书中用到的所有示例源代码都可以从www.wrox.com下载。访问这个站点时,只需查找本书的名称(可以使用Search文本框,也可以使用书名列表之一),然后在本书的具体介绍页面上点击Download Code链接即可获得本书的所有源代码。
  因为很多书籍的名称类似,所以查找书籍最简单的方式是通过ISBN查找;本书的ISBN是0-7645-7901-0。
  下载代码后可以使用常用的压缩工具解压。或者可以到Wrox公司的代码下载页面(www.wrox.com/dynamic/books/download.aspx)查看本书和所有其他Wrox的书籍的代码。

勘误
  我们尽了最大的努力来确保文本或者代码中没有错误。但是,没有人能够做到完美,错误在所难免。如果发现我们的书中有错误,比如拼写错误或者有错误的代码段,我们将非常高兴收到反馈。通过发送勘误表,可能避免另外一个读者数小时的迷惑,同时帮助我们提供品质更好的信息。
  要查看本书的勘误表,可以访问www.wrox.com并且使用Search文本框或者书名列表之一查找书籍名称。然后,在书籍的具体介绍页面上点击Book Errata链接。在这个页面上,可以查看关于本书已经提交的和Wrox公司的编辑公布的所有勘误。完整的书籍列表,包括到每本书的勘误的链接,都可以在www.wrox.com/misc-pages/booklist.shtml页面上找到。
  如果没有在Book Errata页面上找到“你的”错误,请访问www.wrox.com/ contact/ techsupport.shtml并且完整填写这里的表单,把发现的错误发送给我们。我们会查看这些信息,并且,如果正确的话,会在书籍的勘误页面上公布消息并在书籍以后的版本中修正这些问题。

p2p.wrox.com
  为了与作者和同行们进行讨论,请加入P2P论坛:p2p.wrox.com。这个论坛是基于Web的系统,你可以张贴关于Wrox公司书籍的和关于技术的消息,可以和其他读者以及技术用户进行交流。论坛提供订阅功能,当论坛上发布新帖子的时候,可以通过电子邮件发送你所选择的感兴趣的主题。Wrox公司的作者、编辑、其他业界专家以及本书读者都会出现在这些论坛上。
  在http://p2p.wrox.com上,你会发现许多不同的论坛,在你阅读本书及开发自己的应用程序时,它们都能够给你提供帮助。可以按照下面的步骤加入论坛:
1) 访问p2p.wrox.com,点击Register链接。
2) 阅读使用条款并且点击Agree。
3) 填写必需的信息以及你希望提供的任何可选的信息,点击Submit。
4) 然后你会收到描述如何验证帐户和完成加入过程的电子邮件。
  不加入P2P也可以阅读论坛的消息,但是要想发布自己的消息,就必须加入。
  加入后,你可以发布新的消息并且回复其他用户发布的消息。任何时候都可以在Web上阅读消息。如果希望特定的论坛使用电子邮件通知新的消息,可以在论坛列表中点击这个论坛的Subscribe链接。
  关于如何使用Wrox公司的P2P的更多信息,请阅读P2P FAQ,它们回答了关于论坛软件如何工作的问题,这些FAQ也包括关于P2P和Wrox公司书籍的很多常见问题。要阅读FAQ,可以在任何P2P页面上点击FAQ链接。

作者简介

Richard Blum:Richard Blum:  Richard Blum 毕业于美国普度大学电气工程专业,在美国一家政府组织工作了15年以上。在此期间,他使用过各种编程语言(C、C++、Java和Microsoft VB .NET以及C#)编写实用程序,因此他发现一个非常有价值的事实:通过研究编译器生成的汇编语言代码及使用汇编语言例程,可明显提高高级语言程序的执行速度。本书正是他多年实践与研究的成果。

译者简介

马朝晖 等:暂无简介

图书目录

第一部分 汇编语言程序设计环境基础
第1章  什么是汇编语言 1
1.1  处理器指令 1
1.1.1  指令码处理 1
1.1.2  指令码格式 2
1.2  高级语言 5
1.2.1  高级语言的种类 5
1.2.2  高级语言的特性 7
1.3  汇编语言 8
1.3.1  操作码助记符 8
1.3.2  定义数据 9
1.3.3  命令 11
1.4  小结 11
第2章  IA-32平台 13
2.1  IA-32处理器的核心部分 13
2.1.1  控制单元 14
2.1.2  执行单元 18
2.1.3  寄存器 19
2.1.4  标志 21
2.2  IA-32的高级特性 23
2.2.1  x87浮点单元 23
2.2.2  多媒体扩展 24
2.2.3  流化SIMD扩展 24
2.2.4  超线程 25
2.3  IA-32处理器系列 25
2.3.1  Intel处理器 25
2.3.2  非Intel处理器 26
2.4  小结 27
第3章  相关的工具 29
3.1  开发工具 29
3.1.1  汇编器 29
3.1.2  连接器 31
3.1.3  调试器 31
3.1.4  编译器 32
3.1.5  目标代码反汇编器 32
3.1.6  简档器 33
3.2  GNU汇编器 33
3.2.1  安装汇编器 33
3.2.2  使用汇编器 35
3.2.3  关于操作码语法 36
3.3  GNU连接器 37
3.4  GNU编译器 39
3.4.1  下载和安装gcc 39
3.4.2  使用gcc 40
3.5  GNU调试器程序 42
3.5.1  下载和安装gdb 42
3.5.2  使用gdb 42
3.6  KDE调试器 44
3.6.1  下载和安装kdbg 44
3.6.2  使用kdbg 45
3.7  GNU objdump程序 46
3.7.1  使用objdump 46
3.7.2  objdump范例 47
3.8  GNU简档器程序 48
3.8.1  使用简档器 48
3.8.2  简档范例 50
3.9  完整的汇编开发系统 51
3.9.1  Linux基础 51
3.9.2  下载和运行MEPIS 52
3.9.3  新的开发系统 53
3.10  小结 53
第4章  汇编语言程序范例 55
4.1  程序的组成 55
4.1.1  定义段 55
4.1.2  定义起始点 55
4.2  创建简单程序 56
4.2.1  CPUID指令 56
4.2.2  范例程序 58
4.2.3  构建可执行程序 60
4.2.4  运行可执行程序 60
4.2.5  使用编译器进行汇编 60
4.3  调试程序 61
4.4  在汇编语言中使用C库函数 65
4.4.1  使用printf 66
4.4.2  连接C库函数 67
4.5  小结 68
第二部分 汇编语言程序设计基础
第5章  传送数据 71
5.1  定义数据元素 71
5.1.1  数据段 71
5.1.2  定义静态符号 73
5.1.3  bss段 73
5.2  传送数据元素 75
5.2.1  MOV指令格式 75
5.2.2  把立即数传送到寄存器和内存 76
5.2.3  在寄存器之间传送数据 77
5.2.4  在内存和寄存器之间传送数据 77
5.3  条件传送指令 83
5.3.1  CMOV指令 83
5.3.2  使用CMOV指令 85
5.4  交换数据 86
5.4.1  数据交换指令 87
5.4.2  使用数据交换指令 91
5.5  堆栈 93
5.5.1  堆栈如何工作 93
5.5.2  压入和弹出数据 94
5.5.3  压入和弹出所有寄存器 96
5.5.4  手动使用ESP和EBP寄存器 97
5.6  优化内存访问 97
5.7  小结 98
第6章  控制执行流程 99
6.1  指令指针 99
6.2  无条件分支 100
6.2.1  跳转 100
6.2.2  调用 103
6.2.3  中断 106
6.3  条件分支 106
6.3.1  条件跳转指令 106
6.3.2  比较指令 108
6.3.3  使用标志位的范例 109
6.4  循环 112
6.4.1  循环指令 112
6.4.2  循环范例 113
6.4.3  防止LOOP灾难 113
6.5  模仿高级条件分支 114
6.5.1  if语句 115
6.5.2  for循环 118
6.6  优化分支指令 120
6.6.1  分支预测 120
6.6.2  优化技巧 122
6.7  小结 124
第7章  使用数字 126
7.1  数字数据类型 126
7.2  整数 127
7.2.1  标准整数长度 127
7.2.2  无符号整数 128
7.2.3  带符号整数 129
7.2.4  使用带符号整数 131
7.2.5  扩展整数 131
7.2.6  在GNU汇编器中定义整数 134
7.3  SIMD整数 135
7.3.1  MMX整数 136
7.3.2  传送MMX整数 136
7.3.3  SSE整数 137
7.3.4  传送SSE整数 138
7.4  二进制编码的十进制 139
7.4.1  BCD是什么 140
7.4.2  FPU BCD值 140
7.4.3  传送BCD值 141
7.5  浮点数 142
7.5.1  浮点数是什么 143
7.5.2  标准浮点数据类型 144
7.5.3  IA-32浮点值 146
7.5.4  在GNU汇编器中定义浮点值 146
7.5.5  传送浮点值 146
7.5.6  使用预置的浮点值 148
7.5.7  SSE浮点数据类型 149
7.5.8  传送SSE浮点值 150
7.6  转换 153
7.6.1  转换指令 154
7.6.2  转换范例 154
7.7  小结 155
第8章  基本数学功能 157
8.1  整数运算 157
8.1.1  加法 157
8.1.2  减法 165
8.1.3  递增和递减 169
8.1.4  乘法 169
8.1.5  除法 173
8.2  移位指令 175
8.2.1  移位乘法 175
8.2.2  移位除法 177
8.2.3  循环移位 178
8.3  十进制运算 178
8.3.1  不打包BCD的运算 178
8.3.2  打包BCD的运算 180
8.4  逻辑操作 181
8.4.1  布尔逻辑 182
8.4.2  位测试 182
8.5  小结 183
第9章  高级数学功能 185
9.1  FPU环境 185
9.1.1  FPU寄存器堆栈 185
9.1.2  FPU状态、控制和标记寄存器 185
9.1.3  使用FPU堆栈 190
9.2  基本浮点运算 193
9.3  高级浮点运算 196
9.3.1  浮点功能 196
9.3.2  部分余数 199
9.3.3  三角函数 201
9.3.4  对数函数 203
9.4  浮点条件分支 205
9.4.1  FCOM指令系列 205
9.4.2  FCOMI指令系列 207
9.4.3  FCMOV指令系列 208
9.5  保存和恢复FPU状态 209
9.5.1  保存和恢复FPU环境 209
9.5.2  保存和恢复FPU状态 210
9.6  等待和非等待指令 213
9.7  优化浮点运算 213
9.8  小结 214
第10章  处理字符串 216
10.1  传送字符串 216
10.1.1  MOVS指令 216
10.1.2  REP前缀 220
10.1.3  其他REP指令 224
10.2  存储和加载字符串 225
10.2.1  LODS指令 225
10.2.2  STOS指令 225
10.2.3  构建自己的字符串函数 226
10.3  比较字符串 227
10.3.1  CMPS指令 228
10.3.2  CMPS和REP一起使用 229
10.3.3  字符串不等 230
10.4  扫描字符串 232
10.4.1  SCAS指令 232
10.4.2  搜索多个字符 233
10.4.3  计算字符串长度 235
10.5  小结 236
第11章  使用函数 237
11.1  定义函数 237
11.2  汇编函数 238
11.2.1  编写函数 239
11.2.2  访问函数 240
11.2.3  函数的放置 242
11.2.4  使用寄存器 242
11.2.5  使用全局数据 243
11.3  按照C样式传递数据值 244
11.3.1  回顾堆栈 244
11.3.2  在堆栈之中传递函数参数 244
11.3.3  函数开头和结尾 246
11.3.4  定义局部函数数据 246
11.3.5  清空堆栈 247
11.3.6  范例 248
11.3.7  在操作之中监视堆栈 249
11.4  使用独立的函数文件 252
11.4.1  创建独立的函数文件 252
11.4.2  创建可执行文件 253
11.4.3  调试独立的函数文件 254
11.5  使用命令行参数 255
11.5.1  程序剖析 255
11.5.2  分析堆栈 255
11.5.3  查看命令行参数 257
11.5.4  查看环境变量 258
11.5.5  使用命令行参数的范例 259
11.6  小结 261
第12章  使用Linux系统调用 262
12.1  Linux内核 262
12.1.1  内核组成 262
12.1.2  Linux内核版本 267
12.2  系统调用 268
12.2.1  查找系统调用 268
12.2.2  查找系统调用定义 269
12.2.3  常用系统调用 270
12.3  使用系统调用 271
12.4  复杂的系统调用返回值 275
12.4.1  sysinfo系统调用 276
12.4.2  使用返回结构 277
12.4.3  查看结果 278
12.5  跟踪系统调用 278
12.5.1  strace程序 278
12.5.2  高级strace参数 279
12.5.3  监视程序系统调用 280
12.5.4  附加到正在运行的程序 282
12.6  系统调用和C库 284
12.6.1  C库 284
12.6.2  跟踪C函数 285
12.6.3  系统调用和C库的比较 287
12.7  小结 287
第三部分 高级汇编语言技术
第13章  使用内联汇编 289
13.1  什么是内联汇编 289
13.2  基本的内联汇编代码 292
13.2.1  asm格式 292
13.2.2  使用全局C变量 294
13.2.3  使用volatile修饰符 296
13.2.4  使用替换的关键字 296
13.3  扩展asm 296
13.3.1  扩展asm格式 296
13.3.2  指定输入值和输出值 297
13.3.3  使用寄存器 298
13.3.4  使用占位符 299
13.3.5  引用占位符 301
13.3.6  替换的占位符 302
13.3.7  改动的寄存器列表 303
13.3.8  使用内存位置 304
13.3.9  使用浮点值 305
13.3.10  处理跳转 306
13.4  使用内联汇编代码 308
13.4.1  什么是宏 308
13.4.2  C宏函数 309
13.4.3  创建内联汇编宏函数 310
13.5  小结 311
第14章  调用汇编库 312
14.1  创建汇编函数 312
14.2  编译C和汇编程序 313
14.2.1  编译汇编源代码文件 314
14.2.2  使用汇编目标代码文件 314
14.2.3  可执行文件 315
14.3  在C程序中使用汇编函数 317
14.3.1  使用整数返回值 317
14.3.2  使用字符串返回值 318
14.3.3  使用浮点返回值 321
14.3.4  使用多个输入值 322
14.3.5  使用混合数据类型的输入值 323
14.4  在C++程序中使用汇编函数 327
14.5  创建静态库 328
14.5.1  什么是静态库 328
14.5.2  ar命令 328
14.5.3  创建静态库文件 329
14.5.4  编译静态库 331
14.6  使用共享库 331
14.6.1  什么是共享库 331
14.6.2  创建共享库 332
14.6.3  编译共享库 332
14.6.4  运行使用共享库的程序 333
14.7  调试汇编函数 334
14.7.1  调试C程序 334
14.7.2  调试汇编函数 336
14.8  小结 337
第15章  优化例程 338
15.1  优化编译器代码 338
15.1.1  编译器优化级别1 338
15.1.2  编译器优化级别2 339
15.1.3  编译器优化级别3 341
15.2  创建优化的代码 341
15.2.1  生成汇编语言代码 341
15.2.2  查看优化的代码 344
15.2.3  重新编译优化的代码 345
15.3  优化技巧 345
15.3.1  优化运算 345
15.3.2  优化变量 348
15.3.3  优化循环 352
15.3.4  优化条件分支 356
15.3.5  通用子表达式消除 361
15.4  小结 363
第16章  使用文件 365
16.1  文件处理顺序 365
16.2  打开和关闭文件 366
16.2.1  访问类型 366
16.2.2  UNIX权限 367
16.2.3  打开文件代码 368
16.2.4  打开错误返回代码 369
16.2.5  关闭文件 370
16.3  写入文件 370
16.3.1  简单的写入范例 370
16.3.2  改变文件访问模式 372
16.3.3  处理文件错误 372
16.4  读取文件 373
16.4.1  简单的读取范例 374
16.4.2  更加复杂的读取范例 375
16.5  读取、处理和写入数据 377
16.6  内存映射文件 379
16.6.1  什么是内存映射文件 379
16.6.2  mmap系统调用 380
16.6.3  mmap汇编语言格式 381
16.6.4  mmap范例 383
16.7  小结 387
第17章  使用高级IA-32特性 388
17.1  SIMD简介 388
17.1.1  MMX 388
17.1.2  SSE 389
17.1.3  SSE2 389
17.2  检测支持的SIMD操作 390
17.2.1  检测支持 390
17.2.2  SIMD特性程序 391
17.3  使用MMX指令 392
17.3.1  加载和获得打包的整数值 393
17.3.2  执行MMX操作 393
17.4  使用SSE指令 400
17.4.1  传送数据 400
17.4.2  处理数据 401
17.5  使用SSE2指令 405
17.5.1  传送数据 405
17.5.2  处理数据 406
17.6  SSE3指令 408
17.7  小结 409

教学资源推荐
作者: George Coulouris, Jean Dollimore, Tim Kindberg
作者: [美] 陆永祥(Yung-Hsiang Lu) 著
作者: [美] 艾伦 A. A. 多诺万(Alan A. A. Donovan),布莱恩 W. 柯尼汉(Brian W. Kernighan)著
作者: 主编 牛力 韩小汀 参编 闫石 杨凯 刘楠楠
参考读物推荐
作者: 李慧 高飞 等编著
作者: (美)Brian Goetz,Tim Peierls 等著