-
Notifications
You must be signed in to change notification settings - Fork 0
/
detectar_sentido.s
35 lines (30 loc) · 1.11 KB
/
detectar_sentido.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@;
@; Author: Santiago Romaní Also
@;
@; detectar_sentido: verifica el sentido de movimiento dadas dos fases
@; consecutivas, utilizando los vectores globales s_derecha y s_izquierda
@; Parámetros:
@; char f_ant (R0): fase anterior
@; char f_act (R1): fase actual
@; Resultado:
@; R0 : +1 si derecha, -1 si izquierda, 0 si no coincide con ningún
@; sentido.
detectar_sentido:
push {r2, r3, lr}
ldr r2, =s_derecha
ldrb r3, [r2, r0] @; R3 = s_derecha[f_ant]
cmp r1, r3
bne .Lno_derecha @; if (f_act = s_derecha[f_ant])
mov r0, #1 @; return(1);
b .Lfin_detectar_sentido
.Lno_derecha: @; else
ldr r2, =s_izquierda
ldrb r3, [r2, r0] @; R3 = s_izquierda[f_ant]
cmp r1, r3
bne .Lno_izquierda @; if (f_act == s_izquierda[f_ant])
mov r0, #-1 @; return(-1);
b .Lfin_detectar_sentido
.Lno_izquierda:
mov r0, #0 @; else return(0);
.Lfin_detectar_sentido:
pop {r2, r3, pc}