x86 Ассемблеру нужен ли putchar адрес в стеке? - PullRequest
0 голосов
/ 09 мая 2018

Моя задача - поместить локальную переменную в самый низкий адрес в стеке. У меня есть только 1 локальная переменная, и это мой счетчик 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.

Так сколько байт мне нужно хотя бы?

Заранее спасибо.

...