Estoy tratando de entender lo malo que es un 'void main (void)' desde el siguiente enlace: notas técnicas . Pero tengo dificultades para entender dos ejemplos de lenguajes de ensamblador, el primero se muestra a continuación:
int main(void)
{
return 42;
}
|main|:
mov ip,sp
stmfd sp!,{rfp, fp, ip, lr, pc}
sub fp,ip,#4
cmps sp,sl
bllt |x$stack_overflow|
bl |__main|
mov r0,#42
ldmdb fp,{rfp,fp,sp,pc}^
He encontrado algunas explicaciones en Manual de referencia de nivel de aplicación de arquitectura ARM v7-M . así que sé que stmfd es como PUSH aquí. Pero todavía tengo muchas preguntas.
- ¿Por qué llamamos a las primeras seis instrucciones la inicialización y la verificación de la pila?
- ¿Qué significan ip, rfp, fp y sl?
- ¿Por qué sub 4?
- ¿Qué es bllt? Acabo de encontrar bl en el manual de referencia
- ¿De dónde viene 'x $ stack_overflow'?
- ¿Por qué usa ldmdb?
Si me puede dar un tutorial o un manual de referencia sobre los lenguajes de ensamblaje ARM, estaré muy contento. Porque creo que hay otro ejemplo de lenguaje ensamblador más difícil de ese enlace.