Что делает этот пролог / эпилог функции ассемблера с помощью 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), но я не понимаю, что означает большинство из этого. Я понимаю основы того, что регистры и что каждый регистр здесь (,,rbprspesp а такжеeax) используется для и насколько они велики, я также понимаю (в общем), что такое стек, но это все еще идет над моей головой. Может кто-нибудь сказать мне точно, что это делает? Кроме того, кто-нибудь может указать мне в направлении хорошего учебника для начинающих?

Ответы на вопрос(1)

Ваш ответ на вопрос