这是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++中还有引用的存在。无论多么复杂的棋局都是一步步走出来的,同样,无论多么复杂的程序都是一步步运行过来的,编程的本质就是将复杂的程序无限分解,直到分解成可以使用一条指令能够解决为止。

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

  

Linux下汇编语言学习笔记0 --- 前期准备工作的更多相关文章

  1. Linux下汇编语言学习笔记10 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  2. Linux下汇编语言学习笔记11 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  3. Linux下汇编语言学习笔记6 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  4. Linux下汇编语言学习笔记7 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. Linux下汇编语言学习笔记5 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  6. Linux下汇编语言学习笔记4 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. Linux下汇编语言学习笔记2 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  8. Linux下汇编语言学习笔记3 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. Linux下汇编语言学习笔记1 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

随机推荐

  1. [转]Keyword Reference (F#)

    Visual F# Development Portal http://msdn.microsoft.com/en-us/library/vstudio/ff730280.aspx 本文转自:http ...

  2. AJPFX总结final、finally、finallize的区别

    final.finally.finallize有何区别?    final表示一个修饰符,如果用它来修饰一个类,则该类是不能继承的:如果用它来修饰一个变量,则该变量一旦赋值之后就不能再修改:如果用它来 ...

  3. java获取公网ip以及物理地址和代理商

    package ipconfig; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...

  4. SpringBoot之旅第七篇-Docker

    一.引言 记得上大三时,要给微机房电脑安装系统,除了原生的操作系统外,还要另外安装一些必要的开发软件,如果每台电脑都重新去安装的话工作量就很大了,这个时候就使用了windows镜像系统,我们将要安装的 ...

  5. CROSS APPLY AND CROSS APPLY

    随着业务千奇百怪,DBA数据库设计各有不同,一对多关系存JSON或字符串逗号分隔... 今天小编给大家分享一下针对这个问题的解决办法 问题一.存储过程接受参数格式为XXX,XXX 解决办法:将字符转成 ...

  6. CSS3 按钮特效(一)

    1. 实例 2.HTML 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  7. Spark学习之基于MLlib的机器学习

    Spark学习之基于MLlib的机器学习 1. 机器学习算法尝试根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或作出决定. 2. MLlib完成文本分类任 ...

  8. 锐动SDK应用于行车记录仪

    方案架构 手机端直播与录播功能忠实记录旅途中各种突发事件,还原事实真相,与家人和朋友分享沿途美景,一同感受美妙之旅. 强大的视频编辑功能,像编辑图片一样给视频添加各种滤镜,配音,配乐,标题文字等特效. ...

  9. Array和ArrayList之间的区别

    . Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明. . Array只能存储同构的对象,而ArrayList可以存储异构的对象. 同构的对 ...

  10. 翻译:高级t - sql第1级的阶梯:使用交叉连接来引入高级t - sql

    高级t - sql第1级的阶梯:使用交叉连接来引入高级t - sql 源于:格雷戈里·拉森,2016/02/19(首次出版:2014/12/17 翻译:刘琼滨 谢雪妮 徐雅莉 赖慧芳 链接:http: ...