【问题标题】:x86 array declaration with multiple 'DUP' - what does it do?具有多个“DUP”的 x86 数组声明 - 它有什么作用?
【发布时间】:2014-02-11 14:58:09
【问题描述】:

我正在研究 x86 汇编,我遇到了这样的声明:

array1 DB 5 DUP(2 DUP('*'))

这个声明有什么作用?

  1. 为名为@9​​87654322@、大小为DB * 5 * 2 = 10 和10 个* 元素的数组分配空间。

  2. 为名为@9​​87654325@、大小为DB * 5 和5 个** 元素的数组分配空间。这意味着有 5 个* 元素被丢弃。

  3. 分配一个名为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


【解决方案1】:

根据 cmets,声明在内存中分配了一个具有 10 个连续 * 字符字节的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多