【问题标题】:Array addressing in AT&T GAS assemblyAT&T GAS 组件中的数组寻址
【发布时间】:2013-05-31 09:07:06
【问题描述】:

我正在为 C 的一个子集构建一个编译器,现在我正在处理数组。假设我有以下内容:

int main() {
    int x[3];
    x[0] = 1;
    x[1] = 3;
    x[2] = 4;
}

在汇编中,分配是这样的:

movl    $1, -12(%ebp)
movl    $3, -8(%ebp)
movl    $4, -4(%ebp)

到目前为止,一切都很好。现在,如果我想访问存储在%ebx 中的任意位置,我应该怎么做?我一直在阅读this wikibook,但我不太了解语法。

我尝试了以下方法,但似乎不起作用:

# Suppose I want to do x[1] = 5
movl $1, %ebx

movl $5, -4(%ebp, %ebx, 4)

我错过了什么?

【问题讨论】:

    标签: arrays assembly gnu-assembler att


    【解决方案1】:

    问题是数组的 base 不是-4(%ebp) 而是-12(%ebp)(因为这是放置第一项的位置)所以索引应该是这样的:

    movl $1, %ebx
    movl $5, -12(%ebp, %ebx, 4)
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2012-03-30
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多