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

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

  

最新文章

  1. Util应用程序框架公共操作类(七):Lambda表达式公共操作类
  2. 1264: [AHOI2006]基因匹配Match
  3. dataTables-使用详细说明整理
  4. Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
  5. Android基于mAppWidget实现手绘地图(十一)–移动地图到某个坐标
  6. 学习之路三十六:SQL知识总结 - [游标||字符串分割]
  7. Zabbix 集成 OneAlert 实现全方位告警
  8. 1055: [HAOI2008]玩具取名 - BZOJ
  9. 盘点六大在中国复制失败的O2O案例
  10. 报错找不到org.apache,http...的解决办法
  11. Spring读取外部属性-properties
  12. cpp - 编译过程
  13. 使用 canvas 画图时图像文字模糊的解决办法
  14. hdu-2255(带权二分图)
  15. 【Luogu P2664】树上游戏
  16. 给a链接跳转后的页面添加class
  17. 第五节《Git基本操作》
  18. Spring JdbcTemplate中的回调
  19. led灯的驱动电流和电阻
  20. Simple2D-14(音乐播放器)简介

热门文章

  1. 把sed当作命令解释器使用
  2. SharePoint Server 2013 Search Service stop
  3. android开发学习--网络请求框架RxJava+Retrofit
  4. Android开发学习--ViewPager使用入门
  5. (1)《Head First HTML与CSS》学习笔记---HTML基本概念
  6. 机器学习-Probabilistic interpretation
  7. iOS---开发实用传感器
  8. http升级https改造方案
  9. angular2快速开始
  10. es6 基础语法