免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mik
打印 上一主题 下一主题

欢迎加入a64汇编译器的开发工作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-18 22:44 |显示全部楼层 |倒序浏览
以下是我写的一份关于 a64 简短的说明资料: http://www.cublog.cn/u/11773/showart.php?id=97810

我最后一次对它进行修改大概是4月,这是最初的版本!

这个最初版本的没有以下功能:

1、不支持 X87 浮点指令

2、不支持 MMX 及 XMM 多媒体指令 (也就是 SSE 系列指令)

3、不支持 AMD 3DNow 指令

4、不支持宏功能等

所以,它只支持 GPI (即通用指令),所以不能编译 浮点指令等


最遗憾的是我没有为 a64 加入 输出 elf32 和 elf64 格式 文件输出功能,以至于a64只能生成 binary格式文件!

我最初的对实现a64汇编器展望是这样的:

1、逐渐加入对 x87指令, mmx指令, xmm 指令及3DNow 指令的支持!

2、实现既支持 Intel 指令格式 又支持 GNU 指令格式!

3、实现一些基本编译器功能,如宏、条件等!

4、生成几种文件格式!

5、实现一个 windows 平台版本!

6、很好地成为 前端 与 后端 编译器!

7、最后,尽可能完善它及升级!


要做到这些工作,确实需要花很多时间!

很可惜,我未能一股作气地继续写下去,未非是我写不出来,而是我未能兼顾! 因为这只是我业余的兴趣而

已,每天只是一个小时时间,甚至有一隔几天都没动它!我并非有那么多的时间!

如果我是全心全意地去对待它,若许它已经完成的差不多了!

更重要的事情是:我变得懒堕了!失去了精力与兴趣去维护它!

以致于,没有继续下去了! 但是,我觉得很可惜,所有把它放上来了!


所以! 大家如果有能力及兴趣的话,很欢迎去加入修改它,继续开发它的工作!

希望大家把修改过的版本能上传这里,让大家讨论讨论研究研究!


最后,我需要说明的是:这真的是一个非常好的项目!

我可以肯定是说: a64 编译出来的代码 绝对比 nasm 编译出来的代码更优秀,因为我做过很多实验对比

和 gas 编译出来的代码差不多!基本上是一致的,除非a64有出错!


还要说明的是,我写的代码有些地方确实写得不好,我承认!别见笑,希望大家批评与指教!

所以需要各位大侠来完善它!如果有看不明的,可以问我,我是乐意回答的!



附件上有所有 a64 的源代码!

不要用优化来编译它,因为我知道在写mem_zero()时有错误,我没有改正它,这些代码都是去年写的,大部分都在年初改过!



----------------------------------------------------------------------------------------------------------------

在这里,有必要介绍每个文件的用途,及大致的数据结构!

a64-2.h (定义 a64 的指令操作数的相关数据)  :

有 4 个主要的结构:

1、typedef struct {... ... } mem_t;               
     这定义 内存操作数的指令形式,如: (qword)[rax+rdx*8+0x0c] 、 [0x1122334455667788]  等 。

2、 typedef struct { ... ... } imme_t;
     这定义 立即操作数的据令形式, 如: (dword)0x1122 、 0x1122334455667788  等。

3、typedef struct {... ... } o_key_t;
    这定义 每个操作数的具体形式,如: mov eax, [ebx]  这条指令含两个这种结构。

4、typedef struct { ... ... } e_key_t;
    这定义 产生每条指令encodes 的关键结构。



a64-2.c (a64 的库函数):
   这个文件包含了 a64 所需的库函数。
   

[size=4]error.h :
   定义了错误处理信息结构及函数。

error.c :
   实现错误处理,主要是挂错误信息函数,及打印错误信息函数。


gen.c :
    这是最重要文件了,包含所有产生二进制代码的函数,

  包括 generate(), do_generate() 及 do_transfer_gen()  等。


i_attribute.h :

   这是 x86-64 指令之根本!  定义了x86-64 指令的属性!!


label.h  label.c :
    a64 的 标号和变量(保留)处理文件,主要是挂标号队列,查找标号等

main.c :
     a64 的入口文件,这个文件写得比较烂!



operand.h  operand.c   
      a64 的操作数处理函数!


opcode.h  opcode.c :
    a64 的 x86-64 指令表! 没包括 x87、mmx/xmm、3dnow 指令


