Linux下汇编语言学习笔记0 --- 前期准备工作

  这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译《汇编语言基于Linux环境》的书,喜欢看原版书的同学可以看《Assembly Language Step-By-Setp:Programming with Linux 3rd Edition》,非常感谢该书的作者和译者,谢谢你们提供了这么好的学习材料。

  汇编语言作为编程语言,是任何一位想在计算机科学与技术领域发展的人必须要掌握的;汇编技术,是任何一位想在计算机科学与技术领域发展的人必须要熟悉的;国内有对应的汇编网(www.asmedu.net)对应的学习平台都非常不错,因此,学好汇编不再是梦想,将你的渴望或作学习的动力吧,一切都会变得非常容易。

  本书和博主主要使用的学习平台是Linux操作系统,Windows系统很好,但是觉得不是很适合我,如果你必须在windows下工作或学习,请自行解决,如果你用的恰好是win10系统,应该可以通过win10安装Linux子系统,个人觉得,如果想要深入学习,干脆安装个Linux系统,可以是双系统,如果实在是懒得要命,可以购买一个u盘,将其制作成linux启动盘,使用起来会更加方便。具体安装Linux和制作LInux启动盘的事宜,请阅读者自行解决。本人的操作系统Linux是Manjaro Linux 32bit,2017年7月12日刚刚升级完成,作为一个滚动版本,应该可以算是最新的版本。编辑器使用Vim8.0, 调试器主要是gdb7.12,编译和链接使用as和ld工具。

  现在的高级语言那么多,为什么要学习汇编语言。也许很多读者具有学习C语言的经历,但是如果你自己问过自己,C语言的运行过程你怎的明白了吗,恐怕有90%以上的人对指针都是懵懂的,库就根本不知道。如果你需要真正明白计算机运行的原理,或者对计算机的运行过程非常好奇,也许学习汇编语言是你最好的选择。为什么学习汇编语言,因为我非常想知道计算是怎么运行的,更想知道它为什么这么运行,这就够了。OK,一切准备妥当,准备出发。与其他高级语言尽量隐藏运行细节不同的是,汇编语言的所有过程都可以监控,可以查看CPU的标志寄存器掌握CPU的每次芯跳,查看所有可能状态,有吸引力。通过汇编语言的学习,可以让我们象计算机一张的思考,容易写出更加高效的代码。

  计算机做事的风格其实和人做事的风格几乎是一样的,一切按照计划来完成,小到一个指令,大到操作系统的运行。如果用下跳棋作为例子,所有参与下棋的人都明白跳棋的规则,就是只要选择的线路中可以按规则跳转,那么就发挥你聪明的才智,尽情的跳跃吧,只要能早早到达指定的目标,当所有的棋子到对应的位置就算胜利。在这个过程中,下棋者只关注跳的步骤和最终棋子所在的位置,步骤就是计算机编程中的算法,函数,指令等,位置就对应着存放数据的地方。汇编语言中,主要有寄存器和内存充当。在高级语言中,尽量模糊数据和存储数据的位置,在汇编中需要分的非常清楚,就像跳棋棋盘中的一个个的小圆圈,可以放置跳棋的棋子,只有在棋子放置到特定的小圆圈上时,才认为他们是一样的,看到了小圆圈,就看到了棋子,即便是这样,他们依旧是位置和内容。很显然的是,其他的棋子也放置到同一个小圆圈上,而同一个棋子可以被放置到不同的小圆圈上,否则就根本无法胜利了。每个小圆圈都代表着棋盘上不同的位置,计算机内存中称为地址;每一枚棋子是一个个不同的内容,计算机中称为数据;数据可以放到地址,地址中可以没有有效数据,高级语言中常用变量来表示数据,其实使用变量和地址访问数据都是毫无问题的,因此变量可以被当作是数据地址的别名。因此,指针的概念非常的流行,甚至在C++中还有引用的存在。无论多么复杂的棋局都是一步步走出来的,同样,无论多么复杂的程序都是一步步运行过来的,编程的本质就是将复杂的程序无限分解,直到分解成可以使用一条指令能够解决为止。

  因此通过上边说了那么多,总之,在汇编语言编程中,一定要分清数据和地址,掌握将问题无限划分的方法即可。

  

posted @ 2017-07-12 14:55  叕叒双又  阅读(445)  评论(0编辑  收藏  举报