汇编语言翻译(如何编写一个将汇编代码翻译成机器码的程序)

汇编语言翻译(如何编写一个将汇编代码翻译成机器码的程序)

汇编程序( as )将xxx.s翻译成机器语言指令,将这些指令打包为可重定位的目标程序格式,并将结果保存到目标文件xxx.o中。 xxx.o文件是二进制文件,其字节码是机器语言。

如何编写一个将汇编代码翻译成机器码的程序?

在linu台上通过gcc编译器就可以了

命令:gcc -c xxx.s -o xxx.o

汇编程序( as )将xxx.s翻译成机器语言指令,将这些指令打包为可重定位的目标程序格式,并将结果保存到目标文件xxx.o中。 xxx.o文件是二进制文件,其字节码是机器语言。

xxx.o文件结构复杂,要成为真正的可执行程序需要经过链接过程。 感兴趣的话可以浏览《程序员的自我修养》,详细介绍了编译的流程、可执行文件的结构和程序执行的流程

试图自己编写编译器是一个复杂的过程,需要学习编译原理等,费了很长时间的力气。 是gcc编译器的开源。 请下载源代码作为参考学习。 祝你成功

这些高级语言不都是要先编译成汇编语言吗?

高级语言主要是给人看的,即使实现的目的完全一样,程序员编写的高级语言很可能看起来完全不同。 因此,编译器在将高级语言编译成机器码的过程中,不可避免地会产生大量的冗余代码。 例如,在汇编语言中,从a点到b点一步就可以到达,但是用高级语言编译的代码有可能一步一步地推进整个字母,当然js等脚本语言也是高级语言。 它们被分析执行,效率当然不如汇编语言高。

C语言本身是用什么语言写的?

是用c语言写的。

这里有编程语言引导的概念。

自举,顾名思义,就是能够自己抬起自己,换句话说,就是自己编译自己。 也就是说c语言可以通过c语言自己编写自己的编译器。

完成引导通常需要3到4个步骤。

1、创建引导编译器环境。

2、编译引导编译器。

3 .使用引导编译器编译完整的编译器。

4、用步骤3的完整编译器编译完整编译器。

步骤4中得到的编译器是引导编译器。

那么,步骤2的编译器是用什么语言写的呢? 是这么来的吗?

这需要知道编程语言是什么。 简单来说,编程语言就是机器语言( 0101 )、汇编语言(可以理解为机器语言的简单英语翻译)、高级语言)这就是我们通常接触到的编程语言。 细分后还有编译类型语言和分析类型语言等)。

请参考Dennis M. Ritchie编写的thedevelopmentoftheclanguage:c history。

Ken Thomson对BCPL不满意,所以设计了b语言,用BCPL编写了b语言的编译器,然后从该编译器开始用引导数据库编写新的b语言编译器。

贝尔实验室的人用B语言在PDP-7上写了很多东西之后,又对B语言不满意了。 于是1971年,DMR开始在新买的PDP-11上用b给b写扩展。 被称为新b ( NB )。 new B和原来的b语言渐渐远了,于是把BCPL的第二个字母C作为new B的新名字,C语言。

1973年夏天,他们用手头的编译器和语言在PDP-11上重写了Unix Kernel。 c语言就这样和unix/linux结下了不解之缘。

顺便说一下,BCPL也是一种可以引导的语言。 后来,有些人用汇编语言编写了C语言的编译器。 此外,c语言语法是透明公开的,任何语言都可以实现c语言编译器。

所以答案是,第一版的c语言编译器是用b语言写的。 现在任何语言都可以实现C语言的编译器。

WindowsLinuxMac等系统是用什么编程语言汇编的?

很难回答这个问题呢。 1 .首先涉及电脑发展史,有基本的二进制代码到汇编语言,然后是操作系统的出现和几十年来高级语言(面向对象和过程)的飞速发展,而且最近还鲜有新技术的出现。

2 .操作系统是用c语言写的。 这是一种与硬件相关的中级语言,学习硬件不可或缺的编程计算机通过编译可识别的二进制代码,使计算机识别并执行

3 .汇编语言在汇编编译器中运行和编译。 例如NSAM;

4 .目前,许多裸机安装操作系统进行各种操作和运行; 操作系统的确切含义是软硬件的集合体,这方面可以看到一些心得动向,不及固件的发展;

5 .考虑到源代码是二进制代码,只有电脑唯一识别并支持的语言,各种软件都是最后在电脑上运行并翻译成的unix或linux开源的,你可以看看那个系统的代码文件

C语言是根据什么原理和机制生产汇编的?

用C/C语言等高级编程语言编写的程序源代码利用被称为“编译原理”的技术,经过几个列的处理步骤,最终转换成汇编指令,最后翻译机器指令。 我们知道计算机只能处理和识别二进制指令,但编写的程序包含if语句和跟踪等复杂结构环式语句、继承、多态性、虚函数等。 事实上,早些时候,计算机科学家们已经在研究如何把用与人类语言相近的高级语言编写的程序转换成机器指令。 这些研究成果都属于“编译原理”领域,“编译原理”是计算机专业学生的必修课。

那么,根据编译原理,C语言如何转换成汇编语言呢? 总共分为以下步骤。

1 .预处理- 2.词法分析- 3.语法分析- 4.语义分析- 5.优化- 6.链接

请注意,上述流程是目前实际采用的步骤。 编译原理课程可能不包含完整的步骤,而只包含核心的一些步骤。

上面的每个步骤在编译原理课程中都有一个特殊的章节。 这里说明一下各步骤的作用吧。

1 .预处理:负责执行C语言的#include、#if、#else等预处理指令。 请注意,这里执行这些预处理指令。 这些预处理指令的作用是根据系统环境组装最终版本的源代码。

2 .词法分析:抽象出你定义的函数名、变量名、保留的关键词等,用一个符号替换,便于编译器处理。 例如,上图中的main、return、printf等单词均被视为符号,并转换为m、r、p。 该过程会检查变量名、函数名是否正确。

3 .句法分析:经过词法分析处理后,程序代码已经变成了很多符号。 例如,I S T F … M I R P (请放心。 人已经不知道了,但计算机能识别。 这时的符号是零散的,句法分析负责按照一定的结构组织这些符号,形成抽象句法树。

4 .语义分析:建立这样的树结构后,编译检查语法是否正确,扫描这个树。 基于这个树的构造,生成了中间指令。 这个中间指令非常接近汇编。 中间指令和程序集还是有区别的。 每个制造商的CPU指令都不一样,因此需要根据每个制造商的CPU指令集将该中间指令转换为汇编。

5 .优化:程序员有时候代码写得不好,所以会做一些多余的操作,或者下达效率不高的命令。 优化过程可以找出这些缺点,自动地用更好的指令代替。

6 .链接:上述过程只编译了一个模块,一个大程序往往会包裹多个模块。 最后的链接过程是组装所有模块,构建最后可以执行的程序。

以上是从c语言到汇编指令的转换的大致过程。 因为很着急,所以可能有点看漏。 欢迎在评论中补充或纠正错误。 如果觉得说得很好的话,也可以夸奖。