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 ...
随机推荐
- 441 Arranging Coins 排列硬币
你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币.给定一个数字 n,找出可形成完整阶梯行的总行数.n 是一个非负整数,并且在32位有符号整型的范围内.示例 1:n ...
- SQL转Java代码小工具
工作中使用SQL的时候很多,当使用hibernate的时候,经常遇到多行的SQL,通常在PL/SQL或其他地方写好SQL,测试没问题后,需要将SQL写到程序代码中,多行SQL需要拼接字符串,手动一行行 ...
- java内存查看与分析
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
- redis-3.0.1 sentinel 主从高可用 详细配置
最近项目上线部署,要求redis作高可用,由于redis cluster还不是特别成熟,就选择了redis sentinel做高可用.redis本身有replication,实现主从备份.结合sent ...
- mysql 常用的语句
1.查出当前的字段,放到一个字段中:GROUP_CONCAT(distinct b.patent_ip) ,如 (select GROUP_CONCAT(distinct b.patent_ip) f ...
- 【原】简单shell练习(二)
1.查找awk # cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7 ...
- java自动机器人自动生成修姓名工具类
public class GenerateName { public static String getName() { Random random = new Random(); String[] ...
- No-6.If语句
判断(if)语句 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?…… 程序中的判断 if 今天发工资: 先还信用卡的钱 if 有剩余: 又可 ...
- MSYS2 使用
在Windows下编译mongo-c-driver 1.3.x 在Windows下编译mongo-c-driver 1.3.x 1.安装 MSYS2https://sourceforge.net/pr ...
- thinkphp5将一条数据以toArray()放入session
直接将找出的数据赋予变量,列:$admin: 存入session:Session::set('user_info',$admin->toArray()); 如果数据中有时间字段: 如若有时间字段 ...