免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 8368 | 回复: 41
打印 上一主题 下一主题

欢迎加入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-18 22:56 |只看该作者
好,兄弟我给你高亮吧

论坛徽章:
0
3 [报告]
发表于 2006-06-18 23:54 |只看该作者
简单看了下,一个是程序中用了opcode这个函数包,不知道是不是某个模拟器的代码?

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

论坛徽章:
0
4 [报告]
发表于 2006-06-19 02:38 |只看该作者
支持

论坛徽章:
0
5 [报告]
发表于 2006-06-19 09:46 |只看该作者
支持一下!

论坛徽章:
0
6 [报告]
发表于 2006-06-19 09:54 |只看该作者
支持一下!

论坛徽章:
0
7 [报告]
发表于 2006-06-19 10:00 |只看该作者
支持一下!

论坛徽章:
0
8 [报告]
发表于 2006-06-19 10:06 |只看该作者
顶~~~ 学习下

论坛徽章:
0
9 [报告]
发表于 2006-06-19 10:13 |只看该作者
还有不少工作要做呢

论坛徽章:
0
10 [报告]
发表于 2006-06-19 11:38 |只看该作者
不错,继续努力。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP