tutorial registers lenguaje language instruction ensamblador assembly x86

assembly - registers - ¿Por qué se deja "mover esp, ebp" en el ensamblaje x86?



lenguaje ensamblador x86 (3)

Creo que su problema es el hecho de que hay dos formas diferentes de escribir el ensamblaje x86. Una es la notación AT & T y la otra es la notación Intel. El orden de los argumentos de una instrucción se invierte en la notación Intel en oposición a AT & T. Su versión del ensamblado parece estar en notación Intel, lo que significa que mov esp, ebp actaully mueve el valor en ebp a esp . En la notación más lógica (en mi opinión) de AT & T, sería mov %ebp, %esp .

Se dice que la instrucción de leave es lo mismo que:

mov esp,ebp pop ebp

Pero, ¿qué es mov esp,ebp aquí? No me parece válido ...


El compilador utiliza esta instrucción para liberar el espacio utilizado mediante la función en la pila, la instrucción leave tiene el mismo comportamiento que mov esp, ebp con pop ebp .


mov esp,ebp establece el puntero de pila en la dirección de marco base, liberando de manera efectiva todo el marco. (No olvide que esta es la sintaxis de Intel, el destino es lo primero). Si no lo hizo, una vez que llame a ret , aún estaría utilizando el marco de pila de la función llamada con su función de llamada, con consecuencias crashtastic.