无法使用sdasz80(sdcc汇编程序)使用.define

时间:2018-12-04 08:39:52

标签: assembly z80 sdcc

SDCC的汇编器源自ASxxxx,其中手册在此处描述.define命令:http://shop-pdp.net/ashtml/asxs02.htm#define

由于是派生方式,可能并非所有事物都以相同的方式工作,但是由于命令行参数help讨论了.define(“-b显示清单中的.define替代品”),所以我认为它们在那里。

但是,当我这样做时:

.define ay /-1/

我得到了错误:

g.s:1: Error: <o> .org in REL area or directive / mnemonic error

我尝试过的其他形式包括:

.define ay ^/-1/
.define ay "-1"
.define kword /foo/

所有这些都会导致相同的错误。如果我尝试

.define

错误变为:

g.s:1: Error: <q> missing or improper operators, terminators, or delimiters

虽然我在.blarg上遇到了同样的错误,所以很可能已删除了关键字(为什么?)

我做错什么了吗,还是sdasz80刚刚坏了?

3 个答案:

答案 0 :(得分:2)

胡扯,看来这是他们出于某些原因而删除的功能。 通过SDCC源的github镜像(此处的sdas源:https://github.com/svn2github/sdcc/tree/master/sdcc/sdas)搜索SDCC的asxxxx.h(最近编辑于6年前)具有以下阻止功能:

/*
 *      The def structure is used by the .define assembler
 *      directive to define a substitution string for a
 *      single word.  The def structure contains the
 *      string being defined, the string to substitute
 *      for the defined string, and a link to the next
 *      def structure.  The defined string is a sequence
 *      of characters not containing any white space
 *      (i.e. NO SPACEs or TABs).  The substitution string
 *      may contain SPACES and/or TABs.
 */
struct def
{
        struct def      *d_dp;          /* link to next define */
        char            *d_id;          /* defined string */
        char            *d_define;      /* string to substitute for defined string     */
        int             d_dflag;        /* (1) .defined / (0) .undefined */
};

但据我所知,该结构没有在任何地方使用。

答案 1 :(得分:1)

还要考虑到SDCC附带的sdasz80是ASxxxx的旧版本。实际上,他们随sdasz80一起提供的文档是针对ASxxxx的较新版本的,并且某些功能实际上在所发行的版本中不存在。

如果您需要这些功能和较新的功能,则可以从其网站下载ASxxxx的更新版本。已经有许多较新的版本,包括许多有趣的新功能。最新版本从2019年1月开始:http://shop-pdp.net/ashtml/asxxxx.php

答案 2 :(得分:0)

出于许多目的,您可以使用变量。这将适用于sdasz80(SDCC修订版)

SOME_IO_ADDRESS = 0x32
[...]
LD A, #0xAA
OUT (#SOME_IO_ADDRESS), A