2017-02-12 3 views
1

私はに対処ダイレクトメモリでは、このhttps://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#General-purpose_registers_.2864-bit_naming_conventions.29ダイレクトメモリと[]

を読んでいることは言う:

.data 
    my_var dw 0abcdh ; my_var = 0xabcd 

.code 
    mov ax, [my_var] ; copy my_var content into ax (ax=0xabcd) 

かしら、もし[]せずに、それは斧に何をコピーしますその値は0xabcdではありませんか?

なぜそれが最初のコンテンツですか? 0xabcdをメモリアドレスとして扱い、アドレス0xabcdに格納されているものを代わりに見てください。

答えて

4

my_varは、いくつかのメモリアドレスを参照シンボルあります。ディレクティブ

my_var dw 0abcdh 

は、ストレージの2つのバイトを割り当てることに価値0abcdhを書き込み、そのストレージの先頭にmy_varポイントをできるように、アセンブラの原因となります。

コメントmy_var = 0xabcdは、変数my_varがこの値を持つことを説明したいと考えています。あなたはグローバル変数を宣言するときにこのことを理解するために、Cのような高級言語でそれを観察し、変数名は常に暗黙的に逆参照されています。それはせずに斧にコピーだろうか

int foo = 1; 
// compiles to 
foo dw 1 

かしら、[]その値が0xabcdでない場合は?

メモリ参照を使用しない場合、シンボルmy_varの値、つまりその変数のアドレスがコピーされます。

なぜ最初のコンテンツですか?メモリアドレスとして0xabcdを扱うべきではなく、代わりにアドレス0xabcdに格納されているものを見るべきでしょうか?

号はあなたが最初0xabcdを取得するためにmy_varのコンテンツを取得してから何を得るために0xabcdからフェッチする必要があるように、2つのメモリアクセスを必要とする、ことを行うにはあります:

mov bx,[myvar] 
mov ax,[bx] 
+0

'メモリ参照を使用しない場合は、シンボルmy_varの値、つまりその変数のアドレスがコピーされます。 ' - これはアセンブリでは、HLLとは異なり、変数がデフォルトでポインタであることを意味しますか? – Kotaa

+0

また、 'mov bx、[myvar]'はmy_varの内容を取得します。しかし、それはこの答えに反するhttp://stackoverflow.com/questions/42050480/storing-a-value-in-a-register-and-when-is-it-address-and-when-pure-value/42050785# 42050785 --- ** .... espの内容をeaxに移動しません。** – Kotaa

+0

@Kotaa(static)変数はメモリです。シンボルはアドレスを参照するため、変数のシンボルは常にその変数のアドレスを参照します。プログラムが開始される前にシンボルが解決されるため、実行時にシンボルの値を変更することはできません。あなたのリンクに: 'esp'はシンボルではなくレジスタです。レジスタには値を含めることができ、これらの値は変更できます。説明は完全に正しいです。 – fuz

1

Kotaa基本的に

mov ax, my_var ; Moves the location of my_var into ax 
mov ax, [my_var] ; Moves the content found at the address of my_var 

質問の2番目のブロックに。 、確かに、my_varは、データの別のブロックへのポインタを保持するようになっていた場合:

mov eax, [my_var] ; Get pointer stored at my_var 
mov ebx, [eax]  ; Get data from pointer whose address is in eax 
+1

注 'そのmov bx、[ax] 'は有効なアドレッシングモードではありません。 – fuz

+0

@fuz - ありがとう、修正済み –

+0

どうすればよいですかhttp://stackoverflow.com/questions/42050480/storing-a-value-in-a-register-and-when-is-it-address-and-when-pure -value/42050785#42050785 --- ** mov eax、[esp] ===> espの内容をeaxに移動しません。** – Kotaa

関連する問題