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

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.mzph.cn/news/178954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 判断变量的类型 typeof Object.prototype.toString.call(a) instanceof

方法1 语法:typeof 变量xxx,返回值是,变量xxx的数据类型的字符串表达 typeof undefined 返回 "undefined"typeof 5 返回 "number"typeof hello 返回 "string"typeof true …

Linux操作系统上安装MYSQL 5.7 记录

本文描述了mysql server的下载安装初始化工作。 下载 https://dev.mysql.com/downloads/mysql/ 安装: 环境: CentOS 7.6 ,版本:MYSQL 5.7 tar -xvf mysql-5.7.41-1.el7.x86_64.rpm-bundle.tar yum -y install mysql-community-*.rpm启动 systemc…

品优购:nav导航、footer部分

目录 nav导航栏 footer部分 mod-copyright nav导航栏 nav盒子通栏有高度,有下边框 1号盒子左浮动,dropdown 2号盒子左侧浮动,navitems导航栏组 先看dropdown里,先表头,这里意思是description term, 然后是一系列表…

python基础练习题库实验5

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6058fb4b66994aed838f920f7fe75706.png)题目4代码实验结果题目总结题目1 编写一个程序,使用while循环语句和字符串格式显示以下精确输出。 例如: …

Linux命令进阶——grep管道命令在查看日志的场景中的使用 具体案例

前言 本篇博客介绍在查看日志的场景中,grep管道命令的使用,并给出了具体的案例。 以下为Linux相关的博客文章列表: Linux——认识Linux的目录结构 & 常用命令 & vim命令 & 权限及其控制 & 防火墙命令 & 自定义命令 &a…

2023年【广东省安全员B证第四批(项目负责人)】证考试及广东省安全员B证第四批(项目负责人)复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年广东省安全员B证第四批(项目负责人)证考试为正在备考广东省安全员B证第四批(项目负责人)操作证的学员准备的理论考试专题,每个月更新的广东省安全员B证…

SpringBoot——模板引擎及原理

优质博文:IT-BLOG-CN 一、模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的HTML代码。 二、SpringBoot模板引擎 SpringBoot推荐的模板引擎是Thymeleaf语法简单&#xff0…

如何进行无代码开发?有哪些无代码开发工具和无代码软件开发平台?

无代码开发是指不写代码,通过可视化工具进行应用程序开发。无代码开发让非技术用户通过拖拽和选择等简单操作,就能快速创建应用程序。 如何学习无代码开发 随着科技的不断发展,新的技术和工具不断涌现,无代码开发就是其中一种。掌…

YOLOv5算法进阶改进(5)— 主干网络中引入SCConv | 即插即用的空间和通道维度重构卷积

前言:Hello大家好,我是小哥谈。SCConv是一种用于减少特征冗余的卷积神经网络模块。相对于其他流行的SOTA方法,SCConv可以以更低的计算成本获得更高的准确率。它通过在空间和通道维度上进行重构,从而减少了特征图中的冗余信息。这种模块的设计可以提高卷积神经网络的性能。�…

代码随想录二刷 | 哈希表 | 总结篇

代码随想录二刷 | 哈希表 | 总结篇 理论基础哈希表经典题目数组作为哈希表set作为哈希表map作为哈希表 理论基础 一般来说哈希表都是用来快速判断一个元素是否出现集合里。 对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。 哈希函…

Redis常用操作及应用(二)

一、Hash结构 1、常用操作 HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对 HGET key fie…

Java代码的编译与执行过程

一、编译过程 1、javac 编译 Java源代码通过编译器(javac)编译为字节码文件(.class)。 idea中的 build 和 maven package等指令都可以编译为 .class 2、类加载器(Class Loader) 类加载器负责将类的字节码文件加载到内存中,以便在运行时创…

数据在内存中的存储练习题

数据在内存中的存储练习题 文章目录 数据在内存中的存储练习题1. 练习一2.练习二3. 练习三4. 练习四5. 练习五6. 练习六7. 总结 1. 练习一 #include <stdio.h>int main() {char a -1;signed b -1;unsigned char c -1;printf("a %d b %d c %d", a, b, c)…

Java的特性

Java是一种广泛使用的编程语言&#xff0c;它具有许多独特的特性&#xff0c;包括简单易学、面向对象、可移植性、安全性、多线程等。下面我将对这些特性进行详细的介绍&#xff0c;并阐述它们的重要性。 一、简单易学 Java是一种相对容易学习的编程语言。它的语法简单明了&…

人工智能|机器学习——机器学习如何判断模型训练是否充分

一、查看训练日志 训练日志是机器学习中广泛使用的训练诊断工具&#xff0c;每个 epoch 或 iterator 结束后&#xff0c;在训练集和验证集上评估模型&#xff0c;并以折线图的形式显示模型性能和收敛状况。训练期间查看模型的训练日志可用于判断模型训练时的问题&#xff0c;例…

C++ 泛型编程,函数模版和类模版

1.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础 就比如说活字印刷术&#xff0c;就是提供一个模具&#xff0c;然后根据模具来印刷出不同的字。 泛型编程跟着类似&#xff0c;提供一个模版&#xff0c;根据这…

微服务--05--配置管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 配置管理这些问题都可以通过统一的配置管理器服务解决。而Nacos不仅仅具备注册中心功能&#xff0c;也具备配置管理的功能&#xff1a; 1.配置共享1.1.添加共享配置…

【Spark基础】-- RDD 转 Dataframe 的三种方式

一、环境说明 Oracle JDK 11Scala 2.12.17Apache Spark 3.1.1Apache Hadoop 3.1.0 二、RDD 转 Dataframe 的方法 1、通过 StructType 创建 Dataframe(强烈推荐使用这种方法) /*** 方法一:通过 StructType 创建 Dataframe* @param spark SparkSession* @param rdd 输入* @…

【封装UI组件库系列】封装Button图标组件

封装UI组件库系列第四篇封装Button按钮组件 &#x1f31f;前言 &#x1f31f;封装Button组件 1.分析封装组件所需支持的属性与事件 支持的属性&#xff1a; 支持的事件&#xff1a; 2.创建Button组件 &#x1f31f;封装功能属性 type主题颜色 plain是否朴素 loading等…

方舟笔记:方舟开发框架概述

方舟笔记 方舟开发框架概述 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134677116 今年&#xff08;…