内容简介
是否真正理解汇编语言,常常是普通程序员和程序员的分水岭。《深入理解程序设计:使用Linux汇编语言》介绍了Linux平台下的汇编语言编程,教你从计算机的角度看问题,从而了解汇编语言及计算机的工作方式,为成就自己的程序员之梦夯实基础。
很多人都认为汇编语言晦涩难懂,但New Medio技术总监Jonathan Bartlett的这本书将改变人们的看法。本书先介绍计算机的体系结构,然后从编写简单程序开始,一步一步扩充函数、文件、读写处理等知识,并平滑过渡到程序共享、存储与优化,由浅入深地介绍了Linux汇编语言编程。作者不仅会带你了解向计算机传递信息的方式方法,还让你学会向修改和使用程序的人传递信息,并用自己的规则构建“世界”,按自己对问题的理解和解决方案创造“世界”。
主要内容:
计算机体系结构(详解内存及寻址方式);
编程初体验;
函数使用及复杂度处理;
文件处理及缓冲区分析;
记录读写及修改;
通过测试及错误处理打造健壮程序;
程序共享;
内存布局及处理;
计算机的计数原理;
程序优化(时机、位置及方式)。
目录
目 录
第1章 引言 1
1.1 欢迎加入编程大军 1
1.2 工具 2
第2章 计算机体系结构 5
2.1 内存结构 5
2.2 CPU构造 6
2.3 几个术语 7
2.4 内存详解 9
2.5 寻址方式 10
2.6 温故知新 11
2.6.1 理解概念 11
2.6.2 应用概念 11
2.6.3 深入学习 12
第3章 编写第一个程序 13
3.1 编程初体验 13
3.2 汇编语言程序概要 15
3.3 为程序做规划 19
3.4 查找值 21
3.5 寻址方式 27
3.6 温故知新 30
3.6.1 理解概念 30
3.6.2 应用概念 30
3.6.3 深入学习 31
第4章 关于函数 32
4.1 处理复杂度 32
4.2 函数的工作原理 33
4.3 使用C调用约定的汇编语言函数 34
4.4 函数示例 38
4.5 递归函数 41
4.6 温故知新 46
4.6.1 理解概念 46
4.6.2 应用概念 47
4.6.3 深入学习 47
第5章 文件处理 48
5.1 UNIX文件的概念 48
5.2 缓冲区和.bss 49
5.3 标准文件和特殊文件 50
5.4 在程序中使用文件 51
5.5 温故知新 60
5.5.1 理解概念 60
5.5.2 应用概念 61
5.5.3 深入学习 61
第6章 读写简单记录 62
6.1 写入记录 65
6.2 读取记录 69
6.3 修改记录 73
6.4 温故知新 76
6.4.1 理解概念 76
6.4.2 应用概念 76
6.4.3 深入学习 76
第7章 开发健壮的程序 77
7.1 将时间用在何处 77
7.2 开发健壮程序的技巧 78
7.2.1 用户测试 78
7.2.2 数据测试 78
7.2.3 模块测试 79
7.3 有效处理错误 80
7.3.1 的错误处理代码 80
7.3.2 恢复点 80
7.4 让程序更健壮 81
7.5 温故知新 83
7.5.1 理解概念 83
7.5.2 应用概念 83
7.5.3 深入学习 83
第8章 与代码库共享程序 84
8.1 使用共享库 85
8.2 共享库的工作原理 86
8.3 查找关于库的信息 87
8.4 一些有用的函数 91
8.5 构建一个共享库 92
8.6 温故知新 93
8.6.1 理解概念 93
8.6.2 应用概念 94
8.6.3 深入学习 94
第9章 关于中间存储器 95
9.1 计算机如何看待内存 95
9.2 Linux程序的内存布局 96
9.3 每个内存地址都是虚拟的 98
9.4 获取更多的内存 100
9.5 一个简单的内存管理器 101
9.5.1 变量和常量 106
9.5.2 性能问题及其他 111
9.6 使用我们的分配器 112
9.7 更多信息 114
9.8 温故知新 114
9.8.1 理解概念 114
9.8.2 应用概念 114
9.8.3 深入学习 115
第10章 像计算机一样计数 116
10.1 计数 116
10.1.1 像人类一样计数 116
10.1.2 像计算机一样计数 117
10.1.3 二进制和十进制之间的转换 118
10.2 真假和二进制数 120
10.3 程序状态寄存器 126
10.4 其他计数系统 127
10.4.1 浮点数 127
10.4.2 负数 128
10.5 八进制和十六进制数字 129
10.6 一个字中的字节顺序 130
10.7 将数字转换成字符显示 131
10.8 温故知新 135
10.8.1 理解概念 135
10.8.2 应用概念 136
10.8
摘要与插图
【引言】1.1 欢迎加入编程大军
我热爱编程,编写不但能运行而且风格良好的程序是我欢的挑战。编程如同写诗。它不仅是向计算机传递信息,也是向修改和使用程序的人传递信息。有了程序,你就能用一套规则构建自己的世界,按自己对问题的理解和自己构思的解决方案来创造自己的世界。高明的程序员可以用诗篇或散文般简明的程序来构建世界。
作为大的程序员之一,Donald Knuth这样向我们描述编程:编程并非告诉计算机如何做某件事,而是告诉人们程序员如何指示计算机做某件事。这里的关键在于:程序不仅仅是给计算机看的,更是给人看的。当你转向其他项目后,你的程序将由其他人修改和更新。因此,编程并非只需要和计算机交流,更意味着要和接替你的程序员沟通。程序员不仅是问题的解决者,同时也是诗人和教师。作为程序员,你的目标是以协调、优雅的方式解决手边的问题,并把自己的解决方案传授给未来的程序员。希望本书至少能有这个荣幸:向你传授一些让使用计算机变得令人兴奋的诗意和魔力。
多数入门编程书籍让我感到失望。读完这类书之后,我们仍然会问“计算机到底是怎么工作的”,并且不能获得圆满的答案。这些书遇到那些艰深的主题往往就语焉不详,即使这些主题重要。在本书中,我将会引导你理解这些难懂的问题,因为这是成为编程高手的途径。我的目标是让那些对编程一无所知的人懂得如何像程序员那样思考、编程和学习。当然,读过本书之后,你不可能掌握与编程有关的一切,但将会对所有这一切是如何相互配合的有所了解。认真阅读本书后,你应该能够做到以下几点:
了解程序的工作原理以及一个程序如何与其他程序交互;
学会阅读他人的程序并了解其工作原理;
快速学习新的编程语言;
快速学习的计算机科学概念。
当然,我无法在这本书中将与编程有关的一切传授给你。因为计算机科学是个宽广的领域,尤其在涉及计算机编程理论与实践相结合时更是如此。然而,我会尝试让你打好基础,这样,以后你就能比较容易地向任何感兴趣的方向发展。
教授编程是汇编语言编程,与“先有鸡还是先有蛋”的问题颇有几分类似。在这里,有很多东西需要学习,要马上学会这一切确实有点勉为其难。但由于各部分知识是相互联系的,所以学习编程时,你只要一以贯之地耐心对待你自己和计算机,就会较快地学有所成。在学习本书的过程中,对第一次阅读时未能理解的内容,请再读一遍。如果仍然不明白,也许暂时记住它,稍后再去回顾和理解会更好。因为通常情况下,必须在对编程有更多接触后,那些概念才会变得更易理解。不要气馁,这个过程尽管漫长而艰难,但一切努力都是值得的。
本书每章的末尾都有三组复习题:第一组用于回想,检查你是否记得在该章学到的知识;第二组涉及实际应用,检验你是否能运用学到的知识解决问题;一组是为了检验你能否拓展视野、举一反三。一组题目中的有些问题要等学习了后面的章节才能回答,但它们会让你带着问题学习后续的内容。有些问题需要研究本书之外的资料才能找到答案,还有一些问题要求简单分析你的选择,对方案加以说明。需要指出的是,许多问题的答案并无对错之分,但这并不意味着它们不重要。学习编程中所涉及的问题、学习如何通过调研找到答案、学习编程时如何考虑未来的变数,这些都是程序员工作的重要组成部分。
如果有实在无法解答的问题,读者可借助本书的邮件列表pgubook-readers@nongnu.org讨论书中内容并获得帮助。(通过此邮件列表,读者可提出与本书有关的任何问题。)你可以通过访问http://mail.nongnu.org/mailman/listinfo/pgubook-readers来订阅此列表。