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++中还有引用的存在。无论多么复杂的棋局都是一步步走出来的,同样,无论多么复杂的程序都是一步步运行过来的,编程的本质就是将复杂的程序无限分解,直到分解成可以使用一条指令能够解决为止。
因此通过上边说了那么多,总之,在汇编语言编程中,一定要分清数据和地址,掌握将问题无限划分的方法即可。
Linux下汇编语言学习笔记0 --- 前期准备工作的更多相关文章
- Linux下汇编语言学习笔记10 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记11 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记6 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记7 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记5 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记4 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记2 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记3 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记1 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
随机推荐
- 173 Binary Search Tree Iterator 二叉搜索树迭代器
实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器.调用 next() 将返回二叉搜索树中的下一个最小的数.注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 ...
- T4869 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
题目描述 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe ...
- iOS Programming View and View Hierarchy 视图和视图等级
iOS Programming View and View Hierarchy 视图和视图等级 1.1(1)File → New → Project.. From the iOS section, ...
- DLL线程中坑爹的Synchronize?
1, 缘起 某次开发语音对讲windows程序,采用delphi语言,及delphix的TDXSound控件. DXSound提供了TSoundCaptureStream类,可以实现指定频率.位数.声 ...
- 未找到框架“.NETFramework,Version=v4.5”的引用程序集
问题描述 一般是在编译的时候会出现这样子的问题, 问题原因: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETF ...
- java web 学习笔记 - tomcat数据源
1. 数据库源 以前的JDBC连接步骤为: 1.加载数据库驱动 2.通过DriverManger获取数据库连接connection 3.通过connection执行prepareStatement的响 ...
- Android(java)学习笔记201:JNI之helloword案例(利用NDK工具)
1. 逻辑思路过程图: 2.下面通过一个HelloWorld案例来说明一下JNI利用NDK开发过程(步骤) 分析:我们在Win7系统下编译的C语言代码,我们知道C语言依赖操作系统,不能跨平台,所以我们 ...
- Okhttp3发送xml、json、文件的请求方法
1.引入依赖 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okht ...
- mysql 添加记录或者删除记录
insert into tableName (prod1,pord2,... ) values (v1,v2,...) [,(v1,v2,...),(v1,v2,...)] 程度从强到弱 1.drop ...
- DEBUG无法进入断点解决方法
18/08/17 任务栏:Tools->Options->Debugging->General->Require source files to exactly match t ...