Моя задача - поместить локальную переменную в самый низкий адрес в стеке. У меня есть только 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.
Так сколько байт мне нужно хотя бы?
Заранее спасибо.