-
Notifications
You must be signed in to change notification settings - Fork 0
/
ejercicio18.txt
134 lines (119 loc) · 6.57 KB
/
ejercicio18.txt
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
;;; 5.18.- Dado un vector formado por elementos numéricos naturales, del que se
;;; conocen la dirección de su primer elemento y la dirección del ultimo elemento,
;;; determinar si el mismo contiene un valor numérico que se conoce como dato.
;;; Si el valor dado se encuentra una sola vez, indicar la posición del mismo dentro
;;; del vector. Si se encuentra más de una vez, indicar la posición en que se lo
;;; encontró por primera vez y la cantidad de veces que se repite dicho elemento.
;;; Si no se lo encuentra, indicar dicha circunstancia de alguna forma visible.
ROM EQU $C000
RWM EQU $0000
RESET EQU $FFFE
LCD EQU $1040
ORG RWM
dirIni RMB 2
dirFin RMB 2
dirDato RMB 2
dirInterior RMB 2
contadorD RMB 2
dato RMB 1
contador RMB 1
encontrado RMB 1
auxFin RMB 1
;;; Explicacion:
;;; En dirDato almacenamos la dirección de memoria fisica que contiene al dato
;;; En dirInterior almacenamos la dirección interior del vector que contiene al dato
;;; tomando como posicion inicial interior del vector la $0000 en adelante...
;;; Direccion fisica != Direccion interior del vector
;;; Usamos contadorD para calcular esa direccion interior
;;; dato es el valor dato que nos da el ejercicio.
;;; contador nos indica cuantas veces se repitio el dato en el vector.
;;; encontrado si esta en 1 quiere decir que lo encontro, si esta en 0 no lo encontro.
;;; auxFin nos indica si es la ultima que leemos o no (si esta en 1 es la ultima, si esta en 0 no).
;;; Si no se encontro el dato sale por LCD (Dispositivo I/O) un aviso.
ORG ROM
Init:
CLRA ;;; MODO REGISTRO DIRECTO
CLRB ;;; MODO REGISTRO DIRECTO
STAA contador ;;; MODO ABSOLUTO DIRECTO
STAA auxFin ;;; MODO ABSOLUTO DIRECTO
STAA encontrado ;;; MODO ABSOLUTO DIRECTO
STD contadorD ;;; MODO ABSOLUTO DIRECTO
Main:
LDX #dirIni ;;; MODO INMEDIATO
Loop:
XGDX ;;; MODO REGISTRO DIRECTO
CPD #dirFin ;;; MODO INMEDIATO
XGDX ;;; MODO REGISTRO DIRECTO
BEQ LlegoDirFin ;;; MODO RELATIVO
Continuar:
LDAA 0,X ;;; MODO INDEXADO
CMPA #dato ;;; MODO INMEDIATO
BEQ EsIgual ;;; MODO RELATIVO
RetornoEsIgual:
LDAA auxFin ;;; MODO ABSOLUTO DIRECTO
CMPA #1 ;;; MODO INMEDIATO
BEQ PreFin ;;; MODO RELATIVO
INX ;;; MODO REGISTRO DIRECTO
INC contadorD ;;; MODO ABSOLUTO DIRECTO
BRA Loop ;;; MODO RELATIVO
fin BRA fin ;;; MODO RELATIVO
LlegoDirFin:
LDAA #1 ;;; MODO INMEDIATO
STAA auxFin ;;; MODO ABSOLUTO DIRECTO
CLRA ;;; MODO REGISTRO DIRECTO
BRA Continuar ;;; MODO RELATIVO
EsIgual:
;;; nos fijamos primero si ya se habia encontrado antes
LDAA contador ;;; MODO ABSOLUTO DIRECTO
CMPA #0 ;;; MODO INMEDIATO
BEQ PrimeraVez ;;; MODO RELATIVO
RetornoPrimeraVez:
INCA ;;; MODO REGISTRO DIRECTO
STAA contador ;;; MODO ABSOLUTO DIRECTO
CLRA ;;; MODO REGISTRO DIRECTO
BRA RetornoEsIgual ;;; MODO RELATIVO
PrimeraVez:
;;; en el acumulador 'A' esta el valor de contador
PSHA ;;; MODO REGISTRO INDIRECTO
LDAB #1 ;;; MODO INMEDIATO
STAB encontrado ;;; MODO ABSOLUTO DIRECTO
LDD contadorD ;;; MODO ABSOLUTO DIRECTO
STD dirInterior ;;; MODO ABSOLUTO DIRECTO
XGDX ;;; MODO REGISTRO DIRECTO
STD dirDato ;;; MODO ABSOLUTO DIRECTO
XGDX ;;; MODO REGISTRO DIRECTO
PULA ;;; MODO REGISTRO INDIRECTO
BRA RetornoPrimeraVez ;;; MODO RELATIVO
PreFin:
LDAA encontrado ;;; MODO ABSOLUTO DIRECTO
CMPA #1 ;;; MODO INMEDIATO
BEQ fin ;;; MODO RELATIVO
LDAA #78 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #79 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #32 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #69 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #78 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #67 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #79 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #78 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #84 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #82 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #65 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #68 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
LDAA #79 ;;; MODO INMEDIATO
STAA LCD ;;; MODO ABSOLUTO DIRECTO
BRA fin ;;; MODO RELATIVO
ORG RESET
DW ROM