2016-12-28 4 views
-4

この命令は何をしますか? [ebx + 0x18]は何をしているのですか? cos ebxはアドレスではありませんので登録してください助けてください^^mov [ebx + 0x18] ecxは何をしますか?

+1

EBXがアドレスを含めることができます... –

+0

それはEBXでアドレスをインクリメントされますか? – assemblerMan

+0

'ebx'が保持するメモリアドレスに' 24 'のオフセットでアクセスしています。 –

答えて

3

私は指示がmov [ebx+0x18], ecxだとしますか?

これはインテルの構文です。角括弧は、内側の値がの逆参照であるかのように、ポインタであるかのように意味します。この場合、定数オフセット0x18ebxレジスタに格納された値に加算され、次にこれはメモリ参照として解釈され、逆参照されます。

したがって、命令はecxに格納された値をebx+0x18が指すメモリにコピーします。 ebxecxレジスタの実際の内容はアドレスebx+0x18ない変性専用メモリである

注意。

3

mov命令は、このようなものです:

mov <destination>, <source> 

だから、ECXと同じ値にレジスタEBXを設定するには、あなたが持っているでしょう:

mov ebx, ecx 

オペランドの周りに括弧が使用することを意味逆参照、すなわち特定のレジスタ内のアドレスを見て、それをソースまたはデスティネーションとして使用します。メモリに場所を設定するには、ECXの値にEBXによってで指さ:

mov [ebx], ecx 

そして最後に、あなたは逆参照する場合、いくつかの基本的な算術演算を行うことができます。だから、ECXの値にEBXによって指さで行わから前方場所0x18(または24)バイトに設定します

mov [ebx + 0x18], ecx 
+0

はバイトまたはビットの0x18オフセットですか? – assemblerMan

+0

@assemblerManどちらもありません。 0x18は単なるオフセットなので、アドレスに追加するとアドレスが生成されます。説明したように、「X + O」は、* X *と* O *(例えば、0x100 + 0x18 = 0x118)の和によって与えられるアドレスを生成する。 x86アーキテクチャでは、どのようなアドレスが表現されていますか?ビット、バイト、単語? –

+0

@assemblerMan Margaretが説明したように、実際には数字を追加するだけです。この場合、アドレスが* byte *の位置を参照していると言うのは安全だと思います。したがって、バイトオフセットはEBXが指す場所から24 *バイト先です。 –

関連する問題