Algunos ejemplos del ensamblador del ARM

Anuncio
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}
Descargar