簡體   English   中英

68000 匯編語言中如何定義枚舉?

[英]How do you define an enumeration in 68000 assembly language?

我在 Commodore Amiga 500 上使用 Manx Aztec C 編譯器(5.0 版)附帶的匯編程序。

我想編寫等效於以下 C 代碼的代碼:

enum STATUS {
    STATUS_OKAY,
    STATUS_WAITING,
    STATUS_ERROR
};

我嘗試了以下方法 - 有效 - 但它似乎有點古怪:

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

我知道我可以這樣做:

STATUS_OKAY    equ 0
STATUS_WAITING equ 1
STATUS_ERROR   equ 2

但我希望能夠插入和重新排列值而無需手動重新編號。

我想我也許可以用宏做一些事情,但我對它們沒有太多經驗。

我猜您想編寫一個可以使用的宏,例如AUTONUMBER s_id STATUS_OKAY需要兩個參數:第二個是要定義的符號名稱,第一個是要遞增的計數器。

您希望它擴展到以下內容:

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 ,所以這可能只是一個錯字。


所以完全使用看起來像:

s_id  set 0       # starting value
AUTONUMBER s_id  STATUS_OKAY
AUTONUMBER s_id  STATUS_WAITING
AUTONUMBER s_id  STATUS_ERROR

我把計數器名稱放在第一位,因為它每次的長度都一樣(而且很短)。 將其排在第二位需要更多的縮進以避免出現參差不齊的列。 它將線條的獨特部分放在一端,在視覺上更明顯。

在 Peter Cordes 的建議之后,我想出了以下宏,效果很好:

        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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM