2013-02-13 39 views
1

地址有一段代码如下:我怎样在寄存器存储在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阵列“MYVAR”(这是1的最后一个元素的地址), 我怎么做 ?

回答

2

我的精神编译器输出Intel语法,而不是在& T的,但你应该得到的想法:

lea eax, myvar + 12 

EAX现在有值“1”的地址。

+2

的Intel Inside。哈哈 – Dacto 2013-02-13 00:49:00

+0

谢谢,需要检查什么是在AT&T语法相当于lea,我想这是movl,但不知道 – mrashok 2013-02-13 00:59:37

+0

lea在at&t语法支持 - 我知道:) – 2013-02-13 01:01:34

0

好吧,我得到它,我们可以使用$ 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