Al intentar analizar un archivo de ensamblaje simple generado a través de msp430-gcc, me topé con un conjunto de instrucciones que no entiendo sobre el puntero del marco y el puntero de la pila del MSP430.
Programa C:
#include "msp430g2553.h"
int main()
{
int i;
for(i = 0; i < 3; i++);
}
Directivas de ensamblaje menos:
main:
mov r1, r4 ;Stores address of stack pointer in r4(frame pointer)
add #2, r4 ; ?
sub #2, r1 ; subtract 2 to allocate int i
mov #0, -4(r4) ; assign 0 to i
jmp .L2 ; start loop
.L3:
add #1, -4(r4) ; Adds one to int i
.L2:
cmp #3, -4(r4) ; Compare to #3
jl .L3 ; jump to .L3 if true
add #2, r1 ; deallocate int i
.Lfe1:
.size main,.Lfe1-main
Intenté comentar el código para rastrear la ejecución del programa, pero no entiendo la línea add #2, r4
. ¿Qué sucede exactamente aquí y por qué se hace referencia a int i
en -4(r4)
?