您好,欢迎来到聚文网。 登录 免费注册
现代X86汇编语言程序设计

现代X86汇编语言程序设计

  • 装帧: 平装
  • 出版社: 机械工业出版社
  • 作者: (美)丹尼尔·卡斯沃姆(Daniel Kusswurm) 著;张银奎 等 译 著
  • 出版日期: 2016-10-01
  • 商品条码: 9787111542780
  • 版次: 1
  • 开本: 16开
  • 页数: 477
  • 出版年份: 2016
定价:¥79 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书从应用编程的角度解释x86处理器的内部架构和执行环境,全面介绍如何用x86汇编语言编写可被高级语言调用的函数。主要内容包括:x86-32核心架构(第1章和第2章),x87浮点单元(第3章和第4章),MMX技术(第5章和第6章),流式SIMD扩展(第7章至第11章),高级向量扩展(第12章至第16章),x86-64核心架构(第17章和第18章),x86-64SSE和AVX(第19章和第20章),高级主题(第21章和第22章)。书中包含了大量的示例代码,以帮助读者快速理解x86汇编语言编程和x86平台的计算资源。本书可作为高等院校计算机及相关专业学生的教材,也可供想要学习x86汇编语言编程的软件开发者使用。
作者简介
丹尼尔·卡斯沃姆,在软件开发和计算机科学领域拥有超过30年的专业经验。在几十年的职业生涯中,他曾为各种医疗设备、科学仪器和图像处理应用编写了大量创新性的代码。在这些项目中,他有很多EIEJx86汇编语言的成功经验。有些是显著提高计算密集型算法的性能,有些是巧妙解决技术难题。丹尼尔拥有北伊利诺伊大学电子工程技术硕士学位和德保罗大学计算机科学博士学位。
目录
出版者的话
译者序
前言
关于技术审校者
第1章x86—32核心架构1
1.1简史1
1.2数据类型3
1.2.1基本数据类型3
1.2.2数值数据类型4
1.2.3组合数据类型5
1.2.4其他数据类型6
1.3内部架构6
1.3.1段寄存器7
1.3.2通用寄存器7
1.3.3EFLAGS寄存器8
1.3.4指令指针9
1.3.5指令操作数9
1.3.6内存寻址模式10
1.4指令集浏览11
1.4.1数据传输13
1.4.2二进制算术13
1.4.3数据比较14
1.4.4数据转换14
1.4.5逻辑运算14
1.4.6旋转和移位15
1.4.7字节设置和二进制位串15
1.4.8串16
1.4.9标志操纵16
1.4.10控制转移17
1.4.11其他指令17
1.5总结17
第2章x86—32核心编程18
2.1开始18
2.1.1第一个汇编语言函数19
2.1.2整数乘法和除法22
2.2x86—32编程基础24
2.2.1调用约定25
2.2.2内存寻址模式28
2.2.3整数加法31
2.2.4条件码34
2.3数组38
2.3.1一维数组39
2.3.2二维数组42
2.4结构体47
2.4.1简单结构体47
2.4.2动态结构体创建50
2.5字符串52
2.5.1字符计数52
2.5.2字符串拼接54
2.5.3比较数组57
2.5.4反转数组60
2.6总结62
第3章x87浮点单元63
3.1x87FPU核心架构63
3.1.1数据寄存器63
3.1.2x87FPU专用寄存器64
3.1.3x87FPU操作数和编码65
3.2x87FPU指令集68
3.2.1数据传输68
3.2.2基本运算69
3.2.3数据比较70
3.2.4超越函数71
3.2.5常量71
3.2.6控制72
3.3总结72
第4章x87FPU编程73
4.1x87FPU编程基础73
4.1.1简单计算73
4.1.2浮点比较76
4.2x87FPU高级编程79
4.2.1浮点数组79
4.2.2超越指令(超越函数指令)84
4.2.3栈的高级应用87
4.3总结92
第5章MMX技术93
5.1SIMD处理概念93
5.2回绕和饱和运算94
5.3MMX执行环境95
5.4MMX指令集96
5.4.1数据传输97
5.4.2算术运算97
5.4.3比较98
5.4.4转换99
5.4.5逻辑和位移99
5.4.6解组和重排99
5.4.7插入和提取100
5.4.8状态和缓存控制100
5.5总结100
第6章MMX技术编程101
6.1MMX编程基础101
6.1.1组合整型加法102
6.1.2组合整型移位108
6.1.3组合整型乘法111
6.2MMX高级编程113
6.2.1整数数组处理114
6.2.2使用MMX和x87FPU120
6.3总结125
第7章流式SIMD扩展126
7.1x86—SSE概览126
7.2x86—SSE执行环境127
7.2.1x86—SSE寄存器组127
7.2.2x86—SSE数据类型128
7.2.3x86—SSE的控制—状态寄存器128
7.3x86—SSE处理技术129
7.4x86—SSE指令集概览132
7.4.1标量浮点数据传输133
7.4.2标量浮点算术运算133
7.4.3标量浮点比较134
7.4.4标量浮点转换134
7.4.5组合浮点数据传输135
7.4.6组合浮点算术运算135
7.4.7组合浮点比较136
7.4.8组合浮点转换136
7.4.9组合浮点重排和解组137
7.4.10组合浮点插入和提取137
7.4.11组合浮点混合137
7.4.12组合浮点逻辑138
7.4.13组合整数扩展138
7.4.14组合整数数据传输138
7.4.15组合整数算术运算139
7.4.16组合整数比较139
7.4.17组合整数转换139
7.4.18组合整数重排和解组140
7.4.19组合整数插入和提取140
7.4.20组合整数混合141
7.4.21组合整数移位141
7.4.22文本字符串处理141
7.4.23非临时数据传输和缓存控制142
7.4.24其他142
7.5总结143
第8章x86—SSE编程——标量浮点144
8.1标量浮点运算基础144
8.1.1标量浮点算术运算144
8.1.2标量浮点数的比较148
8.1.3标量浮点数的类型转换151
8.2高级标量浮点编程157
8.2.1用标量浮点指令计算球体表面积和体积157
8.2.2用标量浮点指令计算平行四边形面积和对角线长度159
8.3总结165
第9章x86—SSE编程——组合浮点166
9.1组合浮点运算基础166
9.1.1组合浮点算术运算167
9.1.2组合浮点数的比较171
9.1.3组合浮点数的类型转换175
9.2高级组合浮点编程178
9.2.1组合浮点数最小二乘法178
9.2.2用组合浮点数进行4×4矩阵的计算183
9.3总结192
第10章x86—SSE编程——组合整数193
10.1组合整数基础193
10.2高级组合整数编程197
10.2.1组合整数直方图197
10.2.2组合整数阈值分割203
10.3总结214
第11章x86—SSE编程——字符串215
11.1字符串基础知识215
11.2字符串编程221
11.2.1计算字符串长度221
11.2.2字符替换224
11.3总结231
第12章AVX——高级向量扩展232
12.1x86—AVX概述232
12.2x86—AVX执行环境233
12.2.1x86—AVX寄存器组233
12.2.2x86—AVX数据类型233
12.2.3x86—AVX指令语法234
12.3x86—AVX功能扩展235
12.4x86—AVX指令集概述236
12.4.1升级版的x86—SSE指令236
12.4.2新指令239
12.4.3功能扩展指令242
12.5总结
第13章x86—AVX标量浮点编程
13.1编程基础
13.1.1标量浮点运算
13.1.2标量浮点比较
13.2高级编程
13.2.1一元二次方程的根
13.2.2球坐标系
13.3总结
第14章x86—AVX组合浮点编程
14.1编程基础
14.1.1组合浮点运算
14.1.2组合浮点比较
14.2高级编程
14.2.1相关系数
14.2.2矩阵列均值
14.3总结
第15章x86—AVX组合整型编程
15.1组合整型基础
15.1.1组合整型运算
15.1.2组合整数解组操作
15.2高级编程
15.2.1图像像素裁剪
15.2.2图像阈值二分法
15.3总结
第16章x86—AVX编程——新指令
16.1检测处理器特性(CPUID)
16.2数据操作指令
16.2.1数据广播
16.2.2数据混合
16.2.3数据排列
16.2.4数据收集
16.3融合乘加编程
16.4通用寄存器指令
16.4.1不影响标志位的乘法和移位操作
16.4.2增强的位操作
16.5总结
第17章x86—64核心架构
17.1内部架构
17.1.1通用寄存器
17.1.2RFLAGS寄存器
17.1.3指令指针寄存器
17.1.4指令操作数
17.1.5内存寻址模式
17.2x86—64和x86—32的区别
17.3指令集概览
17.3.1基本指令使用
17.3.2无效指令
17.3.3新指令
17.3.4不鼓励使用的资源
17.4总结
第18章x86—64核心编程
18.1x86—64编程基础
18.1.1整数算术运算
18.1.2内存寻址
18.1.3整型操作数
18.1.4浮点数运算
18.2x86—64调用约定
18.2.1基本栈帧
18.2.2使用非易变寄存器
18.2.3使用非易变类型XMM寄存器
18.2.4简化序言和结语的宏
18.3x86—64数组和字符串
18.3.1二维数组
18.3.2字符串
18.4总结
第19章x86—64单指令多数据流架构
19.1x86—SSE—64执行环境
19.1.1x86—SSE—64寄存器组
19.1.2x86—SSE—64数据类型
19.1.3x86—SSE—64指令集概述
19.2x86—AVX执行环境
19.2.1x86—AVX—64寄存器组
19.2.2x86—AVX—64数据类型
19.2.3x86—AVX—64指令集概述
19.3总结
第20章x86—64单指令多数据流编程
20.1x86—SSE—64编程
20.1.1直方图绘制
20.1.2图像转换
20.1.3向量数组
20.2x86—AVX—64编程
20.2.1椭圆体计算
20.2.2RGB图像处理
20.2.3矩阵求逆
20.2.4其他指令
20.3总结
第21章高级主题和优化技巧
21.1处理器微架构
21.1.1多核处理器概述
21.1.2微架构流水线功能
21.1.3执行引擎
21.2优化汇编语言代码
21.2.1基本优化
21.2.2浮点算术
21.2.3程序分支
21.2.4数据对齐
21.2.5SIMD技巧
21.3总结
第22章高级主题编程
22.1无时态内存存储
22.2数据预取
22.3总结
索引
摘要
从个人电脑发明那一天起,很多软件开发者就使用汇编语言编程,以解决各种各样的难题。在PC时代的早期,用x86汇编语言编写大段的程序或整个应用是很普遍的。即便是在C、C++和C#等高级语言越来越流行的今天,许多软件开发者也仍然使用汇编语言来编写性能攸关的代码。虽然近些年编译器进步很快,编译出来的机器码变得更短、更快,但在某些情况下,软件开发者还是需要努力发挥汇编语言编程的优势。     现代x86处理器包含单指令多数据(SIMD)架构,这给我们提供了另一个持续关注汇编语言编程的原因。SIMD架构的处理器可以同时计算多个数据,这可以显著提高那些需要实时响应的应用软件的性能。SIMD架构也非常适合那些计算密集型的领域,比如图像处理、音视频编码、计算机辅助设计、计算机图形学和数据挖掘等。遗憾的是许多高级语言和开发工具不能完全发挥现代x86处理器的SIMD能力。而汇编语言恰恰可以让软件开发者充分利用处理器的全部计算资源。     现代x86汇编语言编程     本书是专门针对x86汇编语言编程的一本启发性教材,其主要目的是教你如何用x86汇编语言编写可被高级语言调用的函数。本书从应用程序编程的角度来解释x86处理器的内部架构。书中包含了非常多的示例代码,帮助你快速理解x86汇编语言编程和x86平台的计算资源。这本书的主要议题包括:     x86-32核心架构、数据类型、内部寄存器、内存寻址模式和基本指令集。     x87核心架构、寄存器栈、特殊寄存器、浮点编码和指令集。     MMX技术和对组合整数进行计算。     流式SIMD扩展(SSE)和高级向量扩展(AVX),包括内部寄存器、组合整型和浮点运算以及相关指令集。     x86-64核心架构、数据类型、内部寄存器、内存寻址模式和基本指令集。     SSE和AVX技术的64位扩展。     x86微架构和汇编语言优化技术。     在讨论其他内容之前,我想特别声明一下本书没有覆盖到的内容。本书没有介绍x86汇编语言的传统内容,比如16位实模式应用和分段内存模型。除了几处历史性的回顾和比较外,所有其他讨论和示例代码都是假定处于x86保护模式和平坦线性内存模型下。本书没有讨论x86的特权指令和用以支持开发操作系统内核的CPU功能,也没有介绍如何用x86汇编语言去开发操作系统或者设备驱动程序。不过,如果你真的想用x86汇编语言去开发那些系统软件,那么需要先充分理解这本书的内容。     虽然理论上仍然可以完全用汇编语言开发一个应用程序,但是现实中的各种需求使得这种方法很难实行。所以本书重点关注如何创建可被C++调用的x86汇编语言模块和函数。本书中的所有示例代码和示例程序都是用微软的Visual C++工具编写并使用微软的宏汇编器编译的。这两个工具都包含在微软的Visual Studio开发工具集里面。     目标读者     本书是针对下面几类软件开发者而编写的:     在Windows平台下开发应用程序并想用x86汇编语言提高程序性能的软件开发者。     在非Windows环境下开发应用程序并想要学习x86汇编语言编程的软件开发者。     对x86汇编语言编程有基本了解,想要学习x86的SSE和AVX指令集的软件开发者。     想要或需要更好理解x86平台(包括其内部架构和指令集)的软件开发者和计算机学院的学生。     本书主要是针对Windows平台上的软件开发者编写的,因为示例代码采用了Visual C++和微软宏汇编编译器。但是,本书并不是一本介绍如何使用微软开发工具的书,非Windows平台开发者也可以从本书获益,因为大多数内容的编写和介绍并不依赖任何特别的操作系统。具有C和C++编程经验有助于读懂本书的内容和示例代码,但是并不需要读者事先具有Visual Studio使用经验,也不需要先学习Windows API。 .    内容概要     本书的主要目的是帮助你学习x86汇编语言编程。为了达到这个目的,你需要全面理解x86处理器的内部架构和执行环境。本书的章节和内容是按照这样的思路规划的。下面简要介绍一下本书的主要议题和各章节的内容。     x86-32核心架构——第1章涵盖了x86-32平台的核心架构,讨论了这个平台的基本数据类型、内部架构、指令操作数和内存寻址模式。这一章也简要介绍了x86-32的核心指令集。第2章讲解了利用x86-32核心指令集和常用编程结构编写x86-32汇编语言程序的基础知识。第2章及其后章节讨论的示例代码都是可以独立运行的程序,这意味着你可以运行、修改或者用这些代码做一些实验来提高学习效果。     x87浮点单元——第3章探讨x87浮点单元(FPU)的架构,描述了x87 FPU的寄存器栈、控制字寄存器、状态字寄存器和指令集。这一章还深入探讨了用于表达浮点数和某些特殊值的二进制编码方案。第4章包含了一些示例,用以演示如何用x87 FPU指令集进行浮点运算。对于那些需要维护x87 FPU代码或者要在不具有x86-SSE和x86-AVX的处理器(比如Intel的Quark)上工作的读者来说,本章的内容是最适用的。     MMX技术——第5章描述了x86的第一个SIMD扩展,即MMX技术。它分析了MMX技术的架构,包括它的寄存器组、操作数类型和指令集。这一章也讨论了一些相关课题,包括SIMD处理概念和组合整型运算。第6章包含了用以演示基本MMX运算的示例

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网