通常说的学习编程其实就是学习高级语言编程,比如C语言、C++语言、Python语言、JAVA语言等等,即那些为人类设计的计算机语言。
但是,我们的计算机它并不理解什么是高级语言,计算机只是一个机器,它只有电气的特性,比如正负电荷、高低电平等,所以必须通过编译器将高级语言转换成二进制编码,这样才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。更多关于计算机的知识,可以阅读下计算机组成原理方面的书籍。
计算机真正能够理解的编程语言是低级语言,它是被专门用来控制硬件的。我们的汇编语言就是一种低级语言,通过一些标识符直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言,因为汇编语言是最接近机器语言的,这里说的机器语言又是什么呢,简单可以把它看成是由0与1构成的一组组指令,这些0和1组成的指令存储在可编程的存储单元中,它最终会被计算机取出来转化成一个个对应的电气特性的信号,这样就华丽地实现了从软件到硬件的转变。
汇编语言是低级语言,所以不易阅读,也不易理解,因此它是一种不易学习的编程语言,但实际工作中所有的高级语言,最终编译执行,都少不了汇编作为中间桥梁,所以对它有一点了解,对于我们理解奇妙的计算机世界还是有帮助的。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。
一、汇编语言是什么?
我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。
这些指令都是由0和1组成的,它们是二进制的数据,称为操作码(opcode),我们日常用得比较多的进制是10进制数,即由0~9这10个数组成的数,但在计算机世界中,不仅有10进制,还有8进制、16进制、以及这里说的2进制,顾名思义,2进制数只有0和1这两个基本元素组成,比如加法指令就是00000011 。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。
对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011,把它写成汇编语言就是 ADD。ADD只是一个符号而已,具体到计算机它是00000011这样的指令码,所以只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
二、汇率语言的来历
在计算机发展的早期,人们编写程序就是手写二进制指令,然后通过各种开关输入进计算机执行,比如要做加法运算,就按一下加法开关。随着时间的推移,科学家们发明了纸带打孔机,通过在纸带上打孔,将二进制指令自动输入计算机,这无形中提供了“生产率“。看到早期的计算机,回头再看看现在的计算机、手机等各种电子产品,是不是感到技术的伟大,发展的速度如此之快!
那时为了解决二进制指令的可读性问题,工程师将那些指令写成了八进制。二进制转八进制是轻而易举的,但是八进制的可读性也不行。很自然地,最后还是用