高级语言(C语言)、汇编语言、机器语言区别?编译器如何将高级语言编译成机器语言?

article/2025/10/13 5:13:41

⾼级语⾔:

是相对于汇编语⾔⽽⾔的,是⾼度封装了的编程语⾔,与低级语⾔相对。它是以⼈类的⽇常语⾔为基础的⼀种编程语⾔,使⽤⼀般⼈易于接受的⽂字来表⽰(例如汉字、不规则英⽂或其他外语),从⽽使程序编写员编写更容易,亦有较⾼的可读性,以⽅便对电脑认知较浅的⼈亦可以⼤概明⽩其内容。
⾼级语⾔基本脱离了机器的硬件系统,⽤⼈们更易理解的⽅式编写程序。编写的程序称之为源程序。主要有C,C++,Python,perl 等等。
⾼级语⾔主要分为2类:
解释型:原代码由解释器⼀边解释为可执⾏的机器语⾔,⼀边执⾏,效率⽐较低,⽽且不能⽣成可独⽴执⾏的可执⾏⽂件,应⽤程序不能脱离其解释器,但这种⽅式⽐较灵活,可以动态地调整、修改应⽤程序。如python。
**编译类:**编译是指在应⽤源程序执⾏之前,就将程序源代码“翻译”成⽬标代码(机器语⾔),因此其⽬标程序可以脱离其语⾔环境独⽴执⾏,使⽤⽐较⽅便、效率较⾼。但应⽤程序⼀旦需要修改,必须先修改源代码,再重新编译⽣成新的⽬标⽂件(* .OBJ)才能执⾏,只有⽬标⽂件⽽没有源代码,修改很不⽅便。现在⼤多数的编程语⾔都是编译型的,例如C/C++。

汇编语⾔(assembly language)

是⼀种⽤于电⼦计算机、微处理器、微控制器或其他可编程器件的低级语⾔,亦称为符号语⾔。在汇编语⾔中,⽤助记符(Mnemonics)代替机器指令的操作码,⽤地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语⾔对应着不同的机器语⾔指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语⾔和特定的机器语⾔指令集是⼀⼀对应的,不同平台之间不可直接移植。
简单来说,汇编语⾔是机器语⾔(⼆进制指令)的⽂本形式,与指令是⼀⼀对应的关系。汇编语⾔由汇编编译器汇编为机器语⾔(⼆进制指令)交CPU执⾏。

机器语言

机器语言机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码(操作码和地址解释)。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言

  • 机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,像0101010这种。

汇编语⾔和机器语⾔

汇编语言就是对机器语言的一种转义和描述,具备初步的可读性,但是编写也十分困难和效率低下。汇编语言用符号代替机器语言的二进制码(比如用助记符代替操作码),就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。
汇编语⾔(符号语⾔)是⾯向CPU的,因此CPU不同,汇编语⾔就不⼀样,有什么CPU架构就有什么汇编语⾔,⽐如x86架构的就是x86汇
编,ARM架构的CPU对应于ARM汇编,MIPS架构的CPU对应于MIPS汇编。
CPU根据总线宽度可以分8位,16位,32位,64位等,所以相应的就有8位汇编,16位汇编,32位汇编等。
汇编语⾔优点
1、因为⽤汇编语⾔设计的程序最终被转换成机器指令,故能够保持机器语⾔的⼀致性,直接、简捷,并能像机器指令⼀样访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端⼝等。使⽤汇编语⾔,可以访问所有能够被访问的软、硬件资源。
2、⽬标代码简短,占⽤内存少,执⾏速度快,是⾼效的程序设计语⾔,经常与⾼级语⾔配合使⽤,以改善程序的执⾏速度和效率,弥补⾼级语⾔在硬件控制⽅⾯的不⾜,应⽤⼗分⼴泛。
缺点
1、汇编语⾔是⾯向机器的,处于整个计算机语⾔层次结构的底层,故被视为⼀种低级语⾔,通常是为特定的计算机或系列计算机专门设计的。不同的处理器有不同的汇编语⾔语法和编译器,编译的程序⽆法在不同的处理器上执⾏,缺乏可移植性;
2、难于从汇编语⾔代码上理解程序设计意图,可维护性差,即使是完成简单的⼯作也需要⼤量的汇编语⾔代码,很容易产⽣bug,难于调试;
3、使⽤汇编语⾔必须对某种处理器⾮常了解,⽽且只能针对特定的体系结构和处理器进⾏优化,开发效率很低,周期长且单调。

汇编语⾔与⾼级语⾔

