NASM の %define と equ の違いは何ですか? 質問する

NASM の %define と equ の違いは何ですか? 質問する

コード:

%define x 0x03
x equ 0x03

それらの違いは何ですか?

ベストアンサー1

%defineは、C プリプロセッサに似た、マクロを実行するはるかに強力な方法です。単純なケースでは、大きな違いはありません。xソース コードで を使用すると、定数が置換されます。ステートメントは最初に読み込まれたときに 1 回評価されますが、マクロはソースで遭遇するたびに評価される3という微妙な違いがあります。equ%define

2 つのステートメント スニペットの違いがわかります。

addr   equ       $
       %define   addr $

その場合、addrコード内で に遭遇すると、 は異なる値を持ちます。最初のケースでは、$は がある場所のアセンブリ位置の場所になりますequ。言い換えれば、 が定義されました。

2番目のケースでは、アセンブリの場所が次の場所でaddrあると評価されます。使用済み。

次のようなものが光り%defineます:

%define thricexplusy(x,y) (3 * x + y)

または:

%define ctrl(c) (c & 0x1F)
: :
mov     al, ctrl('z')

(またはさらにかなり複雑なもの) を使用すると、単純な では不可能な、マクロにパラメータを渡すことができるようになりますequ

おすすめ記事