什么是高级语言、机器语言、汇编语言?什么是编译和解释?

2023-11-29 01:01

本文主要是介绍什么是高级语言、机器语言、汇编语言?什么是编译和解释?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、高级语言

计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C++、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接理解的二进制数字。

 C/C++ 中的指令:a = 97;

高级语言中理想的属性

首先,高级语言更容易阅读和编写,因为命令更接近我们每天使用的自然语言。其次,高级语言需要更少的指令来执行与低级语言相同的任务,使程序更简洁、更容易理解。a = b * 2 + 5;在 C++ 中,您可以在一行中执行类似操作。在汇编语言中,这需要 5 或 6 条不同的指令。程序可以针对许多不同的系统进行编译(或解释),并且您不必更改程序以在不同的 CPU 上运行(您只需为该 CPU 重新编译)。

2、机器语言

计算机的 CPU 无法使用 C/C++。CPU 可以直接理解的有限指令集称为机器代码(或机器语言指令集)。

这是机器语言指令示例,是与上面C/C++ 中相同的指令:10110000 01100001

这些指令指令都由 1 和 0 的序列组成。每个单独的 0 或 1 称为一个二进制数字,简称。组成单个命令的位数各不相同。例如,某些 CPU 处理的指令始终是 32 位长,而其他一些 CPU(例如您可能正在使用的 x86/x64 系列)的指令可以是一个可变长度。

小知识(char *占几个字节)

char * 是一个指针类型,它表示一个指向字符的地址。指针的大小取决于系统的地址空间也就是系统可以访问的内存的范围。

8位系统的地址空间是 2^8 = 256 个字节,所以指针的大小是 1 个字节。

32位系统的地址空间是 2^32 = 4 GB,所以指针的大小是 4 个字节。

64位系统的地址空间是 2^64 = 16 EB,所以指针的大小是 8 个字节。

不同操作系统的库无法通用的原因(32/64)

每组二进制数字都被 CPU 解释为执行非常具体的工作的命令,例如比较这两个数字,或者将此数字放入该内存位置。但是,由于不同的 CPU 具有不同的指令集,因此为一种 CPU 类型编写的指令无法在不共享相同指令集的 CPU 上使用。这意味着程序通常无法移植(无需重大返工即可使用)到不同类型的系统,并且必须重新编写。

3、汇编语言

由于机器语言对于人类来说很难阅读和理解,因此发明了汇编语言。在汇编语言中,每条指令都由一个简短的缩写(而不是一组位)来标识,并且可以使用名称和其他数字。

这是与上面相同的汇编语言指令:mov al, 061h

这使得汇编比机器语言更容易阅读和编写。然而,CPU不能直接理解汇编语言。相反,汇编程序必须先翻译成机器语言,然后才能由计算机执行。这是通过使用称为汇编程序的程序来完成的。用汇编语言编写的程序往往速度非常快,并且在速度至关重要的今天仍然使用汇编语言。

然而,组装仍然有一些缺点。首先,汇编语言仍然需要大量指令来完成甚至简单的任务。虽然各个指令本身在某种程度上是人类可读的,但理解整个程序正在做什么可能具有挑战性(这有点像试图通过单独查看每个字母来理解句子)。其次,汇编语言的可移植性仍然不是很好——为一个 CPU 用汇编语言编写的程序可能无法在使用不同指令集的硬件上运行,并且必须重写或进行大量修改。

4、编译和解释

计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种,例如 C、C++、Java、Python 等。这些语言被称为高级语言,因为它们更接近人类的自然语言,而不是计算机能够直接理解的二进制数字。

计算机的核心部件是 CPU(中央处理器),它负责执行程序中的指令。CPU 只能理解一种称为机器语言的低级语言,它是由 0 和 1 组成的位序列。每种 CPU 类型都有自己的机器语言,也称为指令集。这意味着用一种机器语言编写的程序不能在另一种机器语言的 CPU 上运行。

为了让 CPU 能够执行高级语言编写的程序,需要将高级语言转换为机器语言。这可以通过两种主要方式实现:编译和解释。

编译

编译是一种将高级语言的源代码(程序员编写的代码)转换为可执行文件(机器语言的代码)的过程。这是通过使用一种称为编译器的程序来完成的。编译器可以根据不同的 CPU 类型生成不同的可执行文件。一旦生成了可执行文件,就不需要源代码或编译器来运行程序。

这是编译过程的简化表示:

由于 C++ 程序通常是编译的,因此我们很快就会更详细地探讨编译器。

解释

解释是一种在运行时将高级语言的源代码逐行转换为机器语言的过程。这是通过使用一种称为解释器的程序来完成的。解释器可以在不同的 CPU 类型上运行相同的源代码。每次运行程序时都需要源代码和解释器。解释器往往比编译器更灵活,但运行程序时效率较低,因为每次运行程序时都需要完成解释过程。这也意味着每次运行程序时都需要解释器。

这是解释过程的简化表示:

编译和解释优缺点

  1. 编译的优点是生成的可执行文件通常运行得更快,而且不需要分发源代码。
  2. 编译的缺点是需要为每种 CPU 类型生成不同的可执行文件,而且编译过程可能比较耗时。
  3. 解释的优点是源代码可以在不同的 CPU 类型上运行,而且不需要编译过程。
  4. 解释的缺点是运行程序时需要解释器,而且运行速度通常比编译的慢。

这篇关于什么是高级语言、机器语言、汇编语言?什么是编译和解释?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430873

相关文章

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超