Linux汇编语言程序设计---第零章

来源:互联网 发布:window查看端口进程 编辑:程序博客网 时间:2024/05/17 23:03

作者:Richard Blum

翻译:落叶追风

 

声明:转载请注明出处


简介

 

汇编语言是当今软件领域被误解最深的编程语言之一。提及汇编语言,通常最先被想到的是非常繁杂令人生畏的汇编指令。在到处都能得到高级编程语言快速开发工具的今天,经常听到”汇编语言已死“的说法也就不足为奇了。

然而,汇编语言远远没有走到要消亡的那天。所有的高级编程语言在被链接成可执行程序之前都必须首先编译成汇编代码。对于高级计算机语言的程序员来说,理解汇编语言是有很大好处的,这样,你不仅可以直接用汇编语言编写可供高级语言调用的函数过程,而且更为重要的是你可以非常明白高级语言是如何被编译器编译成汇编代码的。

 

读者对象

 

本书的主要目的是让高级编程语言的程序员能够了解高级语言程序是如何被编译成汇编代码,以及这些汇编代码可以如何被处理被优化。也就是说本书的读者应该已经熟悉至少一门高级语言,比如C, C++或者Java.书中不会花费太多时间去讲解基本编程原理。同时假定你已经了解计算机编程基础,而且有兴趣来了解程序编译过程中究竟发生了什么事情。

然而,如果你果真是一个编程入门新手,并且打算由汇编语言做为出发点来进行编程之旅,这本书并没有完全忘记你。你可以通过通读本书,这样可以获得对汇编语言的一些基本认识,这些认识对一般编程语言也是通用的。书中的每个话题都会给出示例程序。如果你完完全全不明白什么是计算机编程,建议先读一些编程原理介绍性的文章或书籍。

 

本书内容

本书的主要目的是让C/C++程序员了解汇编语言,了解C/C++程序是如何被编译成汇编代码以及这些汇编代码如何被优化以提高程序性能。

所有的计算机高级语言在被链接成可执行程序之前都先要被转换成汇编代码。编译器利用高级语言的语法规则来编译高级语言程序。许多程序员编写完程序之后认为编译器会自动将代码编译成能实现预定功能的可执行目标。然而并不一直是这样的。当编译器将高级语言程序编译成汇编代码时程序中的歧义或其它奇怪的现象就会出现。另外,编译器只会进行一般功能的编译,并不会去进行汇编代码级的像效率方面的优化工作,或者它无法对设计比较糟糕的高级语言程序进合理的性能提升。这些工作正是汇编语言知识的用武之地。

本书将展示如何通过对高级语言程序产生的汇编代码进行修改来提升程序的执行性能以及提供附加功能。同时讲解编译器的编译过程是如何影响你的高级语言程序代码的。

 

内容结构

本书分为三个部分。

第一部分讲解汇编语言编程环境的基本知识。因为在不同的处理器平台,不同的汇编器上,汇编语言编程的方式是有区别的,因此需要选择一个较有代表性的平台。本书选择使用运行在Intel处理器平台上的Linux操作系统做为工作环境。Linux环境提供非常丰富的程序开发工具:一个优化编译器,一个汇编器,一个链接器,一个调试器。这些工具都是免费使用的。这些丰富的工具使得Linux成为一个极佳的剖析C代码与汇编代码的工作环境。

第一部分有如下章节:

第一章,“什么是汇编语言?”揭开汇编语言的神秘面纱,让你知道什么是汇编语言以及它的编程模型,同时给出如何让它和高级编程语言结合使用的基知识。

第二章,“IA-32架构“简要介绍Intel Pentium处理器家族。进行汇编语言编程之前,了解处理器是如何处理应用程序的非常重要。虽然本章并没有深入分析IA-32架构平台的运行方式,但它展示了与编程有关的平台方面的内容。

第三章,“工具选择”讲解本书中使用的Linux开源开发工具。本书使用GNU编译器,汇编器,调试器来进行程序的开发与调试。

第四章,“简章的汇编语言程序”描述如何使用GNU开发工具开发一个简章的汇编语言程序。同时讲解了如何在汇编语言代码中调用C语言库中的函数过程来增加程序的功能。

本书第二部分深入分析汇编语言编程原理。在分析高级语言程序产生的程序代码之前,你必须首先明白汇编语言指令。本部分有如下章节:

第五章,“数据操作”讲解汇编程序中如何来处理数据。用示例展示数据如何在寄存器,内存之间移动,同时讲解汇编中栈的概念。

第六章,“控制流程“描述汇编程序设计中的流程控制指令。对于应用程序的分支进行优化识别是提高程序效率的一个重要方面。

第七章,“使用数字”讨论汇编语言中如何使用各种不同类型的数字。能够合理地操作整数与浮点数在汇编语言程序设计中也是十分重要的。

第八章,“基本数学函数”讲解如何使用汇编语言指令进行加减乘除等数学运算。对于这些很显然的运算,能够提高效率的方法比较少。

第九章,“高级数学函数”讨论如何使用IA-32架构中的浮点数处理单元(FPU)来进行浮点数运算处理。对于数字处理应用来说浮点数处理是相当重要的,而且了解这些对于高级语言程序的设计也大有裨益。

第十章,“字符串处理”将展示多种汇编语言字符串处理指令。字符数据处理也是高级编程语言中一个重要的方面。掌握汇编语言级别的字符串处理对于编写高级语言字符串处理程序也是大有好处的。

第十一章,“使用函数”将开始较深入的汇编语言编程之旅。创建汇编语言函数过程是汇编语言优化的核心。了解汇编语言函数过程的原理对理解编译器编译高级语言而生成的汇编代码有指导性价值。

第十二章,“使用Linux系统调用”将以讲解如何在汇编代码中使用系统库函数结束本部分的讲解。

 

本书最后一个部分将展示汇编语言中比较高级的话题。因为本书的主要目的是讲解如何让高级程序设计语言与汇编语言一起工作,所以本部分前几个章节将讲解如何让C/C++语言与汇编语言一起工作。而本部分的后几个章节则讲解汇编语言的高级方题部分。

 

第十三章,“使用内嵌汇编”将讲解如何将汇编代码嵌入到C/C++语言代码中。内嵌汇编主要是用来生成比较高效的C语言函数过程。

第十四章,“使用汇编程序库”展示如何用汇编语言编写函数库,来供其它语言以及汇编语言本身使用。把经常使用到的函数过程做成库,是一种很节约时间的做法。

第十五章,“函数过程优化”将是本书的核心:自已定制由编译器生成的汇编语言代码。本章展示C语言的不同语法部分是如何被编译成汇编代码的,比如分支结构等。一旦你对这些了如指掌,自已修改汇编代码或C代码来满特殊需要将不怎么费力。

第十六章,“文件操作”讲解程序设计是相当常用的文件操作。几乎所有的应用都需要与系统交互,需要访问系统中的文件。汇编语言应用也不例外。本章主要讲解如何使用系统提供的各种文件处理系统调用来操作文件数据。

第十七章,“使用IA-32高级特性”以介绍英特尔的单指令多数据(SIMD)技术结束本书的学习旅程。该技术为程序设计人员提供一个使用一条指定完成多个数学运算的平台。在多媒体应用日益盛行的今天这项技术意义重大。

 

所需工具

gcc, gas, ld, gdb

 

 

原创粉丝点击