x86汇编程序putchar需要堆栈中的地址吗?

时间:2018-05-08 22:06:20

标签: assembly x86 stack putchar

我的任务是将局部变量放在堆栈的最低地址上。我只有一个局部变量,那是我的int计数器。

在下面的代码中,您可以看到我的编译器创建了一个32字节的堆栈,并将局部变量放在地址28(%esp)上:

_main:
pushl   %ebp
movl    %esp, %ebp
andl    $-16, %esp
subl    $32, %esp
call    ___main

movl    $0, 28(%esp)  #int counter = 0;

我现在的问题是:我可以将我的变量放在地址0(%esp)上,因为在代码中的某个地方有一些寄存器被放到这个地址上以便打印出来,就像你在这里看到的那样:

movl    %eax, (%esp)
call    _putchar

现在是最低地址0(%esp)还是4(%esp)? 我很困惑因为这两个地址在我编译这个程序时都有用。

这是第二个函数void add(int z,char * string):

_add:
pushl   %ebp
movl    %esp, %ebp
subl    $24, %esp
...
...
movl    %eax, (%esp)
call    _putchar

此功能中没有局部变量。只有2参数int z和char * string。

那么我至少需要多少字节?

提前谢谢。

0 个答案:

没有答案