[英]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.