1.汇编语⾔依赖于硬件体系(CPU),且助记符量⼤难记,于是⼈们⼜发明了更加易⽤的所谓⾼级语⾔。在这种语⾔下,其语法和结构更类似普通英⽂,且由于远离对硬件的直接操作,使得⼀般⼈经过学习之后都可以编程。⾼级语⾔通常按其基本类型、代系、实现⽅式、应⽤范围等分类。
2.汇编语⾔与cpu有关,⾼级语⾔与cpu⽆关。
⾼级语⾔有选择,循环,汇编语⾔没有。
⾼级语⾔有符号整数型,⽆符号整数型,浮点型,汇编语⾔不区分,只有16位的字,32位的双字
⾼级语⾔运算时像数学⼀样±*/, 汇编语⾔⽤的是指令,add, sub, multi
汇编语⾔可直接使⽤寄存器,⾼级语⾔不可以
3.编译器的设计,有的编译器直接将⾼级语⾔编译成机器语⾔,有的编译器直接将⾼级语⾔编译成汇编语⾔。
4.高级语言就是经过抽象的编程语言,具备良好的可读性,编写完成后通过编译程序变成成机器语言来执行,或者由解释器来负责解释执行。

同一个语句,三种语言表达形式

对于同一个语句,有以下三种:高级语言、低级语言、机器语言的表示编程

C语言:windows

a=b+1;网络

汇编语言:数据结构

mov -0xc(%ebp),%eax编辑器add $0x1,%eax学习mov %eax,-0x8(%ebp)spa

机器语言:操作系统

8b 45 f4翻译83 c0 0189 45 f8

编译器

简单讲,编译器就是将“⼀种语⾔(通常为⾼级语⾔)”翻译为“另⼀种语⾔(通常为低级语⾔)”的程序。⼀个现代编译器的主要⼯作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → ⽬标代码 (object code) → 链接器 (Linker) → 可执⾏程序(executables)⾼级计算机语⾔便于⼈编写,阅读交流,维护。
机器语⾔是计算机能直接解读、运⾏的。编译器将汇编或⾼级计算机语⾔源程序(Source program)作为输⼊,翻译成⽬标语⾔(Target language)机器代码的等价程序。源代码⼀般为⾼级语⾔ (High-level language),如Pascal、C、C++、Java、汉语编程等或汇编语⾔,⽽⽬标则是机器语⾔的⽬标代码(Object code),有时也称作**机器代码(**Machine code)。

对于C#、VB等⾼级语⾔⽽⾔,此时编译器完成的功能是把源码(SourceCode)编译成通⽤中间语⾔(MSIL/CIL)的字节码(ByteCode)。最后运⾏的时候通过通⽤语⾔运⾏库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。

咱们都知道,机器是只能作数字计算的,可以让机器去运算的、数字的语言就是机器语言,除此以外的全部计算机语言都是非机器语言。

这样的相对于机器语言的高级语言都须要一个转换,从高级、机器不可理解,转换为机器可理解的机器语言。

这样的一个转换过程就叫作编译(Compile),由编译器(Compiler)来完成。

由C转换为汇编语言这一过程是由汇编器(Assembler)来执行的。

C和汇编语言转换为机器语言都是由编译器来完成的。

编译过程

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/1y38dUoN.shtml

相关文章

汇编语言使用的工具

现在我们的电脑大多数是win10系统的,64位操作系统。这个可以右键点击我的电脑,查看属性。 学习汇编语言,我们就要安装64位的汇编开发环境,这里是win764位汇编开发环境的安装。 1.把你的文件复制到电脑盘符。我的在电脑D盘 2.点击…

浅谈汇编器、编译器和解释器

作者: 硬核老王 简单介绍一下编程方式的历史演变。 -- Erik Oshaughnessy(作者) 在计算机诞生不久的早期年代,硬件非常昂贵,而程序员比较廉价。这些廉价程序员甚至都没有“程序员”这个头衔,并且常常是由数学家或者电…

编译器如何将高级语言转化成汇编语言的?

对于每天奋斗在一线,用Java,C,C#,Python等高级编程语言写程序的程序员们来说,理解编译器是如何将高级语言编译成汇编语言,有助于我们更好的理解计算机编程。 编译器将高级语言转化成汇编语言主要经过三个步…

编译器是什么

什么是编译器,查阅百度:编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。那高级语言自然是指C#,C等一些高度抽象化的语言。而机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组…

汇编语言是什么?

