2

我有一段代码如下:

    .section .data
    myvar:
    .long 4,3,2,1

    .section .text
    .globl _start
    _start:
     movl $0, %edi
     movl myvar(,%ed1,4), %eax
     movl $0, %ebx

我想将数组“myvar”的最后一个元素的地址存储在 ebx 中(即 1),我该怎么做?

4

2 回答 2

3

我的心理编译器输出英特尔语法,而不是 AT&T 的,但你应该明白:

lea eax, myvar + 12

eax 现在有 '1' 值的地址。

于 2013-02-13T00:45:16.967 回答
1

好的,我明白了,我们可以使用 $myvar + N

例子:

     .section .data 
      myvar: .long 4,3,2,1
     .section .text
     .globl _start
      _start:
     movl $0, %edi
     movl $myvar+0, %eax 
     movl $myvar+4, %ebx 
     movl $myvar+8, %ecx 
     movl $myvar+12, %edx 
     movl $myvar+16, %edi 
     movl $1, %ebx
     movl $1, %eax
     int $0x80
于 2013-02-13T01:08:03.670 回答