汇编语言编译器是什么语言写的?

时间:2022-06-04 12:39:26
一些语言的编译器通常都是C/汇编 写的,那么汇编语言编译器又是什么语言写的呢?

35 个解决方案

#1


最开始的是机器码写的。

#2


应该是吧

#3


想用什么语言就用什么语言。
用不着再去发明*了。就算是新的芯片,新的指令组,也可以在其他系统上先编译成目标码的编译器,拿过来使用。
还用01码写,那不成原始人了。

不过汇编语言的编译器相比高级语言,实在是太简单了。用汇编语言写就可以胜任了(从工作量上说)。

#4


直接用指令码写出第一个汇编语言编译器.

#5


什么语言都可以。

#6


问楼上前辈:
教授上课的时候没有这样说过呀。好像是用机器码写的吧?

#7


nasm是c语言写的,快去下载研究

#8


第一个编译器确定一定以及肯定是用1和0写的!



------------------------------
是先有蛋呢还是先有鸡呢?

#9


我最初猜想大概也是机器码写的.(只是觉得好象太原始了).
汇编语言编译器理论上当然是什么语言写都可以,比如C语言,但是这个C语言的编译器又该用什么语言写呢?
所以应该终有一个语言编译器是0,1来写.
这些都是我的猜想.发出来供大家讨论,也是想得到一些证实.

#10


现在的汇编编译器可以用任何语言写。

#11


估计,起初先是机器语言编写出一个编译器吧.

#12


可以用任何语言写...理论上是机器码写的...

#13


引用 9 楼 lcyhjx 的回复:
我最初猜想大概也是机器码写的.(只是觉得好象太原始了). 
汇编语言编译器理论上当然是什么语言写都可以,比如C语言,但是这个C语言的编译器又该用什么语言写呢? 
所以应该终有一个语言编译器是0,1来写. 
这些都是我的猜想.发出来供大家讨论,也是想得到一些证实.

研究第一个编译器是历史学家的事,估计也未必只有一个。往历史上看,那肯定至少有一个编译器是01码写的,但是,要清楚,这是一个进化过程,第一个写的人,未必认为写的是编译器。最有可能的事是(助记符)。把一组01码用一个简单符号表示。

如果第一把铁锤是用石头砸出来了,那第二把就可以用第一把来砸,用不着还用石块了。
换了个地方、换了一种样子的铁锤也用不着还从用石头砸开始。


编译器也一样。c语言的编译器,当然可以用c语言来写,而且实际上也是。明天你发明一个X语言,也用不着从汇编开始,一样可以从你习惯的语言开始写第一个编译器(比如C)

#14


起初是用机器码
现在是用汇编语言

#15


说二句题外话
1 汇编语言有二类是不同的,一类是基于机器指令,并不依赖OS的,这样的编译器基本是硬件构造;另一类是依赖OS,大概就是大家谈的,这类汇编语言其实与如早期单片机语言不相同了,是基于OS对硬件或机器指令"命令化"(准确说法如句柄\API什么的),再由高级汇编编译器去使用的;
2 并不是什么语言都行,应该是不同的汇编语言对硬件依赖很大的,如果HTML也算是语言的话,应该地球人就不好做汇编器了.

#16


理论上什么语言都行,事实上是C。

#17


引用 15 楼 hswxf 的回复:
说二句题外话 
1 汇编语言有二类是不同的,一类是基于机器指令,并不依赖OS的,这样的编译器基本是硬件构造;另一类是依赖OS,大概就是大家谈的,这类汇编语言其实与如早期单片机语言不相同了,是基于OS对硬件或机器指令"命令化"(准确说法如句柄\API什么的),再由高级汇编编译器去使用的; 
2 并不是什么语言都行,应该是不同的汇编语言对硬件依赖很大的,如果HTML也算是语言的话,应该地球人就不好做汇编器了.

不大认同。
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。作为语言本身并不依赖这些API。
2、属于吹毛求疵,自然语言的歧义性到处都存在,根据上下文理解,应该没人会理解成用HTML语言写汇编器。

#18


编译器不过是一个翻译机,编译器自身的运行环境理论上无关紧要。

#19


汇编100% 是依赖机器的  每个CPU都有自己的一套汇编指令

#20


没想到有争论:
1 基于单片机的开发系统,使用的单片机语言也是汇编语言,不过并没有OS吧,你用什么API?如2051的定时器;
2 基于DOS的开发系统或其它有OS的系统,是不是有OS的呢?
我想这点应该是明了的吧!

#21


看看语言发展的历史,可以看出汇编语言的位置.
机器代码(早期的译码机)-->代码集合(如早期运算器)-->离散微命令--->微指令--->机器级汇编-->.......
**********************
不大认同。 
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。(后面看不懂省了)
为什么没有这么分类的?呵呵那如何分呢?

#22


谁能给出个实例说说,带注释的。谢谢

#23


