首先要明白所有的高级语言、汇编语言 最终都是要 编译 成机器能识别的 机器语言。
高级语言->汇编语言->机器语言。
机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。
机器码有时也被称为原生码(Native Code),这个名词比较强调某种编程语言或库,它与运行平台相关的部份。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。
C语言转化为相应对机器语言,以GCC编译器为例,可以分为四步。
第一步是预处理,包括语法检查等工作。
gcc -P abc.c
第二步由源程序生产汇编语言代码。
gcc -S abc.c
会生成abc.s文件,这个文件里就是汇编代码。
第三步编译器生成目标代码,一个源文件生成一个目标代码。
gcc -c abc.c
会生成abc.o
第四步连接器从目标代码生成可执行文件。
gcc abc.o
目标代码包括机器码和符号表(函数及变量名)。连接器的主要作用是通过符号表在库文件和其他模块中找到在目标代码中引入或未定义的符号(函数及变量名),将几个目标代码合成可执行文件。
机器语言的本质是二进制数据,最终都是以二进制的形式存储,二进制就是01011101101001010这种数字串,为什么二进制串就能控制硬件呢?
机器语言是非常简单的,因为机器的每个部件的功能都是固定的,所以要完成一个复杂的动作,需要把相关的部件按一定的规律有序完成才行,这其中有多复杂想想也应该知道。机器能接受的指令就只有有2个,固定一个动作,做或不做,在计算机中是以2进制标记的,也就是1和0,指令为1,就做该动作一次,指令为0,就不做该动作。大量固定的动作根据一定的规律有序的成功做完,就组成软件中所需要完成的一个功能。这就和弹钢琴是一样的,每一个音符需要你按一个键,每按一次就是一次动作,大量有序的按键就展示出了一首曲子,计算机的动作和钢琴的琴键是一样的道理。
最早的时候,软件编程就是大量的机器指令堆砌,工作量非常庞大,且内容复杂无比,维护起来非常麻烦,所以才有机器语言的诞生,就是计算机出厂前计术人员已经把固定的指令操作打包了组成了一个又一个的相对复杂功能,只要计算机软件调用触发这些功能就可以展示相应的功能了,这一层的语言就是计算机语言了,汇编语言就是这一层面的,汇编编程是非常麻烦的,代码量大,工作量也吓人,但是,功能和运行速度也强悍的吓人,任何高级语言都无法比拟,算是软件开发真正的核心技术所在。
我们现在所说的软件编程,用的就是比计算机语言高一层的语言,也就是高级语言,像如今流行的语言C/C++、Java、PHP、js等都是高级语言。用这些高级语言几行代码展示的功能,在计算机执行的时候仍然是非常复杂的行为,所以不要认为会编程就认识了计算机,真正深究,核心技术的复杂程度绝对超乎你的想象。
看到这里,心理是不是已经有了答案,硬件是不可能完成你所有想要的功能的,软件可以展示的功能都是计算机固有的功能,功能有多强大主要取决于计算机的硬件。简单来说,软件就像是人的思想,硬件就是人的身体,身体的所有动作都是思想赋予的。但不合实际的想法身体是不可能完成的。