web-dev-qa-db-ja.com

x86 asmでの括弧の意味は何ですか?

次のコードを考えます:

L1     db    "Word", 0

       mov   al, [L1]
       mov   eax, L1

括弧([L1])は何を表していますか?

55
joek1975

[L1]は、アドレスL1のメモリ内容を意味します。ここでmov al, [L1]を実行した後、alレジスタはアドレスL1(文字 'w')でバイトを受信します。

46
interjay

[ebp]などのこのタイプのオペランドは、 メモリオペランド と呼ばれます。

ここでの答えはすべて良いですが、厳格なルールとしてこれに従うことの注意事項はありません-ブラケット、次にdereferencelea命令の場合を除きます

leaは上記の規則の例外です。言った

mov eax, [ebp - 4]

ebpの値から4が減算され、括弧は結果の値がアドレスとして取得され、そのアドレスにある値がeaxに格納されることを示します。ただし、leaの場合、括弧は次のことを意味しません。

lea eax, [ebp - 4]

ebpの値から4が減算され、結果の値がeaxに格納されます。この命令は、アドレスを計算し、計算された値をデスティネーションレジスタに保存するだけです。詳細については この投稿 をご覧ください。

35
legends2k

単に、ラベルL1でマークされたアドレスのメモリを取得することを意味します。

Cが好きなら、次のように考えてください:[L1]*L1と同じです

30
Earlz

括弧は、アドレスの参照解除を意味します。例えば

mov eax, [1234]

つまり、アドレス1234の内容をEAXに移動します。そう:

1234 00001

EAXには00001が含まれます。

6
Jason Evans

ダイレクトメモリアドレッシング -alは、メモリアドレスL1

2
John Dibling

レジスタまたは数値の値を移動する代わりにL1をレジスタalに入れ、レジスタ値または数値L1をメモリへのポインタとして使用して、そのメモリアドレスの内容を取得し、その内容をalに移動します。

この例では、L1はメモリの場所ですが、レジスタ名が括弧内にある場合は同じロジックが適用されます。

mov al, [ebx]

ロードとも呼ばれます。

1
Alex Brown

多くのアセンブラー言語と同様に、これは間接指定を意味します。つまり、最初のmovalcontents of L1(バイト'w'つまり、アドレスではありません。

2番目のmovは、実際にeaxaddressL1そして、そのコンテンツを取得または設定するために、後でそれを逆参照できます。

どちらの場合も、L1は、概念的にはアドレスと見なされます。

0
paxdiablo

レジスタ自体に作用するのではなく、レジスタを実際の場所へのポインタとして使用する必要があることを示しています。