- 注册时间
- 2004-12-25
- 最后登录
- 1970-1-1
|
放假了终于有机会完成我的编译器了
以前那个错误真的是太多了,这次我把编译的程序重写了一便,增强了很多功能 要是用的话就要仔细看下面的说明了)
目前支持的语句:
这些语句都可以在程序里的任意地方使用,没有位置限制,这样可以更灵活.
.org
格式:
[空格>=1].org[空格>=1][十进制或十六进制的数值]
当不定义.org时,默认的开始地址为0.
.include
格式:
[空格>=1].include[空格>=1]"完整文件名及路径"
.db
格式:
[空格>=1].db[空格>=1]"我",$ff,123
注意.db定义的是字符和数值,引号中的字符并不是字符串,没有在末尾加0,要手动加.
.macro
格式:
[顶格写宏名][:][空格>=1].macro
[宏体]
[空格>=1].endm
.bitmap(直接载入对应文件数据)
格式:
[空格>=1].bitmap[空格>=1]"完整文件名及路径"
这个指令会将其所引用的文件的全部数据写入编译的文件中.
目前编译器只支持十进制和十六进制的数值,二进制好像用的不多就没写有关的判断.编译器只在指令和语句上会忽略大小写,其他的都不会,比如label.宏名.db.和引用的文件名,写的时候要注意.
编译器可以操作label,如:
lda #<graph+$cd
cmp #>graph-25
因为我也不很了解语法,所以如果graph=$1234我就让"<"得到的是$12,">"是$34,而且要非常注意,后面的$cd是先加到graph上后再做取值.其他的指令也是.
lda start-3,y
label=$4000 <----1
label: <----2
只要是像上面两种情况出现的label就可以直接用于直接寻址和间接寻址或用于lda #<label
给label赋值可以在程序的任何地方,编译时会预先处理label.
label被重复定义不会给出提示,但后来定义的数值无效赋值也一样.label最长30个字节.
include的文件中出现的label同样可以被使用,不过对于宏是当然的了
最多可以include 50个文件,为了减少出错几率就没有让include可以嵌套include
目前限制一行最多可以有200个字符,最多200个label及200个macro,同样macro也不可以嵌套.文件的大小没有限制.
最随便的格式:
label: lda 4555
sta ( $ ef),y
.include "/MyJob/asdasd.bin"
.db 123,$ df,"space"
label = 2345
不过并不推荐像上面这样写 因为会拖慢一部分速度.
因为程序是用LavaXIde3.1编译的,没法在6502机型上用getword,所以只能输入英文文件名,输入时用"输入法"键来切换大小写和数字.
最后要注意的是,编译完的文件会存放在根目录的MyJob目录下.
不知道以前laugj说的BITMAP是什么样的格式,反正我先做成这样了
[em10] |
|