机器语言、汇编语言(低级语言)、高级语言

机器语言、汇编语言(低级语言)、高级语言

【原文:https://zhuanlan.zhihu.com/p/37524989】

编程语言的机器级表示:机器语言、汇编语言、高级语言

​ 首先下面一张图是C语言、汇编语言以及翻译过的机器语言,大家可以先有个大概的眼熟。

img

1、机器语言

计算机是不能直接识别我们所编写的C程序或者Java程序的。它只能识别机器语言,而机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统令的集合。

早期计算机就是指可以执行机器指令,进行运算的机器。在我们常用的PC机中,有一个芯片,就是我们常说的CPU(Central Processing Unit,中央处理单元)可以完成前面所说的计算机的功能,但是每一种这样的微处理器(CPU)由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。

早期的程序设计均使用机器语言。程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。

用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍,而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。

那么该怎么办呢?这时候汇编语言便产生了。

需要注意的是现在除了计算机生产厂家的专业人员外,一般是不需要学习机器语言了。

2、汇编语言

是一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。 在不同的设备中,汇编语言对应着不同的机器语言指令集。 一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。汇编语言的主体是汇编指令,汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。

比如下面将寄存器 BX 的内容发送到 AX 上:

操作:寄存器BX的内容送到AX中
  
1000100111011000  机器指令
  
mov ax,bx                    汇编指令 

我们能很明显的从上面两条指令看出区别,汇编指令相对于机器指令是很容易记住的。

可能有人会问,我们用汇编语言编写程序,可是计算机只认识机器指令,那该怎么办?这时候就需要一个能将汇编语言转换成机器指令的工具,我们称其为汇编器(有别于编译器)。程序员用汇编语言写出源代码,再用汇编汇编器将其编译为机器码,最后由计算机执行。

img

汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。

汇编语言的另一个特点就是它所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说它是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其它语言快,但同时这也使编程更加复杂,因为既然数据是存放在寄存器或存储器中,那么必然就存在着寻址方式,也就是用什么方法找到所需要的数据。例如上面的例子,我们就不能像高级语言一样直接使用数据,而是先要从相应的寄存器AX、BX 中把数据取出。这也就增加了编程的复杂性,因为在高级语言中寻址这部分工作是由编译系统来完成的,而在汇编语言中是由程序员自己来完成的,这无异增加了编程的复杂程度和程序的可读性。

再者,汇编语言指令是机器指令的一种符号表示,而不同类型的CPU 有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。所以,除了同系列、不同型号CPU 之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU 之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低。

总结起来就是三个特点:机器相关性、高速度和高效率、编写和调试复杂(相对于高级语言)。

3、高级语言

前面的机器语言和汇编语言我们都有一定了解了,汇编语言也是和机器语言一样,都是直接对硬件进行操作,但是汇编语言指令采用了英文缩写的标识符,更容易识别和记忆。但是说起来更容易识别和记忆,也只是相对于机器语言而言的。在实际编程中,汇编语言源程序也是十分复杂和冗长的,这时候高级语言产生了。

高级语言并不是指一种语言,而是包括很多编程语言,比如Java、C、C++、C#、python等等,是高度封装的编程语言。高级语言与计算机的硬件结构和指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。

​ 汇编语言和高级语言最后都得转换成机器语言,但是高级语言由于高度封装,相同的实现下,高级语言转换成机器语言的执行步数通常都比汇编语言多,这也是为啥高级语言一般都比汇编语言性能差的原因。

从最开始我们给出的一张图也可以看出,C语言写出的短短几行代码,翻译成汇编语言会多很多,更不用说变成机器语言了。

  • 57
    点赞
  • 245
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - **面向特定体系结构**:汇编语言是为特定计算机体系结构(如x86、ARM、MIPS等)设计的,每种体系结构都有其专属的汇编语言。这意味着汇编程序通常不能直接在不同类型的处理器上运行,不具备源代码级别的可移植性。 2. **指令与操作码**: - **助记符表示**:汇编语言使用助记符(mnemonics)来代表特定的机器指令,这些助记符往往与指令的功能相关,如`MOV`(移动数据)、`ADD`(加法)、`JMP`(跳转)等。每个助记符对应一个特定的二进制操作码。 3. **低级操作**: - **直接硬件控制**:汇编语言允许程序员直接操控硬件资源,如寄存器、内存地址、I/O端口等,这使得它非常适合编写对时间和空间效率要求极高、需要精确控制硬件的程序,如设备驱动、实时系统内核、性能关键算法等。 4. **代码效率**: - **紧凑的代码**:汇编程序生成的目标代码通常比高级语言编译后的代码更为紧凑,占用内存较少。 - **快速执行**:由于直接对应于机器指令,汇编程序在执行时无需经过复杂的解释或编译过程,能够快速、高效地被执行。 5. **编写与调试难度**: - **复杂性高**:编写汇编程序需要深入了解计算机体系结构和指令集细节,即使是简单的任务也可能需要大量的指令。此外,程序逻辑的表述不如高级语言直观,容易出错且难以阅读和维护。 - **调试挑战**:由于代码高度依赖具体的硬件状态,调试汇编程序可能非常困难,尤其是在处理复杂的控制流、数据依赖性和异常处理时。 6. **工具支持**: - **汇编器**:汇编语言源代码通过汇编器(assembler)转换成机器语言(机器码或二进制码),汇编器负责将助记符和符号地址解析为具体的机器指令和物理地址。 - **链接器**:生成的机器码通常需要链接器(linker)进行链接,将多个目标文件合并为一个可执行文件,同时解决外部符号引用。 ### 应用场景与优势 汇编语言主要应用于以下几个方面: - **系统级编程**:操作系统内核、设备驱动、中断服务程序等底层软件开发,这些领域要求对硬件有精细控制,且性能要求高。 - **性能优化**:在高级语言编写的程序中,对性能敏感的部分可以用汇编重写以提升效率。 - **反病毒与安全研究**:理解和编写汇编代码有助于分析恶意软件行为、逆向工程及编写防病毒软件。 - **教学与理解计算机原理**:学习汇编语言有助于深入理解计算机体系结构、指令集、内存管理和硬件接口等基础概念。 ### 编程特点与挑战 - **手动管理内存**:程序员需要手动分配和释放内存,跟踪数据在内存中的位置,处理堆栈、堆和静态内存区域。 - **无高级抽象**:缺乏高级语言中的类、对象、函数库等高级抽象概念,所有编程结构如循环、条件分支等都需要手工实现。 - **依赖特定硬件**:汇编程序直接依赖于特定处理器的指令集、寄存器组织和寻址模式,更换硬件平台通常意味着重新编写代码。 尽管汇编语言具有上述挑战,但它在特定场景下提供了无可比拟的优势,如极高的执行效率、对硬件资源的精确控制以及在安全和反病毒领域的应用。随着编译器技术的进步,许多高级语言也能生成高效的目标代码,但在某些对性能和硬件控制有严格要求的情况下,汇编语言仍然是不可或缺的工具。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值