2016-12-28 83 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的注册窗口显示十六进制数字。难道是你用0x28弄糊涂28吗? 0x28与40.相同(同样,0x10为16,0x18为24,依此类推。)

+0

谢谢你zneak。寄存器被设置为显示十六进制。我现在改变他们。谢谢..!! – Vasanth

+2

@Vasanth十六进制是默认的,因为它允许你看到特定的字节,所以通过查看'eax'中的''12345678'''你知道'al'是'0x78','ah'是'0x56'和'ax '是'0x5678' ...尝试用十进制...:D – Ped7g

+0

谢谢.. @ Ped7g – Vasanth