最近看了看编译原理,越看越迷糊了

jinandsun 2003-04-08 10:56:27
最近看了看编译原理,越看越迷糊了
自己制作的的语言,比如使用C来实现
是不是简单的自己的函数转化为c的函数呢?
还是需要自己设计机器指令呢?
越学越迷糊?
...全文
28 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
heretic 2003-04-17
  • 打赏
  • 举报
回复
汇编教程难道就没有你所说的那些知识吗?不要老记着课堂上那些东西,到处都是知识。
heretic 2003-04-17
  • 打赏
  • 举报
回复
非常遗憾,我没有学习组成原理和接口技术。如果把汇编作为编程语言来看待,我认为不一定需要这些基础,不然路就太长了。
jinandsun 2003-04-17
  • 打赏
  • 举报
回复
是的,有些东西我也觉得没有必要全学完就去学另一样的,
高手是不会出现在死板的学生那里的!
需要自己引导自己学习,赶兴趣的。
谢谢楼上的各位,希望有兴趣来
http://byoneself.yeah.net的论坛看看,这里开了编译方面的讨论,并希望有能力或有兴趣的朋友来做个斑竹,大家一起维护这个论坛,把他作为一个对大家有用的论坛!
在次感谢!
celeil 2003-04-16
  • 打赏
  • 举报
回复
楼上,不学组成原理和接口技术,怎么去看汇编教材?连接口是硬件还是软件都不知道,计算机一些工作原理都不清楚,“字”和“字节”,“补码”、“溢出”这些基本概念都没学过,你让人家去啃汇编,亏你说的出口。
heretic 2003-04-13
  • 打赏
  • 举报
回复
不需要学习组成原理和接口技术.
先看一本编译原理教材,最好是<<Compiler Construction:Principles and Practice>>,如果做16位编译器就随便看一本8086汇编教材,做32位编译器就要看一看Intel IA32架构处理器开发人员指南.做C编译器你当然必须非常熟悉C语言和C标准库.另外必须熟悉Win32 CUI,GUI,DLL的一些知识,还有PE文件格式,等等,不然你的32位程序到那里去运行.过一段时间我将开放我做的Heretic C Compiler,Assembler和Linker.
celeil 2003-04-11
  • 打赏
  • 举报
回复
楼主,你要学的太多了。尤其是硬件知识,比如组成原理和接口技术。
jinandsun 2003-04-11
  • 打赏
  • 举报
回复
是的
我在大一,有些东西还没开课:
计算机原理和80X86的原理我都自学过
不过还是很多没搞明白,
只有努力了:)
feiyixp 2003-04-10
  • 打赏
  • 举报
回复
一本书也讲不清楚.学习编译原理的最好方法是自己做一个编译器,否则就不要学了(或者只了解一些概念).大致应该这样做:

1.设计一个函数asm32(Assembly_Instruction_Row, Current_Instruction_Offset, Output).要求实现80386~P4支持的所有32位指令.
2.设计一个类似于MS-DOS DEBUG的软件,方便你测试上一步的成果.至少实现A命令和U命令.
3.设计一个Assembler.除了支持指令翻译外,还要指令指令标号和数据定义伪指令.代码和数据标号要支持static,extern,dllimport等属性.此Assembler用作编译器后端.
4.实现一个符合PE文件格式规范的Linker.当然只实现一部分,支持.text,.data,.idata,.edata,.rsrc,.reloc等.
5.从C89和C99标准中提取部分词法和语法规则(去掉指针和与指针有关的东西,去掉typedef,其他基本可保留),然后实现其编译器,后端生成汇编码.
完成所有任务需要很多时间.高手2个月(指做过编译器的人),一般水平需要半年.
我就是这样做的.
hereticiii@sina.com
jinandsun 2003-04-10
  • 打赏
  • 举报
回复
谢谢楼上,我感觉在短期好像还看不明白的 回答
我想 问一下,写编译期,都 需要哪些知识?
从基本的 算起?
能不能 介绍己本书呢?
非常感谢你 的回答:)
heretic 2003-04-10
  • 打赏
  • 举报
回复
1.asm32()函数不需要汇编来实现,最好用ANSI C.
把汇编指令整理成下列格式:
MOV R32, mem32
请参考Intel IA32架构文档
编译器要么支持32位 FLAT模式,要么支持16位实模式.做16位的编译器没有什么意义.我的Heretic C Compiler用于支持win32开发,包括Win32 Application,Win32 Console Application,Win32 DLL.

2.汇编指令也用ANSI C生成.例如函数的开始和结束:
Emit(":%s", FuncName);
Emit("\tpush ebp");
Emit("\tmov ebp, esp");
Emit("\tsub esp, XXX");
......
Emit("\tadd esp, XXX");
Emit("\tpop ebp");
Emit("\tret XX");
再用Assembler将其转换为机器码.
jinandsun 2003-04-10
  • 打赏
  • 举报
回复
1.设计一个函数asm32(Assembly_Instruction_Row, Current_Instruction_Offset, Output).要求实现80386~P4支持的所有32位指令


问:这个需要使用汇编来写?不明白支持32位指令的用意?

5.从C89和C99标准中提取部分词法和语法规则(去掉指针和与指针有关的东西,去掉typedef,其他基本可保留),然后实现其编译器,后端生成汇编码.
汇编代码是使用C写的程序生成的?

请楼上的在帮助解答一次,谢谢了
我确实想实现编译器,也知道需要时间,但我非常有兴趣,也有信心能做下去!
感谢您的帮助!


ahalf 2003-04-09
  • 打赏
  • 举报
回复
生成的是汇编表示码
不是汇编语言代码
jinandsun 2003-04-09
  • 打赏
  • 举报
回复
有的生成的 是汇编代码 ?然后编译程序在把 汇编代码编译成可执行 程序?
那怎么生成汇编代码呢
?
Linux2001 2003-04-09
  • 打赏
  • 举报
回复
同楼上的观点
heretic 2003-04-09
  • 打赏
  • 举报
回复
一本书也讲不清楚.学习编译原理的最好方法是自己做一个编译器,否则就不要学了(或者只了解一些概念).大致应该这样做:

1.设计一个函数asm32(Assembly_Instruction_Row, Current_Instruction_Offset, Output).要求实现80386~P4支持的所有32位指令.
2.设计一个类似于MS-DOS DEBUG的软件,方便你测试上一步的成果.至少实现A命令和U命令.
3.设计一个Assembler.除了支持指令翻译外,还要指令指令标号和数据定义伪指令.代码和数据标号要支持static,extern,dllimport等属性.此Assembler用作编译器后端.
4.实现一个符合PE文件格式规范的Linker.当然只实现一部分,支持.text,.data,.idata,.edata,.rsrc,.reloc等.
5.从C89和C99标准中提取部分词法和语法规则(去掉指针和与指针有关的东西,去掉typedef,其他基本可保留),然后实现其编译器,后端生成汇编码.
完成所有任务需要很多时间.高手2个月(指做过编译器的人),一般水平需要半年.
我就是这样做的.
hereticiii@sina.com
jinandsun 2003-04-09
  • 打赏
  • 举报
回复
生成后,
为什么生成表示码呢?
生成表示码下一步,做什么呢?
zhhuang2002 2003-04-09
  • 打赏
  • 举报
回复
机器指令是CPU固有的,除非设计CPU才设计机器指令
编译器的目的是将高级语言(如C等)程序转换为机器指令程序(就是可执行程序)
这个转换过程就是编译过程,是比较复杂的处理过程,要进行多遍扫描,会采用中间代码方式

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