2016-12-28 14 views
4

私は昨日SIZEOFとTYPE演算子について学習していました。ことをやっている間、私はx86アセンブリ言語でのメモリ割り当て

Array QWORD 1h,2h,3h,4h,5h 

と.CODEセクションでは、配列を作成し、私はこれを組み立てた後、

MOV eax, SIZEOF Array 

を書いて、それがビジュアルを使用して(私は唯一の28バイト配列に割り当てられてしまったことを厄介ですスタジオコミュニティ2015)。私はデバッグセッションでレジスタの値を見ました。

ここで私の質問は、各QWORDは8バイトのメモリを占有しています。それでは、どうして私はSIZEOF配列を40にしませんでしたか?

さらに悪いことに、 私はこれを実行し、

Array QWORD 1h 

期待どおりに

Array QWORD 1h,2h 

は私に10を与える私に8つのバイトを与えました..! さらに、

Array QWORD 1h,2h,3h 

私に18を与える!!
...

+0

使用されているアセンブラは何ですか?それに投稿にタグを付ける。そしてタイトルを正確にしてください:-) –

答えて

5

デフォルトでは、Visual Studioの登録ウィンドウには16進数が表示されます。 28を0x28と混同している可能性はありますか? 0x28は40と同じです(同様に0x10は16、0x18は24など)

+0

ああ、ありがとうございます。レジスタは16進数を表示するように設定されていました。私は今それらを変更する。感謝.. !! – Vasanth

+2

@Vasanth hexはデフォルトであるため、特定のバイトを見ることができるので、 '' 12345678 ''' eax'を見ると 'al'は' 0x78'、 'ah'は' 0x56'、 'ax' 'は' 0x5678'です... 10進数で試してください:D – Ped7g

+0

ありがとうございます.. @ Ped7g – Vasanth