У меня есть следующий кусок сборки:
recursive:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
cmpl $0, 8(%ebp)
jne .L6
movl $0, %eax
jmp .L7
.L6:
movl 8(%ebp), %eax
movl (%eax), %eax
movl %eax, -12(%ebp)
movl 8(%ebp), %eax
movl 4(%eax), %eax
movl %eax, (%esp)
call recursive
movl %eax, -16(%ebp)
movl -16(%ebp), %eax
movl -12(%ebp), %edx
leal (%edx,%eax), %eax
.L7:
leave
ret
Когда я пытаюсь нажать% eax вместо того, чтобы перемещать его по адресу mem, где указывает esp, моя программа не работает должным образом. Я думаю, что это связано с размером стека, равным 40, потому что, когда я делаю его 36, он отлично работает с инструкцией push. Однако я не понимаю, почему это важно, потому что все адреса памяти, которые я использовал в сборке, относятся к esp и ebp.