Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>ZG AssemblerNew to Visual Studio Code? Get it now.

ZG Assembler

Preview

ZENG GE

|
31 installs
| (0) | Free
A simple assembler for 6502/65816
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Zeng Ge's Assembler

English Version

一个可扩展的编译器平台,目前支持 6502 65816(感谢Thirteen),将来会加入更多适应平台

配置文件,当打开汇编文件会在目录下的 .vscode 目录创建 project-settings.json 文件,默认以下配置

{
    "platform": "6502",         // 选择平台,参照以上可用平台即可
    "intellisense": true,       // 是否开启智能提示
    "entry": "main.asm",        // 入口文件
    "compileTimes": 2,          // 编译次数,至少两次,否则回出错
    "outputEntryFile": "",      // 输出入口文件,不写则不输出
    "outputSingleFile": "",     // 单个文件输出,不写则不输出
    "copyToClipboard": true,    // 结果是否复制到剪贴板
    "patchFile": "",            // 匹配文件直接写入,建议备份原文件
    "includes": ["**/*.asm"],   // 包含的文件
    "excludes": []              // 排除的文件
}

功能介绍

编译

在asm文件下的编辑器内,点击鼠标右键则会出现编译菜单。

标签

在这个版本增加了子标签的功能,可以使用例如 player.x player.y 这样的子标签,并且智能提示能更好的协助你。 按vscode的查找定义快捷键(默认F12)可直接找到标签定义位置。

子标签

局部标签

若文件内使用标签(非编译器指令)以.(点)开头,则该标签的有效范围仅仅于本文件。 这样有利于可以在不同文件使用相同名称的标签。

数据组

:(冒号),详情请参阅编译器指令的 .DBG .DWG .DLG .ENDD 命令。

注释

;(分号),后面的文字用于注释,这里提供了新的功能:折叠。 折叠功能以 ;+... 开始, ;-... 结束,同样,折叠会被视为注释,但是这里可以把代码进行折叠,这样可以省略一些可以不需要查看的代码。

折叠功能

简易标签

当标签以全部是+号或全部是-号的时候,则是特殊标签。例如:

--      LDA $2002
        BPL --
        LDA $0
        BEQ +
        BPL ++
        JMP $9000
+       JMP $8000
++      JMP $A000
        ; AD 02 20 10 FB A5 00 F0 05 10 06 4C 00 90 4C 00 80 4C 00 A0 

编译器命令 (不区分大小写,以下以6502为例)

.BASE

注意:编译自上而下,一些第一次编译需要赋值的变量如果第一次编译未知则编译不成功。 设置生成文件地址,默认为.BASE 0,这里不等同与.ORG。 例如:若.BASE $10,则生成的文件编译内容从$10开始写入,之前的$F个地址为0。 注意:如果使用.BASE命令,则在.ORG之后,否则编译错误。


.ORG

设置开始编译地址,例如:.ORG $8000,则编译将从$8000开始。 也可以使用.ORG *,表示从当前地址开始编译。不过要知道当前地址,否则编译器报错。

注意:如果使用 .BASE 命令,则在 .ORG 之后,否则编译错误。


.DEF

定义一个常量,例如:.DEF idefined $12

注意:temp = $12虽然也能定义,用等号可重复定义。


.DB

表示字节,后可以写多个字节。 若字节大于$FF(255),则编译器会报错 例如:

    .DB $40, 40, @01010010, >address

.DW

表示双字节,先低位再高位。 若双字节大于$FFFF(65535),则编译器会报错 例如:

    .DW $40, 60000, @01010101, address

.DL

表示4字节,先低位再高位。 用法同上。


.DBG .DWG .DLG .ENDD

数据组,用于定位数据位置。 例如:

    .DWG data
	.data1, .data2, .data3, .data1
	.ENDD

	LDA data:.data1		;0
	LDA data:.data3     ;2
	LDA data:.data1:1	;3

.HEX

生成一段16进制数据,可以用空格隔开。 注意:之后只能输入16进制数据,否则编译器会报错。 例如:

    .HEX 12 34567 89

生成结果为 12 34 56 07 89


.IF .ELSEIF .ELSE .ENDIF

这里是一套判断条件,根据条件是否成立是否编译相应内容。 注:必须要在使用这些之前知道参数的信息,否则编译报错 例如:

    .IF a == 5
    ...
    .ELSEIF b >= 5
    ...
    .ELSEIF c != 3
    ...
    .ELSE
    ...
    .ENDIF

.IFDEF .IFNDEF

这里是一套判断条件,根据条件是否成立是否编译相应内容。 用法同 .IF 的命令类似,后面可以用 .ELSE .ENDIF 这里是判断变量是否存在,.IFDEF为判断变量是否存在,.IFNDEF为判断变量是否不存在。

注:必须要在使用这些之前知道参数的信息,否则编译报错


.INCBIN

可以读取引用文件的二进制内容,后面双引号内请填写本文件的相对路径。 例如:

    .INCBIN "文件夹\文件.bin" FileStartPoint ReadLength

.INCLUDE

可以引用文件,后面双引号内请填写本文件的相对路径。 如果引用文件内也有引用文件,请相对于主编译文件路径填写。 例如:

    .INCLUDE "文件夹\文件.65s"。

.MACRO .ENDM

用这里的指令可以自定义函数,所要使用的函数要在编译之前定义好,否则编译器会报错。

所有自定义函数内的标签属于局部变量,请勿在函数外部使用。 例如:

    .MACRO 参数名 参数1,参数2,参数3... (注:参数个数不限,也可以没有参数,参数之间用逗号隔开)
    ...
    .ENDM

如下方法调用: 参数名 参数1,参数2,参数3...

实例1:

    .MACRO TXY
    TXA
    TAY
    .ENDM

    TXY

编译之后结果为:8A A8

实例2:

    .MACRO test a,b
    .IF 3 == a
    LDA 3
    .ELSEIF 4 == a
    LDX 4
    .ELSEIF 5 == a && 5 == b
    LDY 5
    .ELSE
    LDA 6
    STA 6
    .ENDIF
    .ENDM

    test 3,3
    test 4,3
    test 5,4
    test 5,5

编译之后结果为:A5 03 A6 04 A5 06 85 06 A4 05


.REPEAT .ENDR

可以重复某个指令多次,在 .REPEAT 后输入表达式即可。 注意:每个 .REPEAT 和 .ENDR 必须成对出现,可以嵌套。 例如:

    .REPEAT 2
    NOP
    .REPEAT 3
    ASL
    .ENDR
    .ENDR

对应编译的结果相当于:NOP ASL ASL ASL NOP ASL ASL ASL

  • Contact us
  • Jobs
  • Privacy
  • Terms of use
  • Trademarks
© 2022 Microsoft