| 书名: | 汇编语言程序设计[按需印刷]|28024 |
| 图书定价: | 48元 |
| 图书作者: | (美)Richard Blum |
| 出版社: | 机械工业出版社 |
| 出版日期: | 2006/1/1 0:00:00 |
| ISBN号: | 7111175328 |
| 开本: | 16开 |
| 页数: | 409 |
| 版次: | 1-1 |
| 作者简介 |
| Richard Blum毕业于美国普度大学电气工程专业,在美国一家政府组织工作了15年以上。在此期间,他使用过各种编程语言(C、C++、Java和Microsoft VB.NET以及C#)编写实用程序,因此他发现一个非常有价值的事实:通过研究编译器生成的汇编语言代码及使用汇编语言例程,可明显提高高级语言程序的执行速度。本书正是他多年实践与研究的成果。 |
| 内容简介 |
| 每种高级语言程序在连接为可执行程序之前,都必须被编译为汇编语言程序,因此对于高级语言程序设计者来说,了解编译器如何生成汇编语言代码十分有用。 本书分为三部分。第一部分讲解汇编语言程序设计环境基础,第二部分研究汇编语言程序设计,最后一部分讲解高级汇编语言技术。本书的主要目的是向使用高级语言的程序员讲解编译器如何从C和C++程序创建汇编语言例程,以及编程人员应如何掌握生成的汇编语言代码,调整汇编语言例程以提高应用程序的性能。 本书适合有一定编程经验的开发人员参考。 每种高级语言(比如C和C++)在连接为可执行程序之前都会被编译器转换成汇编语言。本书面向使用高级语言的开发人员,讲解如何查看和解释编译器生成的汇编语言代码,了解它们是如何创建的,从而可以修改编译器生成的代码或创建自己的汇编语言例程。本书揭示如何使程序中的函数更快更高效的内幕,以及提高应用程序性能的方法。 本书主要内容:查看高级语言程序生成的汇编语言代码的好处;如何为Linux奔腾处理器环境创建独立的汇编语言程序;如何将高级函数和库整合到汇编语言程序中;如何将汇编语言例程整合到C和C++应用程序中;如何在汇编语言程序中使用Linux系统调用;如何在应用程序中使用奔腾处理器的MMX和SSE功能。 |
| 目录 |
前言 第一部分 汇编语言程序设计环境基础 第1章 什么是汇编语言 1.1 处理器指令 1.1.1 指令码处理 1.1.2 指令码格式 1.2 高级语言 1.2.1 高级语言的种类 1.2.2 高级语言的特性 1.3 汇编语言 1.3.1 操作码助记符 1.3.2 定义数据 1.3.3 命令 1.4 小结 第2章 IA-32平台 2.1 IA-32处理器的核心部分 2.1.1 控制单元 2.1.2 执行单元 2.1.3 寄存器 2.1.4 标志 2.2 IA-32的高级特性 2.2.1 x87浮点单元 2.2.2 多媒体扩展 2.2.3 流化SIMD扩展 2.2.4 超线程 2.3 IA-32处理器系列 2.3.1 Intel处理器 2.3.2 非Intel处理器 2.4 小结 第3章 相关的工具 3.1 开发工具 3.1.1 汇编器 3.1.2 连接器 3.1.3 调试器 3.1.4 编译器 3.1.5 目标代码反汇编器 3.1.6 简档器 3.2 GNU汇编器 3.2.1 安装汇编器 3.2.2 使用汇编器 3.2.3 关于操作码语法 3.3 GNU连接器 3.4 GNU编译器 3.4.1 下载和安装gcc 3.4.2 使用gcc 3.5 GNU调试器程序 3.5.1 下载和安装gdb 3.5.2 使用gdb 3.6 KDE调试器 3.6.1 下载和安装kdbg 3.6.2 使用kdbg 3.7 GNU objdump程序 3.7.1使用objdump 3.7.2 objdump范例 3.8 GNU简档器程序’ 3.8.1 使用简档器 3.8.2 简档范例 3.9 完整的汇编开发系统 3.9.1 Linux基础 3.9.2 下载和运行MEPIS 3.9.3 新的开发系统 3.10 小结 第4章 汇编语言程序范例 4.1 程序的组成 4.1.1 定义段 4.1.2 定义起始点 4.2 创建简单程序 4.2.1 CPUID指令 4.2.2 范例程序 4.2.3 构建可执行程序 4.2.4 运行可执行程序 4.2.5 使用编译器进行汇编 4.3 调试程序 4.4 在汇编语言中使用C库函数 4.4.1 使用printf 4.4.2 连接C库函数 4.5 小结 第二部分 汇编语言程序设计基础 第5章 传送数据 5.1 定义数据元素 5.1.1 数据段 5.1.2 定义静态符号 5.1.3 bss段 5.2 传送数据元素 5.2.1 MOV指令格式 5.2.2 把立即数传送到寄存器和内存 5.2.3 在寄存器之间传送数据 5.2.4 在内存和寄存器之间传送数据 5.3 条件传送指令 5.3.1 CMOV指令 5.3.2 使用CMOV指令 5.4 交换数据 5.4.1 数据交换指令 5.4.2 使用数据交换指令 5.5 堆栈 5.5.1 堆栈如何工作 5.5.2 压入和弹出数据 5.5.3 压入和弹出所有寄存器 5.5.4 手动使用ESP和EBP寄存器 5.6 优化内存访问 5.7 小结 第6章 控制执行流程 6.1 指令指针 6.2 无条件分支 6.2.1 跳转 6.2.2 调用 6.2.3 中断 6.3 条件分支 6.3.1 条件跳转指令 6.3.2 比较指令 6.3.3 使用标志位的范例 6.4 循环 6.4.1 循环指令 6.4.2 循环范例 6.4.3 防止LOOP灾难 6.5 模仿高级条件分支 6.5.1 if语句 6.5.2 for循环 6.6 优化分支指令 6.6.1 分支预测 6.6.2 优化技巧 6.7 小结 第7章 使用数字 7.1 数字数据类型 7.2 整数 7.2.1 标准整数长度 7.2.2 无符号整数 7.2.3 带符号整数 7.2.4 使用带符号整数 7.2.5 扩展整数 7.2.6 在GNU汇编器中定义整数 7.3 SIMD整数 7.3.1 MMX整数 7.3.2 传送MMX整数 7.3.3 SSE整数 7.3.4 传送SSE整数 7.4 二进制编码的十进制 7.4.1 BCD是什么 7.4.2 FPUBCD值 7.4.3 传送BCD值 7.5 浮点数 7.5.1 浮点数是什么 7.5.2 标准浮点数据类型 7.5.3 IA-32浮点值 7.5.4 在GNU汇编器中定义浮点值 7.5.5 传送浮点值 7.5.6 使用预置的浮点值 7.5.7 SSE浮点数据类型 7.5.8 传送SSE浮点值 7.6 转换 7.6.1 转换指令 7.6.2 转换范例 7.7 小结 第8章 基本数学功能 8.1 整数运算 8.1.1 加法 8.1.2 减法 8.1.3 递增和递减 8.1.4 乘法 8.1.5 除法 8.2 移位指令 8.2.1 移位乘法 8.2.2 移位除法 8.2.3 循环移位 8.3 十进制运算 8.3.1 不打包BCD的运算 8.3.2 打包BCD的运算 8.4 逻辑操作 8.4.1 布尔逻辑 8.4.2 位测试 8.5 小结 第9章 高级数学功能 9.1 FPU环境 9.1.1 FPU寄存器堆栈 9.1.2 FPU状态、控制和标记寄存器 9.1.3 使用FPU堆栈 9.2 基本浮点运算 9.3 高级浮点运算 9.3.1 浮点功能 9.3.2 部分余数 9.3.3 三角函数 9.3.4 对数函数 9.4 浮点条件分支 9.4.1 FCOM指令系列 9.4.2 FCOMI指令系列 9.4.3 FCMOV指令系列 9.5 保存和恢复FPU状态 9.5.1 保存和恢复FPU环境 9.5.2 保存和恢复FPU状态 9.6 等待和非等待指令 9.7 优化浮点运算 9.8 小结 第10章 处理字符串 10.1 传送字符串 10.1.1 MOVS指令 10.1.2 REP前缀 10.1.3 其他REP指令 10.2 存储和加载字符串 10.2.1 LODS指令 10.2.2 STOS指令 10.2.3 构建自己的字符串函数 10.3 比较字符串 10.3.1 CMPS指令 10.3.2 CMPS和REP一起使用 10.3.3 字符串不等 10.4 扫描字符串 10.4.1 SCAS指令 10.4.2 搜索多个字符 10.4.3 计算字符串长度 10.5 小结 第11章 使用函数 11.1 定义函数 11.2 汇编函数 11.2.1 编写函数 11.2.2 访问函数 11.2.3 函数的放置 11.2.4 使用寄存器 11.2.5 使用全局数据 11.3 按照C样式传递数据值 11.3.1 回顾堆栈 11.3.2 在堆栈之中传递函数参数 11.3.3 函数开头和结尾 11.3.4 定义局部函数数据 11.3.5 清空堆栈 11.3.6 范例 11.3.7 在操作之中监视堆栈 11.4 使用独立的函数文件 11.4.1 创建独立的函数文件 11.4.2 创建可执行文件 11.4.3 调试独立的函数文件 11.5 使用命令行参数 11.5.1 程序剖析 11.5.2 分析堆栈 11.5.3 查看命令行参数 11.5.4 查看环境变量 11.5.5 使用命令行参数的范例 11.6 小结 第12章 使用Linux系统调用 12.1 Linux内核 12.1.1 内核组成 12.1.2 Linux内核版本 12.2 系统调用 12.2.1 查找系统调用 12.2.2 查找系统调用定义 12.2.3 常用系统调用 12.3 使用系统调用 12.4 复杂的系统调用返回值 12.4.1 sysinfo系统调用 12.4.2 使用返回结构 12.4.3 查看结果 12.5 跟踪系统调用 12.5.1 strace程序 12.5.2 高级strace参数 12.5.3 监视程序系统调用 12.5.4 附加到正在运行的程序 12.6 系统调用和C库 12.6.1 C库 12.6.2 跟踪C函数 12.6.3 系统调用和C库的比较 12.7小结 第三部分 高级汇编语言技术 第13章 使用内联汇编 13.1 什么是内联汇编 13.2 基本的内联汇编代码 13.2.1 asm格式 13.2.2 使用全局C变量 13.2.3 使用volatile修饰符 13.2.4 使用替换的关键字 13.3 扩展asm 13.3.1 扩展asm格式 13.3.2 指定输入值和输出值 13.3.3 使用寄存器 13.3.4 使用占位符 13.3.5 引用占位符 13.3.6 替换的占位符 13.3.7 改动的寄存器列表 13.3.8 使用内存位置 13.3.9 使用浮点值 13.3.10 处理跳转 13.4 使用内联汇编代码 13.4.1 什么是宏 13.4.2 C宏函数 13.4.3 创建内联汇编宏函数 13.5 小结 笫14章 调用汇编库 14.1 创建汇编函数 14.2 编译C和汇编程序 14.2.1 编译汇编源代码文件 14.2.2 使用汇编目标代码文件 14.2.3 可执行文件 14.3 在C程序中使用汇编函数 14.3.1 使用整数返回值 14.3.2 使用字符串返回值 14.3.3 使用浮点返回值 14.3.4 使用多个输入值 14.3.5 使用混合数据类型的输入值 14.4 在C++程序中使用汇编函数 14.5 创建静态库 14.5.1 什么是静态库 14.5.2 ar命令 14.5.3 创建静态库文件 14.5.4 编译静态库 14.6 使用共享库 14.6.1 什么是共享库 14.6.2 创建共享库 14.6.3 编译共享库 14.6.4 运行使用共享库的程序 14.7 调试汇编函数 14.7.1 调试C程序 14.7.2 调试汇编函数 14.8 小结 第15章 优化例程 15.1 优化编译器代码 15.1.1 编译器优化级别1 15.1.2 编译器优化级别2 15.1.3 编译器优化级别3 15.2 创建优化的代码 15.2.1 生成汇编语言代码 15.2.2 查看优化的代码 15.2.3 重新编译优化的代码 15.3 优化技巧 15.3.1 优化运算 15.3.2 优化变量 15.3.3 优化循环 15.3.4 优化条件分支 15.3.5 通用子表达式消除 15.4 小结 第16章 使用文件 16.1 文件处理顺序 16.2 打开和关闭文件 16.2.1 访问类型 16.2.2 UNIX权限 16.2.3 打开文件代码 16.2.4 打开错误返回代码 16.2.5 关闭文件 16.3 写入文件 16.3.1 简单的写入范例 16.3.2 改变文件访问模式 16.3.3 处理文件错误 16.4 读取文件 16.4.1 简单的读取范例 16.4.2 更加复杂的读取范例 16.5 读取、处理和写入数据 16.6 内存映射文件 16.6.1 什么是内存映射文件 16.6.2 mmap系统调用 16.6.3 mmap汇编语言格式 16.6.4 mmap范例 16.7 小结 第17章 使用高级IA-32特性 17.1 SIMD简介 17.1.1 MMX 17.1.2 SSE 17.1.3 SSE2 17.2 检测支持的SIMD操作 17.2.1 检测支持 17.2.2 SIMD特性程序 17.3 使用MMX指令 17.3.1 加载和获得打包的整数值 17.3.2 执行MMX操作 17.4 使用SSE指令 17.4.1 传送数据 17.4.2 处理数据 17.5 使用SSE2指令 17.5.1 传送数据 17.5.2 处理数据 17.6 SSE3指令 17.7 小结 |
说实话,我之前对汇编语言一直抱着敬而远之的态度,总觉得那是属于高级程序员的领域,普通爱好者望尘莫及。直到我入手了这本《汇编语言程序设计》,我的看法彻底改变了。这本书的优点实在太多了,让我不知道从何说起。首先,它的内容组织非常合理,从最基础的寄存器、内存地址讲到指令集、跳转、中断等,每一个概念都讲解得通俗易懂,而且相互之间联系紧密,构成了一个完整的知识体系。我尤其喜欢书中对实际操作的强调,它不仅仅停留在理论层面,而是提供了大量的实践案例,让我可以动手去验证书中的知识点。我花了一个下午的时间去理解书中的一个关于内存管理的章节,通过书中的例子,我清晰地看到了程序在内存中是如何分配和访问的,这对我理解操作系统的工作原理有了极大的帮助。而且,这本书的语言风格也非常亲切,不像有些技术书籍那样冰冷干燥,读起来很有亲近感。它让我觉得学习汇编语言并非遥不可及,而是可以通过努力和实践去掌握的。这本书让我对计算机的底层运作有了更深刻的理解,也激发了我进一步探索更复杂编程技术的兴趣。
评分这本书的出版,对于我这样一名业余爱好者来说,简直是福音!我一直对计算机的“黑箱”操作感到好奇,想知道我们编写的高级语言代码,最终是如何变成机器能够识别的指令的。之前尝试过一些相关的资料,但总是因为过于专业而难以入门。直到我发现了这本《汇编语言程序设计》,我才找到了真正的“入门钥匙”。书中的讲解非常循序渐进,从最基本的数据类型、运算符号开始,逐步深入到更复杂的逻辑控制和内存管理。我特别欣赏书中对“编译器”和“链接器”这两个概念的讲解,它让我理解了高级语言代码是如何一步步被翻译和组装成可执行文件的。我跟着书中的步骤,用自己搭建的开发环境,成功地将一个简单的C语言程序反汇编成汇编代码,并对其进行分析,这个过程让我感到无比兴奋!仿佛我亲手揭开了程序的神秘面纱。这本书没有让我觉得枯燥乏味,反而充满了探索的乐趣。它让我对计算机的底层运行原理有了更直观的认识,也让我对编程的本质有了更深的理解。我强烈推荐给所有对计算机底层技术感兴趣的朋友们,这本书绝对能让你打开新世界的大门。
评分我作为一个计算机专业的学生,在学习过程中接触过不少相关的书籍,但《汇编语言程序设计》这本书给我的感觉是独一无二的。它不像我之前看的那些教科书那样,只是死板地罗列指令和语法,而是以一种非常生动有趣的方式来引导读者进入汇编的世界。书中对各个指令的讲解都非常透彻,而且会结合一些实际的场景来阐述其作用。我记得有一个章节讲解了中断处理,通过书中的图示,我才真正明白了当一个外部事件发生时,CPU是如何暂停当前任务,转而去执行中断服务程序的。这种深入浅出的讲解方式,让我对计算机的事件驱动机制有了全新的认识。而且,这本书的排版和设计也非常好,大量的图表和代码高亮,让阅读体验非常舒适。我常常会一边看书,一边在自己的虚拟机上动手实践,书中的每一个例子都能够成功运行,并且能够帮助我巩固所学知识。这本书不仅仅是教授汇编语言,更是在培养一种对计算机底层原理的深刻理解。我相信,这本书对任何想要深入了解计算机科学的学生来说,都是一本不可多得的宝藏。
评分这本书真的让我眼前一亮!作为一名对计算机底层原理一直充满好奇的初学者,我尝试过不少入门级的教材,但总感觉隔靴搔痒,抓不住精髓。这次偶然翻到这本《汇编语言程序设计》,虽然一开始被“汇编”这两个字吓到,但读下去后,立刻被它清晰的逻辑和循序渐进的讲解所吸引。作者并没有一开始就抛出一堆晦涩难懂的指令,而是从最基础的概念讲起,比如什么是CPU,什么是内存,它们是如何协同工作的。通过生动的比喻和图示,我仿佛能看到数据在机器内部穿梭的轨迹。更让我惊喜的是,书中穿插了大量的代码示例,并且这些示例都非常贴近实际应用,让我能立刻理解理论知识是如何转化为实际功能的。我记得其中有一个章节讲解了如何用汇编语言实现一个简单的计算器,我跟着书中的步骤一行一行地敲代码,调试,最终看到计算器成功运行的那一刻,成就感爆棚!感觉自己真的触摸到了计算机的灵魂。这本书不像很多技术书那样枯燥乏味,反而像一位经验丰富的老师,耐心引导着我一步步探索计算机的奥秘。我强烈推荐给所有想深入了解计算机工作原理的朋友们,它会让你对“代码”二字有全新的认识。
评分这本《汇编语言程序设计》真的是一本让我相见恨晚的书!作为一名已经工作了几年的程序员,虽然我平时主要用高级语言开发,但内心深处一直渴望能够更深入地理解计算机的运行机制。这本书完全满足了我的需求。它并没有局限于某个特定的处理器架构,而是以一种非常普适的视角来讲解汇编语言的核心概念。书中对CPU内部结构、指令执行流程的描述尤其精彩,通过详细的图解和文字说明,我终于理解了程序是如何被CPU一条条指令翻译并执行的。我印象最深刻的是关于“栈”的讲解,书中的例子非常直观地展示了函数调用时栈帧的创建和销毁过程,这让我对程序运行时的内存使用有了更清晰的认识。而且,这本书不仅仅是知识的堆砌,它还非常注重培养读者的逻辑思维能力。在讲解每个概念时,作者都会引导读者去思考“为什么”以及“如何实现”,这让我受益匪浅。我已经开始尝试将书中的一些小技巧应用到我日常的工作中,感觉对代码的理解又上了一个台阶。强烈推荐给所有希望提升自己底层编程能力和计算机科学素养的开发者!
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有