首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用68000汇编语言定义枚举?

如何用68000汇编语言定义枚举?
EN

Stack Overflow用户
提问于 2020-02-14 16:44:20
回答 2查看 195关注 0票数 1

我使用的汇编程序与Manx Aztec C编译器(5.0版)上的商品Amiga 500。

我想编写与以下C代码相当的代码:

代码语言:javascript
复制
enum STATUS {
    STATUS_OKAY,
    STATUS_WAITING,
    STATUS_ERROR
};

我试过以下几种方法--这是可行的--但它似乎有点无足轻重:

代码语言:javascript
复制
s_id            set 0
STATUS_OKAY     equ s_id
s_id            set s_id+1
STATUS_WAITING  equ s_id
s_id            equ s_id+1
STATUS_ERROR    equ s_id

我知道我能做到:

代码语言:javascript
复制
STATUS_OKAY    equ 0
STATUS_WAITING equ 1
STATUS_ERROR   equ 2

但是,我希望能够插入和重新排列值,而不必手动重新编号。

我在想,我也许可以用宏做些什么,但我对它们没有太多的经验。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-15 07:13:32

我猜您会想要编写一个宏,可以像AUTONUMBER s_id STATUS_OKAY那样使用,它需要两个args:第二个是要定义的符号名,第一个是用于增量的计数器。

你会希望它扩展到这样的东西:

代码语言:javascript
复制
STATUS_OKAY     equ s_id
s_id            set s_id+1    # post-incr so it uses the initial value of s_id

(我不知道用于定义宏的汇编程序或它的语法;我认为这是可能的。)

有些汇编程序有一个特殊的宏指令,用于重新定义预处理常量,允许您增加。NASM不适用于foo equ foo+1,你需要%define。您在大部分行中使用了s_id set s_id+1,但在最后一行中使用了equ,所以这可能只是一个错误。

因此,完全使用如下所示:

代码语言:javascript
复制
s_id  set 0       # starting value
AUTONUMBER s_id  STATUS_OKAY
AUTONUMBER s_id  STATUS_WAITING
AUTONUMBER s_id  STATUS_ERROR

我把计数器名放在第一位,因为每次都是相同的长度(而且很短)。把它放在第二,需要更多的缩进,以避免衣衫褴褛的列。它把这条线的独特部分放在一端,在那里它在视觉上更明显。

票数 1
EN

Stack Overflow用户

发布于 2020-02-19 01:03:49

在Peter Cordes的建议之后,我提出了以下宏,这个宏非常有用:

代码语言:javascript
复制
        macro   ENUM
\2      set     \1
\1      set     \1+1
        endm

s_id    set     0
        ENUM    s_id,STATUS_OKAY
        ENUM    s_id,STATUS_WAITING
        ENUM    s_id,STATUS_ERROR
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60230399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档