given a a label
L1: db "beat it",10,0
L2:
what is the meaning of:
mov eax,L2
sub eax,L1
登録するL2、およびラベルインクルード文字列からのサブレジスタ
MOV EAX,L2
ラベルが表すアドレスをレジスタに移動します。
MOV EAX,[L2]
そのアドレスから値(メモリの内容)を取得するものとは異なります。
mov eax, L2 - L1
これらのラベル間のバイト数を取得するために、アセンブル時に実行する必要があることを実行時に実行するのは、無意味に非効率的な方法です。sizeof
つまり、定数をハードコーディングする代わりに 、アセンブラに配列を計算させます。
L1_length equ $ - L1
通常、アセンブル時定数を定義するようなことをします。$はNASMでどのように機能しますか?を参照してください。
しかし、とにかく、シンボルは内部にないので[]
(そして、これはNASMであり、Intel構文の他のフレーバーではありません)、L1
即時のオペランドです。シンボルの絶対アドレス(この場合はラベルで定義されます)。
たとえばmov eax, L2
、ラベルの絶対アドレスを命令とともにEAXに入れますmov r32,imm32
。