Ensamblador ARM Introducción al lenguaje ensamblador y repertorio de instrucciones S. Reyes Estructuras de Control Secuencia Condicionales Iteraciones (Bucles) Subrutinas S. Reyes Secuencia a=b+c ADD ra,rb,rc MOV rb,#b LDR rb,b MOV rc,#c LDR rc,c ADD ra,rb,rc ADD ra,rb,rc STR ra,a S. Reyes Condicionales (I) If a=b then c=c+1 CMP ra,rb BNE end ADD rc,rc,#1 end ... S. Reyes CMP ra,rb ADDEQ rc,rc,#1 Condicionales (II) If a<0 then s=0 else s=1 CMP ra,#0 BLT then MOV rs,#1 BAL end then MOV rs,#0 end ... S. Reyes TEQ ra,#0 MOVMI rs,#0 MOVPL rs,#1 Bucles (repeat) repeat ... until a=b repeat ... CMP ra,rb BNE repeat S. Reyes ; until ; a=b Bucles (while) while a<>b ... endwhile while CMP ra,rb BEQ endw ... BAL while endw … S. Reyes ; while a<>b Bucles (for) for (i=0;i<10;i++) {…} Bucle S. Reyes MOV r0,#0 … ADD r0,r0,#1 CMP r0,#10 BNE Bucle ; i=0 ; i++ ; i<10 Subrutinas (Llamada y Retorno) Instrucción de salto con enlace (BL) Para permitir subrutinas anidadas: se guarda en la pila el contenido del registro de enlace (r14) Registro r13: puntero de pila Se termina la subrutina poniendo dirección de retorno en PC (r15) S. Reyes Subrutinas (Ejemplo) Llamada a subrutina para sumar lista de números LDR r1,N LDR r2,Puntero BL SumaL STR r0,SUM S. Reyes ; N: número de sumandos ; Puntero a primer sumando ; Llamada a subrutina ; Guarda resultado Subrutinas (Ejemplo) Subrutina de suma SumaL Bucle S. Reyes STMFD r13!,{r3,r14} MOV r0,#0 ; r0 0 LDR r3,[r2,#4] ; r3 M((r2)+4) ADD r0,r0,r3 ; Suma operando SUBS r1,r1,#1 ; Decrementa pendientes BGT Bucle LDMFD r13!,{r3,r15}