3

x86アセンブリのブラケットを理解したと思いました。この例では、括弧が の現在のアドレスを表しているため、レジスタにaxは が含まれている必要があります。XLABEL

mov ax, [LABEL]

LABEL:
db "X", 0

しかし、次の 2 つのアセンブリ ラインがわかりません。

mov al, [ebx]

なぜブラケットが必要なのですか? ebxレジスタが32ビットaxで16ビットだからでしょうか?違いは何ですか:

mov al, ebx

またはこれ、なぜブラケットが必要なのかわかりません...

mov [edx], ax
4

2 に答える 2

11

ブラケット表記は、レジスタまたはラベルによって「ポイントされる値」にアクセスできるようにするために使用されます。

mov ax, [LABEL]

LABEL:
db "X", 0

でラベル付けされたメモリからのをロードaxしています。この場合、'X' (0x58 ASCII) をの上位バイトとともにレジスタにコピーしています。だから、で、。LABELax0axax = 0x0058ah = 0al = 0x58

LABEL「X」のあるアドレスに が付きます。


これは有効な操作ではありません:

mov al, ebx

この:

mov [edx], ax

axの値を「が指す値」の最初の 2 バイトに移動していますedx。これaxは、16 ビット レジスタでありedx、書き込むべきメモリ アドレスを保持しているだけだからです。

于 2013-04-22T21:36:24.870 に答える