文章目录 基础定义汇编语言的语法 常用指令函数的调用机制函数的内部处理机制从汇编语言角度看多线程的安全问题 基础定义 助记符: 例如在加法运算的本地代码中加上 add(addition的缩写)、在比较运算的本地代码中加上 cmp(compar…

汇编语言和本地代码及通过编译器输出汇编语言的源代码

CSDN话题挑战赛第2期 参赛话题:学习笔记 目录 一、汇编语言和本地代码 二、通过编译器输出汇编语言的源代码 一、汇编语言和本地代码 计算机CPU只能运行本地代码(机器语言)程序,用C语言等高级语言编写的代码,需要经…

c-nasm简易的汇编语言编译器(nasm、nask语法)

c-nasm汇编器: GitHub - Changele08/c-nasm: 简易的汇编语言编译器 【基本信息】 简单的汇编语言编译器,源程序包含一个源文件,总共约为10000行(大部分为汇编指令->机器指令对照表) 使用devc5.11无错误无警告编…

记录:汇编语言编译器选择(vscode,永远的神)

我下了两个,一个是一个入门级的,要49块成为注册用户才能解锁全部功能,好像还容易崩。另一个是dosbox,太老了,界面交互性差,我因为安装过两次,出现了一些文件位置问题,运行总出bug&am…

03.汇编语言和编译器

机器指令 早期的程序设计均使用机器语言。程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。这样的机器语言由纯粹的0和1构成,十分复杂&#xff0…

软件测试报告

近期,老师给我们布置了一个任务,那就是软件的测试报告,刚刚接触测试报告的我,并不是很了解测试报告怎么写,我们又是如何进行测试的,这里,我将自己对测试的想法写在这里。 一、概述 本软件是根据…

【详解】服务可用性详细说明及其解决方案

该文章转自: 搜狐文章 链接 谈到高并发和高可用往往引起很多人的兴趣,有时候成为框架选择的噱头。实际上,它们往往和框架关系不大,而是跟架构息息相关。在很多时候,老码农会直面一个问题: “系统的服务可…

可用性并非阳春白雪

写代码?这个环节的工作其实不难。开发出人们真正想用的应用程序,然后把它们发布到用户手上,这才是难事! 长久以来,我一直着迷于Steve Krug的那本《Dont Make Me Think》。不仅因为那本书短小精悍,读来朗朗…

软件工程-需求分析

软件需求任务 功能需求 接口需求 性能需求 约束 可靠性和可用性需求 逆向需求 出错处理需求 将来可能提出的要求 功能需求(一定要有) 这方面的需求指定系统必须提供的服务。通过需求分析应该划分出系统必须完成的所有功能 性能需求(最好有) 性能需求指定系统必须满足的定时约束…

服务可用性的一知半解

谈到高并发和高可用往往引起很多人的兴趣,有时候成为框架选择的噱头。实际上,它们往往和框架关系不大,而是跟架构息息相关。在很多时候,老码农会直面一个问题: “系统的服务可用性是多少?是怎么得来&#x…

高可用性架构

1. 高可用性架构 高可用性是指一个系统经过专门的设计后具备的减少停工时间并能持续保持提供服务的高可用性质。该特性是衡量系统提供服务能力的一个特征,也是对系统进行设计时需要考虑在内的一个重要因素。   对于数据库系统而言,高可用、高可靠和高性…

系统可用性

一个网站、系统的战术包括可用性战术、可修改性战术、性能战术、安全性战术、可测试性战术、易用性战术。可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。它是衡量设备在投入使用后实际使用的效能,是设备或系统的可靠性、可维护性和…

系统可用性量表评估问卷

1,中文:可用性问卷 2,英文原版: sus Measuring Usability With The System Usability Scale (SUS) The System Usability Scale (SUS) was originally created as a “quick and dirty” scale for administering after usabili…

软件可靠性

知识点 主要难点和考点可靠性计算 串联系统 串联系统可靠性计算 并联系统 并联系统可靠性计算 并联系统有一个系统是可靠系统,整个并联系统就是可靠系统 1-R 表示系统的失效率 N模混合系统 可靠性计算 计算软件可靠性指标公式 可靠性:MTTF/(1MT…

软件测试中的可用性、可维护性、可靠性有什么区别?

我们生活在一个用户依赖于对服务的一致访问的可靠性时代。在相互竞争的服务之间进行选择时,对用户来说,没有比可靠性更重要的特性了。但是可靠性是什么意思呢? 为了回答这个问题,我们将根据可靠性工程中的其他度量来分解可靠性:可用性和可维护性。区分这些术语并不是语义…

可靠/可用性介绍

可靠/可用性主要目的是保护业务零中断和高用户体验。 可靠可用性基本概念 广义的可靠性(Reliability)由三个部分组成:可靠性(Reliability)、可维修性(Maintainability)和可用性(Avaliability)。其中狭义的可靠性是指产品在规定的条件和时间内完成规定功能的能力&a…