计算机能理解的是二进制, 计算机本质上只认识0和1。
进化史
机器语言、汇编语言和高级语言。
机器语言
由于计算机内部职能接受二进制代码,因此,用二进制代码0和1描述的指令为机器指令,全部机器指令的集合构成计算机的机器语言。
机器指令示例:0000代表 加载(LOAD),0001代表 存储(STORE)
暂存器示例:0000代表暂存器A,0001代表暂存器B
机器语言属于低级语言
编出的程序全是0和1的指令代码,直观性差,易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。
机器语言是微处理器理解和使用的,尽管机器语言好像是很复杂的,然而它是有规律的。
存在着多至100000机器语言的指令。这意味着不能这些种类全部列出来。
汇编语言
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。
示例:(打印“hello,world”)
; hello.asm
section .data ; 数据段声明
msg db "Hello, world!", 0xA ; 要输出的字符串
len equ $ - msg ; 字串长度
section .text ; 代码段声明
global _start ; 指定入口函数
_start: ; 在屏幕上显示一个字符串
mov edx, len ; 参数三:字符串长度
mov ecx, msg ; 参数二:要显示的字符串
mov ebx, 1 ; 参数一:文件描述符(stdout)
mov eax, 4 ; 系统调用号(sys_write)
int 0x80 ; 调用内核功能
; 退出程序
mov ebx, 0 ; 参数一:退出代码
mov eax, 1 ; 系统调用号(sys_exit)
int 0x80 ; 调用内核功能
它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。例如移动、自增。因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识。
但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能够实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
高级语言:
高级语言是大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如CC++,JAVA,PHP,Python,GO,C#等,像最简单的编程语言PASCAL语言也属于高级语言。
相比机器和汇编语言,高级语言对开发人员更友好,在开发效率上大大提高!
示例:
print('Hello World!')
name = 'Tom'
print('Hello,my name is',name)
高级语言分类
高级语言所编制的程序并不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:
编译类(整个翻译)
编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行(编译后生成的可执行文件,是cpu可以理解的2进制的机器码组成的),使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .obj,也就是OBJ文件)才能执行,只有目标文件而没有源代码,修改很不方便。(程序写完后,先翻译成二进制的代码(也是一个文件)。运行的时候是运行翻译成二进制的文件)
编译后程序运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。(依赖编译器,跨平台性差 源代码翻译成二进制后交给操作系统)
解释类(逐句翻译)
执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此运行效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器独立进行(想运行,必须先装上解释器,就像跟老外说话,必须有翻译在场),但这种方式比较灵活,可以动态地调整、修改应用程序。如Python、Java、PHP、Ruby等语言。(好处就是可以跨平台,开发效率高;坏处运行效率低,但是现在机器运行快了)
高级语言优缺点
编译型:
1、把源代码编译成机器语言的可执行程序
2、执行 可执行程序文件
优点:
1、程序执行时,不再需要源代码,不依赖语言环境,因为执行的是机器码文件。
2、执行速度快,因为你的程序代码已经翻译成了是计算机可以直接理解的机器语言。
缺点:
1、每次修改了源代码,需要重新编译,生成机器码文件(依赖编译器)
2、跨平台性不好,不同操作系统,调用底层的机器指令不同,需为不同平台生成不同的机器码文件
解释型:
1、用户调用解释器,执行源代码文件
2、解释器把源代码文件边解释成机器指令,边交给cpu执行
优点:
1、天生跨平台,因为解释器已经做好了对不同平台的交互处理,用户写的源代码不需再考虑平台差异性,可谓,一份源代码,所有平台都可以直接执行
2、随时修改,立刻见效,改完源代码后,直接运行看效果
缺点:
1、运行效率低,所有的代码均需经过解释器 边解释边执行 ,速度比编译型慢很多
2、代码是明文。
小节
机器语言
优点是最底层,速度最快,缺点是最复杂,开发效率最低
汇编语言
优点是比较底层,速度最快,缺点是复杂,开发效率最低
高级语言
编译型语言执行速度快,不依赖语言环境运行,跨平台差
解释型跨平台好,一份代码,到处使用,开发效率高,缺点是执行速度慢,依赖解释器运行