【发布时间】:2014-02-11 14:58:09
【问题描述】:
我正在研究 x86 汇编,我遇到了这样的声明:
array1 DB 5 DUP(2 DUP('*'))
这个声明有什么作用?
为名为@987654322@、大小为
DB * 5 * 2 = 10和10 个*元素的数组分配空间。为名为@987654325@、大小为
DB * 5和5 个**元素的数组分配空间。这意味着有 5 个*元素被丢弃。分配一个名为
array1的多维数组,大小为[5][2]和5个{'*', '*'}元素。
那么,这个声明是否等同于
char array1[10] = {'*', '*', '*', '*', '*', '*', '*', '*', '*', '*'}
还是等价于
char array1[5] = {'*', '*', '*', '*', '*', '*', '*', '*', '*', '*'}
?
或许:
char array1[5][2] = {{'*', '*'}, {'*', '*'}, {'*', '*'}, {'*', '*'}, {'*', '*'}}
?
【问题讨论】:
-
它几乎肯定不等同于任何类型的
int数组,因为DB意味着每个元素都是一个字节。 -
@Michael:哎呀,解决问题
-
我相当肯定大多数汇编语言实际上并没有多维数组的概念。此外,通常,
char array[10]和char array[5][2]将在内存中以相同的方式布局 - 类型差异是高级语言中的抽象。很可能,原始语法旨在确保字节数始终是偶数,以表达字节对数组的概念或其他东西 - 这样您就可以方便轻松地将程序扩展到 37 对.. . -
@twalberg:所以最后分配的空间是10,对吗?
-
@VittorioRomeo:您可以通过在
array1的声明之后直接放置一个标签来检查这一点,然后计算该标签和array1之间的差异(在您的代码中或通过查看地图文件)。
标签: arrays assembly x86 allocation dup