AT&T GAS组件中的阵列寻址。来自 RIP 的寄存器偏移量不起作用



我正在尝试使用GNU汇编中的数组。在我看来,以下代码必须以值 3 退出。但它以 13 退出。

.section __DATA,__data
  inArr:
    .word 13, 2, 3, 4, 5, 6, 7, 8, 9, 10
  outArr:
    .fill 10, 2
.section __TEXT,__text
.globl _main
_main:

  movq $3, %rcx
  movw inArr(%rip, %rcx, 2), %di  # load  *((rcx * 2)+ rip + &inArray) into %di, isn't it?
  movl $0x2000001, %eax           # exit
  syscall

在我看来movw inArr(%rip, %rcx, 2), %di命令相当于%di = inArr[%rcx].不幸的是,我在 GAS 中找不到任何带有数组的示例。

该代码有什么问题?我该如何解决数组的第 n 个元素?

没有索引 RIP 相对寻址模式这样的东西。您的汇编程序应该给出一个错误。请改用这个:

    lea inArr(%rip), %rdi
    movzwl (%rdi, %rcx, 2), %edi

最新更新