如何在x86上的寄存器中存储地址

时间:2013-02-13 00:38:54

标签: assembly x86

我有一段代码如下:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

lea eax, myvar + 12

eax现在具有“1”值的地址。

答案 1 :(得分: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