- 论坛徽章:
- 0
|
以下是我写的一份关于 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 编辑 ] |
|