汇编语言的编译
1. 汇编语言编译器是怎么编写的
编译器自举!搜索这个关键字
程序都是编译器编译的。这个是肯定的
至于第一款X语言编译器是不是直接1010101010自己写的那就不知道啦
一般开发编译器的话。有两条路选择
1.利用yacc(或者其变种)&lex(词法分析)-等工具自己生成语法模板
词法语法都可以使用这些工具自己生成
然后自己编写生成的中间码和生成的机器码就可以了
一般做编译原理类似试验都是如此的。许多编译器也的确是这样
2.自己写词法分析和语法分析。可以参考一些开源的编译器
lcc-这个是ANSI C99标准的编译器是开源的
或者nasm,watcom等编译器到www.sf.net上不少开源的编译器
总的来说。高级语言编译器比较难写
如果想快速写出一个的话
可以采用第一种做法。利用工具生成语法词法模板
先写一个简单的汇编编译器比较简单
开源的有nasm,jwasm(支持masm语法开源的编译器)
http://www.japheth.de/JWasm.html
fasm(这款编译器是自举的.就是自己可以编译自己),
http://flatassembler.net/
剩下的就是自己做好语言规则关键字map
引用高手的话。语言map做好了你的编译器也做好一半了
剩下的都是机械性的工作了。
生成x86或者arm指令。
优化工作这个很难解释.根据你所需要的做吧
毕竟可以做出一个无错,又XX的编译器已经很难得
你可以选择使用现有的编译器开发自己的编译器
然后等到你的编译器支持相当数量指令和成熟度的时候
使用自己的语法重新写一遍编译器.
这样你就可以用自己的编译器开发自己的编译器了(是不是很邪恶?)
另外举几个例子
Delphi的编译器是C++ Builder开发的。
而C++ Builder的IDE是Delphi开发的
C++ Builder的编译器是C++ Builder开发的-这个就是编译器自举了。。Delphi和C++ Builder共享一个后端化优化器。
Delphi 早期的版本的编译器是tasm直接编译的。可见Anders的汇编功力多强悍(Anders也就是后来VJ++,C#,.NET工程的核心架构师.最关键的灵魂级人物)
VC++的编译器是VC++开发的。很明显这都说明了编译器自举
自己开发自己。如果一个编译器可以做到自己编译自己。那基本上就可以实现任何功能了。
关于编译器开发的书籍可以看一下
龙书《编译原理(第二版)》
虎书《现代编译原理-C语言描述》
鲸书《高级编译器设计与实现》
建议从鲸书看起。然后是龙书
再来是虎书--虎书里面描述了许多现代编译器(正如其名)技术
例如面向对象啦,优化,垃圾回收等等.
鲸书看完基本上就可以实现一个简单的Tiny C编译器了
然后在龙书巩固,读一下语言规范,自己看一些开源的汇编编译器代码
自己就可以尝试做一个汇编语言编译器了.等到技术提高了
在尝试做一些高级语法识别,参考LCC代码做一下ANSI C99的
C语言编译器。再来就看你自己的兴趣和领悟度拉
如果想支持C++的话就得要对编译器做许多方便的研究
类似Java那种跨平台或者Ruby,Python等动态语言
虎书中也有描述。当然看自己功力了
2. 怎么编译汇编语言程序
计算机硬件系统只懂自己的指令程序,而不懂其他语言程序。因此,想用汇编语言或高级语言,则必须有这样一程序,它将用汇编语言或高级语言写成的程序转换成等价的机器语言程序,我们称这种程序(转换)为翻译程序(Translator),把汇编语言的翻译程序称为汇编程序( Assembler ),把高级语言的翻译程序称为编译程序( Comiler )。编译程序也称为编译器,它的输入对象称为源程序( Source program ),输出对象称为目标程序( Object program )。
3. 汇编语言编译器是怎么来的
第一个软件,显然是用机器语言写的。
当用机器语言写成了文字处理软件,才能用屏幕、键盘打字。
当用机器语言写成了编译软件,才能把打好的字,编译成机器码。
4. 汇编语言编译
1、编程语言包含汇编语言,汇编语言只是编程语言的一种。
2、编程语言:
编程语言(programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧,用来向计算机发出指令。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
3、汇编语言:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
5. 汇编语言的源程序需要编译吗
汇编语言不是机器语言,肯定要先翻译成机器语言(.obj文件),再连接成可执行文件才能被计算机执行。
如果是裸机,可以不用连接。
6. 什么是汇编、汇编语言、编译三者有什么区别和联系
汇编是面向机器的程序设计语言;
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0;
7. 汇编语言是用什么软件编译的
《汇编语言》清华大学出版社 王爽版,这是比较全面的汇编教材,适合初学者。你以前学的是高级软件编程,现在学汇编需要了解计算机的组成知识。编译器就用masm 5.0就可以。是在dos下的。
8. 汇编语言的编译
很显然是路径错误,设置正确的路径即可。设置路径:开始-->运行-->cmd (回车)
cd \(回车)
d:(回车)
cd D\TEMP\ABC\123(回车)(假如这是正确的路径的话)
9. 汇编程序是怎么编译的
汇编语言是一种低级语言,汇编语言是汇编指令集、伪指令集和使用它们规则的统称,使用具有一定含义的符号为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令。
过程:
编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM)
汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM;
连接:用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下:LINK LX.OBJ;
执行:如果结果在屏幕在显示,则直接执行可执行文件。
调试:用调试程序(LINK.EXE)对可执行文件进行调试,格式如下:DEBUG LX.EXE
汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。汇编程序(如MASM)的原理实际上就是把汇编的代码转成电脑可以识别的二进制码
10. 汇编语言的那个编译链接 的详细过程 每一步骤
LZ请跟着我的操作走
1.将写好的汇编代码保存为1.asm
2.将1.asm复制到c盘下
3.点开始(即左下标那个windows图标),找到运行,或(附件中的命令提示符)
4.找到运行后,输入cmd 或 command
5.进入后输入cd c:\
6.输入masm 1;(1后面有分号),然后回车
7.输入link 1;然后回车
8.cls清屏然后回车
9.输入1.exe,然后回车
10.完成
至于怎么debug
步骤:
1-8同上
9.输入debug 1.exe,然后回车
10.完成
至于debug 中的 'r' 'd' 't' 自己上网找大把
我的系统是win 7,
你的masm 和 link debug 要放在C:\Windows文件夹下
PS: 若有不明白的地方,可以追问