2017-11-29 17 views
0

nasm x86アセンブラで[]を使用してアドレスを操作する方法を理解したいと思います。この構文は、nasm x86アセンブリ言語の意味(MOV [EBX]、110)は何ですか?

MY_TABLE TIMES 10 DW 0 ; Allocates 10 words (2 bytes) each initialized to 0 
MOV EBX, [MY_TABLE]  ; Effective Address of MY_TABLE in EBX 
MOV [EBX], 110   ; MY_TABLE[0] = 110 
ADD EBX, 2    ; EBX = EBX +2 
MOV [EBX], 123   ; MY_TABLE[1] = 123 

MOV EBX、[MY_TABLE] - ここでEBXにコピーEBXレジスタまたはMY_TABLEのアドレスにコピーMY_TABLEの値がレジスタ? []がそれ

MOV [EBX]、110の内側に指定されたアドレスの値を与えるので、私はこれを求めています - ここでは何が起こるか、私は構文を理解することはできません!

+1

EBXが指すアドレスに110を移動します。しかし、NASMには有効なNASMコードではないデフォルト設定(見つからない)がない限り、NASMは明示的なオペランドサイズを必要とします(良いアセンブラのように)。 –

+0

サイズを知ることができます(MY_TABLEは単語サイズとして定義されています)。 'MOV [EBX]、110 'はあいまいです。この場合、アセンブラは何をしますか? – Tommylee2k

+1

line2のコメントが間違っています。実効アドレスをロードするには、LEA(ロード実効アドレス)が正しいでしょう。 (または 'MOV EBX、offset My_table'を使って)。これはアドレスmy_tableの内容をEBX(最初の2つの値、ebxは32ビット、my_tableは16のバイト値)に移動します。 – Tommylee2k

答えて

0

あなたはこの

mov EBX,[MY_TABLE] 

がEBXに実効アドレスをロードすることを読み込みます3.3 - Effective address特に章nasmドキュメントを確認してください。その後、値110と123を要素(インデックス0と1)に入れるために使うことができます。 、NASMと

mov word [EBX], 110 
... 
mov word [EBX], 123 
+1

'mov EBX、[MY_TABLE]' movesアドレスではなくMy_tableに格納されているものからのコンテンツ。 LEAがアドレスをロードするか、 'mov EBX、offset MY_TABLE' – Tommylee2k

+0

一般に私は同意しますが、' nasm'にはそのためのショートカットがあると思います: "NASMの実効アドレスは非常に単純な構文です:角かっこで囲まれた希望の住所に評価します。 –

+0

@ Pawel Lukasik、mov EBX、[MY_TABLE]。 MY_TABLEの実効アドレスをロードするか、MY_TABLEが指すメモリ内容をロードします。 –

3

ダウンロード最後のパッケージを、それを開いて、あなたが短い含まれているファイル「nasm.txt」を持っている:コメントで述べたようしかし、あなたはそれがこのように行くべきオペランドのサイズが欠けていますNasmの使用についてのリファレンス。角括弧が使用されない限り、このファイルに「シンボル参照はいつも、(すなわち、シンボルのアドレス )即時であるために、次の文

メモリ位置の内容 がされた場合には理解されています中古。したがって:

mov ax,wordvar 

可変wordvarのアドレスをロードAX、

mov ax,[wordvar] 
mov ax,[wordvar+1] 
mov ax,[es:wordvar+bx] 

一方、全てのメモリ・ロケーションの '内容' を参照。

+0

ポインタをレジスタとして使用すると(私がoldfashionのように見える) "offset"を追加するのに使うことができます( 'mov ax、wordvar'ではなく' mov ax、offset wordvar')。非常にひどい - MASM構文)。オフセットはコンテンツを意味するのではなく、アドレスを意味することを明確にします。 – Tommylee2k

+0

@ Tommylee2k:NASMでこれを行うには、NASMキーワードではないので、空の文字列に '%define OFFSET'を設定する必要があります。しかし、特にMASMやGNU '.intel_syntax'を使って作業する場合には、それは悪い考えではありません。 –

関連する問題