コード:
%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
。