assembly x86汇编语言中的内存分配

rjjhvcjd  于 2023-02-19  发布在  其他
关注(0)|答案(2)|浏览(160)

昨天我学习了SIZEOF和TYPE操作符。在学习的时候,我创建了一个数组,

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

在代码部分,我写道,

MOV eax, SIZEOF Array

组装完后,我发现数组只分配了28个字节(使用visual studio community 2015),我在调试会话中看到了寄存器的值。
我的问题是,每个QWORD占用8个字节的内存。那么,为什么我没有得到40的SIZEOF数组呢?
更糟的是。当我运行这个的时候,

Array QWORD 1h

它给了我8个字节

Array QWORD 1h,2h

给我10 ...!!还有,

Array QWORD 1h,2h,3h

给我18 ...!!
等等...

mspsb9vt

mspsb9vt1#

默认情况下,Visual Studio的注册表窗口显示十六进制数。您是否将28与0x28混淆了?0x28与40相同。(类似地,0x10是16,0x18是24,依此类推。)

eimct9ow

eimct9ow2#

显然,它是十六进制的。在加上1h和2 h之后,计算总字节数之间的数字,我们得到8-9-A-B-C-D-E-F-10。如果您想将十进制转换为十六进制,以真正在x86编程中获得优势,我建议将十进制数反复除以16,然后按小端顺序排列余数,得到大端十六进制数(对于10-15的结果,一定要写A-F!)。

相关问题