Las funciones están directamente relacionadas con la pila. Los parametros se le pasan a las funciones introduciendolos en la pila, ademas al retornar una funcion la dirección a donde tiene que retornar la función también se encuentra en la pila.
La pila se tiene que mantener siempre estable, es decir, si comienza en el valor 0040892 (por ejemplo) siempre tendrá que estar en esa dirección, esa dirección base esta establecida en
rbp, si tu vas metiendo valores en la pila pero no vas restaurandola la pila se rompe y el programa estalla.
pushq %rbp ; Con estas dos intrucciones preservas la pila
movq %rsp,%rbp
; Aqui vendriamos a sacar los parametros de la funciones de la pila y a usarlos
movq %rbp, %rsp ; Aqui volveriamos a restarurar la pila tal y como estaba antes de comenzar la funcion
popq %rbp
ret ; Retornariamos la funcion
Para entenderlo tendrías que leer sobre lenguaje ensamblador ya que esto no ocurre en ningún otro lenguaje.
saludos.