引用 21 楼 hswxf 的回复:
看看语言发展的历史,可以看出汇编语言的位置.
机器代码(早期的译码机)-->代码集合(如早期运算器)-->离散微命令--->微指令--->机器级汇编-->.......
**********************
不大认同。
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。(后面看不懂省了)
为什么没有这么分类的?呵呵那如何分呢?


硬件相关是汇编的特殊性,
跟操作系统有什么关系,
你能跟据系统不同把c语言分成windows版和linux版?
你能把c分成依赖os和不依赖的?

#24


第一个编译器当然是用机器指令写,很简的道理

#25


只是一个工具而已,跟dos下的DIR命令比并没有什么特别,你想用什么语言写就用什么语言写,如果不怕麻烦,甚至可以用VB脚本来写,当然,那跑起来可能很慢。

#26


看来LZ是想写个编译器出来了,用自己最熟悉的语言就好,只要目的能达到就行.

#27


最最初的编译器应该只能是通过机器语言字节码构造出来的.但是现在基本上使用C/C++为多.

#28


汇编语言编译器其实用什么语言写都无所谓,但是现在的MS操作系统占了绝大多数,系统其本身就是由C语言所写的,所以汇编语言编译器用C来写个人认为与系统的兼容性可以达到最好的程度,新手之见,各位见笑了!

#29


这个不限,能输出二进制文件的语言都可以
你用解释型(Python,Ruby)的语言写一个都可以,
如IA-32,你知道它的所有指令集就OK了。。。。。

#30


最初的汇编语言编译器, 一定是用机器语言编写的.
但是如果有了一个可以执行的程序, 那么用什么语言都可以了, 只需要写出一个在现有操作系统下能够执行的程序, 然后在程序中添加将汇编字符进行翻译到二进制的机器语言即可.
编程语言的编译原理太简单了, 一般高级语言初学者都可以编程出这样一个程序.


#31


第一个应该是机器语音
也就是0101这样写出来的

要知道当时艾尼克的程序还是人为的开关来控制呢...
不就是0101嘛  当然有人会去做这事咯

#32


mark

#33


类似鸡和蛋的问题:
比如c语言编译器:
第一个c语言编译器是用汇编写的(因为没有更高级的编译器),之后用c语言重写了c语言编译器(因为有了c语言编译器).

在linux下用源代码装Gcc要编译安装两次:第一次用系统已经存在的gcc编译一次,第二次用第一次编译生成的新的gcc再编译一次.
因为老的编译器编译出的代码质量与新的编译器可能不是很好.

#34


楼上说鸡生蛋,蛋生鸡的问题,确实挺像的。
但我理解,最底层的代码,还是用最接近机器的方式的

#35


机器码
3键键盘
0,1,backspace

#1


最开始的是机器码写的。

#2


应该是吧

#3


想用什么语言就用什么语言。
用不着再去发明*了。就算是新的芯片,新的指令组,也可以在其他系统上先编译成目标码的编译器,拿过来使用。
还用01码写,那不成原始人了。

不过汇编语言的编译器相比高级语言,实在是太简单了。用汇编语言写就可以胜任了(从工作量上说)。

#4


直接用指令码写出第一个汇编语言编译器.

#5


什么语言都可以。

#6


问楼上前辈:
教授上课的时候没有这样说过呀。好像是用机器码写的吧?

#7


nasm是c语言写的,快去下载研究

#8


第一个编译器确定一定以及肯定是用1和0写的!



------------------------------
是先有蛋呢还是先有鸡呢?

#9


我最初猜想大概也是机器码写的.(只是觉得好象太原始了).
汇编语言编译器理论上当然是什么语言写都可以,比如C语言,但是这个C语言的编译器又该用什么语言写呢?
所以应该终有一个语言编译器是0,1来写.
这些都是我的猜想.发出来供大家讨论,也是想得到一些证实.

#10


现在的汇编编译器可以用任何语言写。

#11


估计,起初先是机器语言编写出一个编译器吧.

#12


可以用任何语言写...理论上是机器码写的...

#13


引用 9 楼 lcyhjx 的回复:
我最初猜想大概也是机器码写的.(只是觉得好象太原始了). 
汇编语言编译器理论上当然是什么语言写都可以,比如C语言,但是这个C语言的编译器又该用什么语言写呢? 
所以应该终有一个语言编译器是0,1来写. 
这些都是我的猜想.发出来供大家讨论,也是想得到一些证实.

研究第一个编译器是历史学家的事,估计也未必只有一个。往历史上看,那肯定至少有一个编译器是01码写的,但是,要清楚,这是一个进化过程,第一个写的人,未必认为写的是编译器。最有可能的事是(助记符)。把一组01码用一个简单符号表示。

如果第一把铁锤是用石头砸出来了,那第二把就可以用第一把来砸,用不着还用石块了。
换了个地方、换了一种样子的铁锤也用不着还从用石头砸开始。


编译器也一样。c语言的编译器,当然可以用c语言来写,而且实际上也是。明天你发明一个X语言,也用不着从汇编开始,一样可以从你习惯的语言开始写第一个编译器(比如C)

#14


起初是用机器码
现在是用汇编语言

#15


