2016-12-28 3 views
4

Вчера я узнал о операторах SIZEOF и TYPE. Делая это, я создал массив,распределение памяти в x86 Язык ассемблера

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

и в .Code разделе я написал,

MOV eax, SIZEOF Array 

После сборки этого, это неудобно, что я получил только 28 байт, выделенные для массива (с помощью визуального студия сообщества 2015). Я видел значения регистров в сеансе отладки.

Мой вопрос здесь, каждый QWORD занимает 8 байт памяти. Тогда почему я не получил SIZEOF Array как 40?

Еще хуже. Когда я запускаю это,

Array QWORD 1h 

он дал мне 8 байт, как и ожидалось

Array QWORD 1h,2h 

дает мне 10 .. !! И

Array QWORD 1h,2h,3h 

дает мне 18 .. !!
И так далее ...

+0

Что используется ассемблер? Пометить сообщение с ним. И сделайте заголовки более точными :-) –

ответ

5

По умолчанию в окне регистрации Visual Studio отображаются шестнадцатеричные числа. Может быть, вы путаете 28 с 0x28? 0x28 совпадает с 40. (Аналогично, 0x10 равно 16, 0x18 равно 24 и т. Д.)

+0

О, спасибо вам, zneak. Регистры были установлены для отображения шестнадцатеричного. Теперь я их изменил. БЛАГОДАРЯ..!! – Vasanth

+2

@ Vasanth hex по умолчанию, потому что он позволяет вам видеть конкретные байты, поэтому, глядя на '' 12345678 '' в 'eax', вы знаете, что' al' '' 0x78', 'ah'' '0x56' и' ax 'is' 0x5678' ... Попробуйте в десятичном ...: D – Ped7g

+0

Спасибо .. @ Ped7g – Vasanth

Смежные вопросы