summaryrefslogtreecommitdiff
path: root/tb/sim/tarea2.S
blob: c37267257bcfd95c7016063c74b309ca424ed07e (plain)
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
36
37
38
39
40
41
42
43
44
@ Tarea 2, CE3201 Taller de Diseño Digital
@ Alejandro Soto Chacón, 2019008164

.global fibonacci
fibonacci:
	mov   r0, #0x150
	ldr   r0, [r0]
	mov   r1, #0x200
	mov   r2, #1
	mov   r3, #1
	mov   r4, #0
	tst   r0, r0
	beq   .end
	ldr   r6, =10000 @ Relativo a PC
	.loop:
	add   r5, r2, r3
	add   r4, r4, r2
	str   r2, [r1], #4
	mov   r2, r3
	mov   r3, r5
	cmp   r4, r6
	bhi   .end
	subs  r0, r0, #1
	bne   .loop
	.end:
	mov   r5, #0x100
	str   r4, [r5], #4
	mov   r4, #0xff
	mov   r6, #0xaa
	@ Necesariamente se cumple alguna de las dos condiciones
	@ ya que una es la opuesta de la otra
	strhi r4, [r5]
	strls r6, [r5]
	mov   pc, lr

@ Punto de entrada, requerido ya que el simulador solamente es capaz
@ ed establecer condiciones iniciales de registros, no de memoria.
@ En este caso se pasa el número de iteraciones en r0 y el stub lo
@ escribe en la posición correcta.
.global reset
reset:
	mov r1, #0x150
	str r0, [r1]
	b   fibonacci