Что делает этот пролог / эпилог функции ассемблера с помощью rbp / rsp / exit?
Я только начинаю изучать ассемблер для Mac, используя компилятор GCC для сборки моего кода. К сожалению, есть ОЧЕНЬ ограниченные ресурсы для обучения, как это сделать, если вы новичок. В конце концов мне удалось найти простой пример кода, который я мог бы начать набрасывать на голову, и я получил его для правильной сборки и запуска. Вот код:
.text # start of code indicator.
.globl _main # make the main function visible to the outside.
_main: # actually label this spot as the start of our main function.
push %rbp # save the base pointer to the stack.
mov %rsp, %rbp # put the previous stack pointer into the base pointer.
subl $8, %esp # Balance the stack onto a 16-byte boundary.
movl $0, %eax # Stuff 0 into EAX, which is where result values go.
leave # leave cleans up base and stack pointers again.
ret
Комментарии объясняют некоторые вещи в коде (я вроде понимаю, что делают строки 2 - 5), но я не понимаю, что означает большинство из этого. Я понимаю основы того, что регистры и что каждый регистр здесь (,,rbp
rsp
esp
а такжеeax
) используется для и насколько они велики, я также понимаю (в общем), что такое стек, но это все еще идет над моей головой. Может кто-нибудь сказать мне точно, что это делает? Кроме того, кто-нибудь может указать мне в направлении хорошего учебника для начинающих?