Así que estoy tratando de aprender un poco de ensamblaje, porque lo necesito para la clase de Arquitectura de Computadoras. Escribí algunos programas, como imprimir la secuencia de Fibonacci.
Reconocí que cada vez que escribo una función uso esas 3 líneas (como aprendí al comparar el código ensamblador generado a partir de gcc
a su C
equivalente):
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
Tengo 2 preguntas al respecto:
- En primer lugar, ¿por qué necesito usar
%rbp
? ¿No es más fácil de usar?%rsp
ya que su contenido se traslada a%rbp
en la 2da linea? - ¿Por qué tengo que restar algo de
%rsp
? Quiero decir que no siempre16
cuando yo eraprintf
ing como 7 u 8 variables, luego restaría24
o28
.
Uso Manjaro de 64 bits en una máquina virtual (4 GB de RAM), procesador Intel de 64 bits
Olvidaste habilitar la optimización. En cuanto a la cantidad a restar, eso depende de los requisitos de alineación y si puede usar la zona roja.
– bufón
28 de enero de 2017 a las 17:44
@Jester Habilitar la optimización no significa necesariamente que la omisión del puntero de cuadro también se habilitará
–Govind Parmar
28 de enero de 2017 a las 17:49
Posible duplicado de ¿Qué es exactamente el puntero base y el puntero de pila? ¿A qué apuntan?. IOW es lo mismo que en el código x86_32.
– Jongware
28/01/2017 a las 17:50
@GovindParmar depende del compilador, pero usted mismo adivinó gcc, dónde lo hace. Además, restar de rsp sin motivo (que OP insinúa) también dice que no hay optimización.
– bufón
28 de enero de 2017 a las 17:53
Posible duplicado de ¿Cuál es el propósito del registro de puntero de cuadro EBP?
– phuclv
11 de junio de 2018 a las 9:39