说二句题外话
1 汇编语言有二类是不同的,一类是基于机器指令,并不依赖OS的,这样的编译器基本是硬件构造;另一类是依赖OS,大概就是大家谈的,这类汇编语言其实与如早期单片机语言不相同了,是基于OS对硬件或机器指令"命令化"(准确说法如句柄\API什么的),再由高级汇编编译器去使用的;
2 并不是什么语言都行,应该是不同的汇编语言对硬件依赖很大的,如果HTML也算是语言的话,应该地球人就不好做汇编器了.

#16


理论上什么语言都行,事实上是C。

#17


引用 15 楼 hswxf 的回复:
说二句题外话 
1 汇编语言有二类是不同的,一类是基于机器指令,并不依赖OS的,这样的编译器基本是硬件构造;另一类是依赖OS,大概就是大家谈的,这类汇编语言其实与如早期单片机语言不相同了,是基于OS对硬件或机器指令"命令化"(准确说法如句柄\API什么的),再由高级汇编编译器去使用的; 
2 并不是什么语言都行,应该是不同的汇编语言对硬件依赖很大的,如果HTML也算是语言的话,应该地球人就不好做汇编器了.

不大认同。
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。作为语言本身并不依赖这些API。
2、属于吹毛求疵,自然语言的歧义性到处都存在,根据上下文理解,应该没人会理解成用HTML语言写汇编器。

#18


编译器不过是一个翻译机,编译器自身的运行环境理论上无关紧要。

#19


汇编100% 是依赖机器的  每个CPU都有自己的一套汇编指令

#20


没想到有争论:
1 基于单片机的开发系统,使用的单片机语言也是汇编语言,不过并没有OS吧,你用什么API?如2051的定时器;
2 基于DOS的开发系统或其它有OS的系统,是不是有OS的呢?
我想这点应该是明了的吧!

#21


看看语言发展的历史,可以看出汇编语言的位置.
机器代码(早期的译码机)-->代码集合(如早期运算器)-->离散微命令--->微指令--->机器级汇编-->.......
**********************
不大认同。 
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。(后面看不懂省了)
为什么没有这么分类的?呵呵那如何分呢?

#22


谁能给出个实例说说,带注释的。谢谢

#23


引用 21 楼 hswxf 的回复:
看看语言发展的历史,可以看出汇编语言的位置.
机器代码(早期的译码机)-->代码集合(如早期运算器)-->离散微命令--->微指令--->机器级汇编-->.......
**********************
不大认同。
1、汇编语言没这么分类的,所谓的操作系统依赖不过是调用OS的API。(后面看不懂省了)
为什么没有这么分类的?呵呵那如何分呢?


硬件相关是汇编的特殊性,
跟操作系统有什么关系,
你能跟据系统不同把c语言分成windows版和linux版?
你能把c分成依赖os和不依赖的?

#24


第一个编译器当然是用机器指令写,很简的道理

#25


只是一个工具而已,跟dos下的DIR命令比并没有什么特别,你想用什么语言写就用什么语言写,如果不怕麻烦,甚至可以用VB脚本来写,当然,那跑起来可能很慢。

#26


看来LZ是想写个编译器出来了,用自己最熟悉的语言就好,只要目的能达到就行.

#27


最最初的编译器应该只能是通过机器语言字节码构造出来的.但是现在基本上使用C/C++为多.

#28


汇编语言编译器其实用什么语言写都无所谓,但是现在的MS操作系统占了绝大多数,系统其本身就是由C语言所写的,所以汇编语言编译器用C来写个人认为与系统的兼容性可以达到最好的程度,新手之见,各位见笑了!

#29


这个不限,能输出二进制文件的语言都可以
你用解释型(Python,Ruby)的语言写一个都可以,
如IA-32,你知道它的所有指令集就OK了。。。。。

#30


最初的汇编语言编译器, 一定是用机器语言编写的.
但是如果有了一个可以执行的程序, 那么用什么语言都可以了, 只需要写出一个在现有操作系统下能够执行的程序, 然后在程序中添加将汇编字符进行翻译到二进制的机器语言即可.
编程语言的编译原理太简单了, 一般高级语言初学者都可以编程出这样一个程序.


#31


第一个应该是机器语音
也就是0101这样写出来的

要知道当时艾尼克的程序还是人为的开关来控制呢...
不就是0101嘛  当然有人会去做这事咯

#32


mark

#33


类似鸡和蛋的问题:
比如c语言编译器:
第一个c语言编译器是用汇编写的(因为没有更高级的编译器),之后用c语言重写了c语言编译器(因为有了c语言编译器).

在linux下用源代码装Gcc要编译安装两次:第一次用系统已经存在的gcc编译一次,第二次用第一次编译生成的新的gcc再编译一次.
因为老的编译器编译出的代码质量与新的编译器可能不是很好.

#34


楼上说鸡生蛋,蛋生鸡的问题,确实挺像的。
但我理解,最底层的代码,还是用最接近机器的方式的

#35


机器码
3键键盘
0,1,backspace