parse.h  parse.c :
     a64 的语法解析代码!

[ 本帖最后由 mik 于 2006-6-19 22:09 编辑 ]

a64.tar

290 KB, 下载次数: 334

a64

论坛徽章:
0
2 [报告]
发表于 2006-06-19 21:39 |显示全部楼层
原帖由 njmpop 于 2006-6-18 23:54 发表
简单看了下,一个是程序中用了opcode这个函数包,不知道是不是某个模拟器的代码?

parse.c是不是自己写的语法分析代码?



你简单看了下,没弄明白就不要随便发表意见!

opcode.c 文件里全部是x86-64 指令表,没有一个是函数! 我没见过模拟器的代码,像不像模拟器的代码我不清楚

如果,是的话,那真是笑掉我的大牙了,这些 x86-64 的指令表与模拟器有什么相关?

在这里,我不想说是不是自己写的这个问题,没这个必要性!

论坛徽章:
0
3 [报告]
发表于 2006-06-20 23:32 |显示全部楼层
原帖由 njmpop 于 2006-6-20 23:21 发表
搞汇编编译开发是没有前途的。
不要觉得汇编是神,汇编已经被淘汰了。
这个世界只有少部分人才需要汇编。
这个项目是没有前途的。



我不想和你争论什么,觉得有兴趣就看看,瞧不起的话大可以不瞧!

世界上最主要的计算机语言,归根到底还是汇编,我也没觉得有什么了不起的!

如果我觉得有钱可图的话也不致于放上来,况且开源编译器一大堆,犯不着这么做

搞开发就是要保持一种兴趣和勇于去写,只有想不到的,没有做不到的,虽然我不是从事计算机开发工作的

连我这个行外人都知道,况且,你这个行内人???

[ 本帖最后由 mik 于 2006-6-20 23:37 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-06-21 22:13 |显示全部楼层
原帖由 njmpop 于 2006-6-21 02:39 发表
楼上的,谢谢提醒。

我本来只是想问几个技术问题,那几个问题有问题吗?有损楼主的颜面吗?你看看他的回答是怎么样的?
--------------------------------------
你简 ...



我是狂了点! 那我收敛! 不好意思地说

呵呵~  不过实话实说,代码确实是我自己思考自己写,我从未看过模拟器的代码,

也没看过任何一项开源编译器的代码! 因此没有一行代码是借鉴过来的!

照你们这样一说! 我现在才知道,原来,我这种方法居然和别的方法不谋而和!

因此,也只有用这种方法才比较容易实现!

论坛徽章:
0
5 [报告]
发表于 2006-06-21 22:44 |显示全部楼层
原帖由 njmpop 于 2006-6-21 22:38 发表


话说开了就无所谓了。我也说了不少过火的话。见谅。
全部自己写对自己是个提高,如果能参考别人的成果不是减少了不少的走弯路的几率?
成功是站在巨人的肩膀上,这个道理是很简单的。

如果有机会可以讨 ...



呵呵~ 你牛

你是将c代码翻译为汇编,然后从汇编到二进制的转换?

还是直接将C代码翻译为二进制提交给执行环境?

解释执行,执行环境也是你写的?

论坛徽章:
0
6 [报告]
发表于 2006-06-21 22:54 |显示全部楼层
原帖由 flw2 于 2006-6-21 22:46 发表
我感觉写编译器比写操作系统难,只是操作系统代码量大.
这方面一直是弱项,需要补充,不说汇编语言重要不重要,汇编和编译不是一个档次上的东西.
李建忠翻译的那本,买了N久,可是只看了3章.

确实很佩服LZ~首先敢拿 ...



高级语言编译器比汇编编译器难度要大很多,的确不能相比的,这是无可置疑的

就拿C来说,光语意分析,代码的优化等这些问题在汇编里是不需要的,

而对C来说,这是衡量谁的C编译器更优秀的指标之一

论坛徽章:
0
7 [报告]
发表于 2006-06-22 23:30 |显示全部楼层
原帖由 njmpop 于 2006-6-22 23:26 发表


从汇编到二进制我是没有做的,因为我做不出来,
解释执行的环境也是我写的。
但我没有做性能优化,因为是做不出来。



那你应该是将C代码翻译成一个中间代码以供执行环境来执行吧?

请教一下,你的解释执行环境是如何工作的? 或者设计思路是如何的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP