如何在使用GAS的子程序中使用lea指令

时间:2014-11-16 15:14:35

标签: arrays assembly stack subroutine gas

我正在尝试将NASM代码转换为GAS。我不能让lea指令工作。

这是我的原始代码,这完全有效:

section .bss
   arr resb 10

section .text
   global _start:

_start:
   push arr
   call getInput
   ...

getInput:
   mov esi, 0
   mov ebp, [esp+4]

   loop:
   ...      
   mov eax, 3
   mov ebx, 0
   lea ecx, [ebp+esi]
   mov edx, 2
   int 80h
   ...

这是我想写的GAS对手:

.data
   arr:     .space 10

.text
  .globl _start

_start:
   push arr
   call getInput
...

getInput:
   movl $0, %esi
   movl 4(%esp,1), %ebp

  loop:
  ...
  movl $3, %eax
  movl $0, %ebx
  leal (%ebp,%esi), %ecx
  movl $2, %edx
  int $0x80

我一直在寻找如何正确地做这件事的几个小时,但我找不到关于这个问题的教程。它在运行时会产生分段错误。请帮帮我。

P.S。我使用这些命令进行编译和链接(感谢此处回答我之前问题的人):

as --32 -o sample.o sample.s
ld -m elf_i386 -o sample sample.o

0 个答案:

没有答案