#处理器只能识别二进制码,那怎么能识别高级语言呢?#

高级语言,低级语言与硬件
机器语言
- 计算机唯一理解的语言是二进制,也称为机器代码, 这是因为计算机是只能区分电路的开和关状态的电子设备。
- 人们用 1 和 0 来表示这些开/关状态,像这样:01010010010001010101011001001001010100110100010100100001
- 计算机遵循的指令必须用机器代码编写
- 这是由早期计算机程序员完成的
- 每种计算机都是不同的,因此它们都需要不同的二进制指令来执行相同的任务 - 不同的设备有不同的机器代码,比如执行加法ADD操作时,手机设备与台式电脑的机器代码很有可能不同
- 苏联有三进制计算机Сетунь不在本次讨论范围

Снимок Сетунь
高级语言
高级语言是指方便人阅读的代码规范,例如c,c++,python,java,golang等等,多数以英文单词为关键字,样例: 打印:print,循环:while、for,条件判断:if 。
高级语言:c语言样例
#include <-stdio.h->
Int main(void)
{
printf("I'm youzhiduanzishou!");
return 0;
}
- 高级编程语言更易于人类编写、阅读和维护
- 它们支持多种数据类型
- 它们让程序员思考如何解决问题,而不是如何与计算机通信。这就是所谓的 抽象

低级语言
相对应的比较接近cpu的低级代码例如“汇编”语言,可以直接执行cpu支持的命令,本文说的“低级”是指比较靠近计算机底层,而非代码质量。汇编程序将汇编语言翻译为机器代码/二进制/目标代码。
汇编指令样例:
MOV——将数据从一个位置移动到另一个位置
ADD - 添加两个值
SUB - 从另一个值中减去一个值
PUSH - 将数据压入堆栈
POP——从堆栈中弹出数据
JMP——跳转到另一个位置
INT——中断进程
低级语言:汇编语言样例
.LC0:
.string "I'm youzhiduanzishou!"
main:
push rbp
mov rbp, rsp
mov edi, OFFSET FLAT:.LC0
call puts
mov eax, 0
pop rbp
ret
每种高级语言都会经过特定的编译器、翻译器转换成可以与cpu交互的低级语言。
低级语言针对每种设备有自己的二进制指令集,根据cpu类型不同,他们所支持的指令集也不同,主要有4大阵营:例如x86(多见于pc设备),ARM(多见于手机设备),RISC-V,MIPS。
- 低级语言与机器代码比,它与人类所说的语言更相似,mov、add等
- 它们不是很发达,只是提供了更快的编写二进制的方法,而非0010 1000 0011这样操作设备
- 这意味着它们使程序员能够密切控制计算机,因为它们的指令非常具体
- 不幸的是它们很难学,需要了解硬件结构,cpu类型,内存管理,磁盘管理,设备驱动等等
- 由于每台计算机的机器代码都不同,因此在一台计算机上翻译为机器代码的程序将无法在另一台计算机上运行:低级语言不容易在不同类型的设备间移植
翻译器:
高级语言代码需要经过翻译器转换为低级代码才能被设备执行,目前有两种方案:编译器、解释器。编译器将源代码 一次性 转换(或“编译”)为机器代码,而解释器在代码 运行时 对其进行转换。
注:高级语言和低级语言的区别
计算机不理解高级语言,因为它们只理解二进制(“机器代码”)。
当程序仅以二进制形式存在时,人类很难准确理解它的作用。
高级语言对于程序员来说更容易使用。
高级语言可以在不同类型的计算机上运行。
低级语言编程允许直接控制硬件。
低级语言编程仅适用于其设计的处理器(取决于设备)。