Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
AOC practicas
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
carmuno
AOC practicas
Commits
a92facb8
Commit
a92facb8
authored
Oct 26, 2020
by
carmuno
Browse files
Options
Downloads
Patches
Plain Diff
Prácticas con Fran (se añade practica final)
parent
ff4a6d0e
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
PracticasCarlosSergio/MuñozBastardo_GomezConde(final).asm
+856
-0
856 additions, 0 deletions
PracticasCarlosSergio/MuñozBastardo_GomezConde(final).asm
with
856 additions
and
0 deletions
PracticasCarlosSergio/MuñozBastardo_GomezConde(final).asm
0 → 100644
+
856
−
0
View file @
a92facb8
.data
.align
4
.space
2000
cadena_pedida:
.align
4
.space
2000
cadena_almacenar_polinomio:
.align
4
.space
2000
cadena_almacenar_derivada:
.align
2
.space
2000
error_Overflow:
.ascii
"MAL ENTRADA Error_Overflow"
#
Cadena
para
indicar
que
ha
habido
overflow
en
la
entrada
.align
2
.space
200
error_HI:
.ascii
"MAL ENTRADA Error_HI"
#
Cadena
para
indicar
que
ha
habido
un
error
en
el
HI
en
la
entrada
.align
2
.space
200
error_numero:
.ascii
"
MAL
ENTRADA
Cadena
mal
esp
ecificada
"
#
Cadena
para
indicar
que
la
cadena
ha
si
do
mal
esp
ecificada
por
error
en
el
numero
.align
2
.space
200
error_malderivada:
.ascii
"
MAL
DERIVADA
cadena
mal
derivada
"
#
Cadena
para
indicar
que
ha
habido
overflow
al
derivar
la
entrada
.space
200
.align
2
.space
2000
error_char:
.ascii
"
MAL
ENTRADA
Cadena
mal
esp
ecificada
"
#
Cadena
para
indicar
que
la
cadena
ha
si
do
mal
esp
ecificada
por
un
caracter
no
valido
.align
2
.space
2000
resultado:
.ascii
.align
2
.space
200
Cadenas:
.asciiz
"
Introduzca
el
numero
:
"
#
Cadena
para
solicitar
la
entrada
.align
2
.space
2000
Cadena_guardar_caracteres_reves:
#
Cadena
donde
guardaremos
los
caracteres
al
reves
.align
2
.space
2000
CadenaOrdenada:
#
Cadena
donde
guardamos
los
caracteres
ordenados
.text
Mi_main:
la
$
a0
,
cadena_pedida
#
Cargamos
en
$
a0
la
di
reccion
de
la
cadena
pedida
li
$
a1
,
2000
#
Cargamos
un
2000
en
$
a1
li
$
v0
,
8
#
Cargamos
un
8
en
$
v0
para
leer
el
string
con
una
llamada
al
si
stema
syscall
jal
rellena_vector
bne
$
v0
,
4
,
NoerrorOverflow
la
$
a0
,
error_Overflow
jal
imprime_cadena
j
fin
NoerrorOverflow:
bne
$
v0
,
3
,
noerror_HId
la
$
a0
,
error_HI
jal
imprime_cadena
j
fin
noerror_HId:
bne
$
v0
,
2
,
noerrorchar
la
$
a0
,
error_char
jal
imprime_cadena
j
fin
noerrorchar:
error_tenia_que_ser_numeros:
bne
$
v0
,
5
,
noerrornumero
la
$
a0
,
error_numero
jal
imprime_cadena
j
fin
noerrornumero:
bne
$
v0
,
6
,
no_error_elevado
la
$
a0
,
error_numero
jal
imprime_cadena
j
fin
no_error_elevado:
la
$
a0
,
cadena_almacenar_polinomio
la
$
a1
,
cadena_almacenar_derivada
jal
haciendo_derivada
beq
$
v1
,
1
,
mal_derivada
la
$
a0
,
cadena_almacenar_derivada
jal
hola
move
$
a0
,
$
v0
#
El
$
vo
se
genera
antes
de
la
funcion
'hola'
move
$
a2
,
$
v1
jal
el_antes_resultado_derivada
#
En
es
te
punto
tenemos
los
registros
$
s
de
las
funciones
anteriores
cnoe:
la
$
a1
Cadena_guardar_caracteres_reves
jal
resultado_derivada
beq
$
v0
,
4
noimprime
la
$
a0
,
CadenaOrdenada
jal
imprime_cadena
beq
$
t1
,
1
,
fin
beq
$
t2
,
16
,
fin
jal
remember
noimprime:
addiu
$
t0
,
$
t0
,
-
4
bne
$
t8
,
46
,
cnoe
#
Tras
las
15
iteraciones
acabare
en
un
63
,
porque
empezamos
con
un
48
aprovechando
la
interacia
de
cargar
como
48
el
primero
de
todos
j
fio
mal_derivada:
la
$
a0
,
error_malderivada
#
Cargamos
la
cadena
que
imprime
el
mensaje
de
error
en
la
derivada
jal
imprime_cadena
fio:
fin:
li
$
v0
,
10
syscall
rellena_vector:
addi
$
sp
,
$
sp
,
-
28
sw
$
s4
,
-
28
(
$
sp
)
sw
$
s1
,
-
24
(
$
sp
)
sw
$
s5
,
-
20
(
$
sp
)
sw
$
s3
,
-
16
(
$
sp
)
sw
$
s2
,
-
12
(
$
sp
)
sw
$
s6
,
-
8
(
$
sp
)
sw
$
s7
,
-
4
(
$
sp
)
li
$
t9
,
1
move
$
t0
,
$
a0
bucle:
addiu
$
t9
,
$
t9
,
1
#
Contador
lb
$
t1
,
0
(
$
t0
)
#
Cogemos
el
caracter
de
la
cadena
,
que
sera
un
'+'
,
un
'-'
,
una
'x'
,
una
'X'
,
el
numero
base
o
el
exponente
beq
$
t1
,
43
,
final
beq
$
t1
,
32
,
final
beq
$
t1
,
10
,
sal
beq
$
t1
,
0
,
sal
beq
$
t3
,
1
,
nunca_mas_elevados
beq
$
t1
,
94
,
elevado
#
Una
vez
que
hemos
eliminado
todos
los
caracteres
posibles
,
a
es
ta
zona
solo
acceden
los
numeros
:
#
Una
vez
que
hemos
combrobado
que
no
es
la
'x'
,
la
'X'
,
el
'^'
,
el
'+'
ni
el
'-'
,
solo
puede
ser
el
numero
,
por
lo
que
ah
ora
determinaremos
si
es
el
exponente
o
la
base
nunca_mas_elevados:
bne
$
t3
,
1
,
numero_normal
#
Si
el
anterior
di
gito
(
en
la
anterior
iteracion
)
era
el
'^'
,
entonces
$
t3
se
puso
a
1
y
aqui
dentro
restauramos
el
valor
de
$
t3
#
Entendemos
que
es
te
ya
es
un
numero
porque
va
despues
del
^
pero
puede
no
serlo
asi
que
hay
que
comprobarlo
y
,
en
caso
de
no
ser
un
caracter
entre
0
-
9
,
lanzar
un
error
tratamiento:
#
Rest
auramos
todo
#
bne
$
s3
,
1
,
no_exponenete_1
li
$
t1
,
49
no_exponenete_1:
bne
$
s3
,
2
,
no_exponente_0
li
$
t1
,
48
no_exponente_0:
bgt
$
t1
,
'9'
,
error_tenia_que_ser_numero
blt
$
t1
,
'0'
,
error_tenia_que_ser_numero
#
Si
no
es
un
numero
entre
0
y
9
y
es
otra
'x'
u
otro
si
mbolo
,
lo
manda
fuera
y
captura
el
error
#
Como
es
un
numero
,
entonces
hacemos
el
tratamiento
porque
se
trata
del
numero
para
el
exponente
#
Numero
exponente
#
li
$
t3
,
0
#
Restauramos
el
valor
de
$
t3
para
indicar
que
ya
es
tamos
tratando
el
exponente
#
Entonces
tenemos
en
$
t1
el
exponente
,
que
es
la
posicion
del
vector
donde
poner
la
base
y
en
$
t2
el
numero
asociado
a
dich
o
exponente
la
$
t4
,
cadena_almacenar_polinomio
addiu
$
t5
,
$
t1
,
-
48
#
Tenemos
el
numero
para
al
macenar
la
posicion
en
el
vector
move
$
s6
,
$
t5
beq
$
s3
,
1
,
no_mas
beq
$
s3
,
2
,
no_mas
lb
$
t1
,
1
(
$
t0
)
#
Traemos
el
si
guiente
valor
del
exponente
y
si
vemos
que
tambien
es
un
numero
lo
tratamos
bgt
$
t1
,
'9'
,
no_mas_cifras
blt
$
t1
,
'0'
,
no_mas_cifras
addiu
$
t5
,
$
t5
,
9
#
Sumamos
9
al
numero
para
formar
la
base
addiu
$
s7
,
$
t1
,
-
48
addu
$
t5
,
$
s7
,
$
t5
addiu
$
t0
,
$
t0
,
1
#
Aumentamos
el
puntero
una
vez
para
saber
que
ya
es
tamso
tratando
la
si
guiente
iteracion
beq
$
s6
,
1
,
no_overflow
li
$
v0
,
4
#
No
afectaria
al
codigo
de
negativo
ya
que
es
te
se
coloca
antes
y
se
trata
en
el
numero
(
antes
de
que
entre
en
el
exponente
)
j
sal
no_overflow:
no_mas:
li
$
s3
,
0
#
Restauracion
del
valor
de
$
s3
no_mas_cifras:
blt
$
t5
,
16
,
NO_Overflow_exponente
overrr:
li
$
v0
,
4
#
No
afectaria
al
codigo
de
negativo
ya
que
es
te
se
coloca
antes
y
se
trata
en
el
numero
(
antes
de
que
entre
en
el
exponente
)
j
sal
NO_Overflow_exponente:
mulu
$
t5
,
$
t5
,
4
addu
$
t4
,
$
t5
,
$
t4
#
Apuntamos
a
la
di
reccion
de
memoria
correcta
lw
$
t6
,
0
(
$
t4
)
#
Primero
traemos
el
valor
anterior
al
macenado
en
el
vector
,
y
si
nunca
se
ha
accedido
a
la
posicion
sera
un
0
addu
$
s1
,
$
t6
,
$
t2
#
Cuando
existan
di
stintas
bases
con
el
mismo
exponente
se
suman
y
si
no
tuviera
varios
se
sumaria
el
numero
con
0
bgt
$
t6
,
0
,
si
guinetee
#
Aqui
es
menor
que
0
:
blt
$
t2
,
0
,
menores
j
al
final
menores:
bgt
$
s1
,
0
,
overrr
j
al
final
#
Aqui
no
pasaria
siguinetee:
bgt
$
t2
,
0
,
mayor_00
j
al
final
mayor_00:
blt
$
s1
,
0
,
overrr
alfinal:
sw
$
s1
,
0
(
$
t4
)
#
Metemos
en
la
posicion
$
t1
+
$
t4
del
vector
el
valor
de
$
s1.
#
$
t4
es
la
posicion
inicial
del
vector
y
le
sumamos
el
exponente
que
es
$
t1
para
acceder
a
la
posicion
correcta
li
$
t2
,
0
#
Volvemos
a
actualizar
el
valor
de
$
t2
#
Cuando
se
vuelve
a
pasar
se
pisa
el
valor
de
$
t6
j
final
numero_normal:
#
Nos
referimos
a
la
base
,
no
al
exponente
#
Tiene
que
ir
iterando
aqui
dentro
hasta
que
encuentre
una
'x'
#
li
$
s2
,
0
#
Contador
Buclesss:
#
Seg
undo
bucle
de
pasada
#
lb
$
t1
,
0
(
$
t0
)
#
Si
es
la
primera
vez
que
pasa
por
es
te
bucle
pequenio
y
lo
primero
que
encuentra
es
una
x
,
entonces
el
valor
que
le
das
a
la
base
es
un
1
bne
$
t1
,
45
,
sno
#
Comprobamos
si
$
t1
es
igual
a
45
(
el
guion
en
ASCII
)
para
ver
si
el
numero
es
negativo
li
$
t9
,
1
#
Si
el
numero
ha
si
do
negativo
(
el
primer
caracter
es
un
guion
)
cargamos
un
1
en
$
t9
como
flag
de
es
tado
sno:
bne
$
s2
,
0
,
noesprimeravez
bne
$
t9
,
1
,
si
_no_neg
lb
$
t3
,
1
(
$
t0
)
bne
$
t3
,
120
,
es
_la_otra_X_pregunto
#
Si
tampoco
es
la
'x'
vemos
si
es
la
'X'
j
awi
es_la_otra_X_pregunto:
bne
$
t3
,
88
,
es
_menor_normal
#
Si
tampoco
es
la
'X'
saltamos
awi:
#
Si
es
negativo
:
li
$
t2
,
1
li
$
t3
,
1
add
$
t0
,
$
t0
,
1
#
Aumentamos
en
uno
el
puntero
para
tratar
la
'x'
j
fines
si_no_neg:
bne
$
t1
,
120
,
es
_X_pregunto
#
Si
tampoco
es
la
'x'
vemos
si
es
la
'X'
j
er
es_X_pregunto:
bne
$
t1
,
88
,
noesx
#
Si
tampoco
es
la
'X'
me
piro
er:
li
$
t2
,
1
li
$
t3
,
1
j
fines
noesx:
es_menor_normal:
noesprimeravez:
beq
$
t1
,
32
,
continua
#
Adicion
#
add
$
s2
,
$
s2
,
1
bne
$
s2
,
1
,
pasamos_primera
bne
$
t1
,
45
,
si
gue
#
Comprobamos
si
$
t1
es
igual
a
45
(
el
guion
en
ASCII
)
para
ver
si
el
numero
es
negativo
li
$
t9
,
1
#
Si
el
numero
ha
si
do
negativo
(
el
primer
caracter
es
un
guion
)
cargamos
un
1
en
$
t9
como
flag
de
es
tado
j
es
Negativo
#
Y
saltamos
a
la
etiqueta
es
Negativo
pasamos_primera:
bne
$
t1
,
10
,
si
guesviendo
#
Si
el
si
guiente
caracter
es
una
'x'
,
dejamos
de
iterar
li
$
s3
,
2
#
Si
gnifica
que
es
ta
elevado
a
0
j
tratamiento
siguesviendo:
bne
$
t1
,
43
,
si
guesviendo2
li
$
s3
,
2
#
Si
gnifica
que
es
ta
elevado
a
0
j
tratamiento
siguesviendo2:
bne
$
t1
,
45
,
si
guesviendo3
li
$
s3
,
2
#
Si
gnifica
que
es
ta
elevado
a
0
j
tratamiento
siguesviendo3:
bne
$
t1
,
0
,
si
guesviendo4
li
$
s3
,
2
#
Si
gnifica
que
es
ta
elevado
a
0
j
tratamiento
siguesviendo4:
beq
$
t1
,
120
,
fines
beq
$
t1
,
88
,
fines
sigue:
lb
$
t3
,
1
(
$
t0
)
beq
$
t3
,
43
,
errorChar
#
Si
encuentra
dos
'+'
seg
uidos
tiene
que
dar
un
error
beq
$
t1
,
43
,
continua
#
No
imprime
el
primer
'+'
blt
$
t1
,
48
,
errorChar
bgt
$
t1
,
57
,
errorChar
subi
$
t7
,
$
t1
,
48
#
Resta
al
valor
de
$
t1
48
para
pasar
el
caracter
a
entero
mul
$
t2
,
$
t2
,
10
mfhi
$
t4
#
Cargamos
en
$
t4
el
valor
del
registro
HI
para
comprobar
el
desbordamiento
bne
$
t4
,
$
zero
,
errorHI
#
Si
el
valor
traido
de
HI
es
di
stino
de
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
mflo
$
t5
#
Cargamos
en
$
t5
el
valor
del
registro
LO
para
comprobar
el
desbordamiento
bltz
$
t5
,
errorHI
#
Si
el
valor
traido
de
LO
es
menor
que
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
addu
$
s4
,
$
t7
,
$
t2
#
Hacemos
la
comprobacion
de
la
suma
#
bgt
$
t7
,
0
,
si
guinetee3
#
Aqui
es
menor
que
0
:
blt
$
t2
,
0
,
menores3
j
al
final44
menores3:
bgt
$
s4
,
0
,
overrr
j
al
final44
#
Aqui
no
pasaria
siguinetee3:
bgt
$
t2
,
0
,
mayor_003
j
al
final44
mayor_003:
blt
$
s4
,
0
,
overrr
alfinal44:
move
$
t2
,
$
s4
continua:
esNegativo:
lb
$
t3
,
1
(
$
t0
)
beq
$
t3
,
45
,
errorChar
#
Si
encuentra
dos
'-'
seg
uidos
tiene
que
dar
un
error
#
Solo
se
ejecuta
si
el
numero
es
negativo
#
addiu
$
t0
,
$
t0
,
1
#
Aumentamos
en
uno
al
apuntador
para
"olvidar"
el
si
gno
menos
y
convertir
el
string
a
entero
como
si
fuese
positivo
j
Buclesss
fines:
lb
$
t3
,
1
(
$
t0
)
beq
$
t9
,
1
,
menor
#
Comprueba
el
flag
de
es
tado
de
$
t9
:
#
Si
$
t9
vale
1
es
que
el
numero
es
negativo
,
por
lo
que
salta
a
la
etiqueta
menor
j
otro
#
Salto
incondicional
a
la
etiqueta
otro
si
el
numero
es
positivo
menor:
#
Se
ejecuta
si
el
flag
de
es
tado
indica
que
el
numero
es
negativo
mul
$
t2
,
$
t2
,
-
1
#
Multiplica
por
-
1
el
valor
de
$
t2
para
obtener
definitivamente
el
numero
introducido
en
String
otro:
beq
$
t3
,
32
,
final
bne
$
t3
,
43
,
no_es_mas_el_siguiente
li
$
s3
,
1
j
tratamiento
no_es_mas_el_siguiente:
bne
$
t3
,
45
,
no_es_menos_el_siguiente
li
$
s3
,
1
j
tratamiento
no_es_menos_el_siguiente:
bne
$
t3
,
10
,
no_es_salto_el_siguiente
li
$
s3
,
1
j
tratamiento
no_es_salto_el_siguiente:
bne
$
t3
,
94
,
error_tenia_elevado
lb
$
t3
,
2
(
$
t0
)
beq
$
t3
,
10
,
error_tenia_elevado
j
termino
errorHI:
#
Se
ejecuta
cuando
encuentra
un
error
que
puede
ser
debido
a
varias
causas
li
$
v0
,
3
#
Indica
error
del
HI
o
del
LO
j
sal
errorChar:
li
$
v0
,
2
j
sal
error_tenia_que_ser_numero:
li
$
v0
,
5
j
sal
error_tenia_elevado:
li
$
v0
,
6
j
sal
no_mas_cifras2:
j
final
elevado:
li
$
t3
,
1
#
Cuando
tenemos
el
'^'
esp
eramos
que
la
si
guiente
cifra
sea
el
exponente
,
asi
que
dejamos
es
to
a
1
para
reconocer
que
la
si
guinete
cifra
es
el
exponente
#
Cuando
tratemos
el
exponente
ponemos
$
t3
a
0
de
nuevo
noespacio:
saltox:
positivo:
final:
termino:
lb
$
t1
,
0
(
$
t0
)
#
Cogemos
el
caracter
de
la
cadena
,
que
sera
un
'+'
,
un
'-'
,
una
'x'
,
una
'X'
,
el
numero
base
o
el
exponente
bne
$
t1
,
43
,
no_mirar
lb
$
t1
,
1
(
$
t0
)
#
Cogemos
el
caracter
de
la
cadena
,
que
sera
un
'+'
,
un
'-'
,
una
'x'
,
una
'X'
,
el
numero
base
o
el
exponente
beq
$
t1
,
43
,
errorChar
no_mirar:
addiu
$
t0
,
$
t0
,
1
j
bucle
#
Saltamos
a
bucle
sal:
lw
$
s4
,
-
28
(
$
sp
)
lw
$
s1
,
-
24
(
$
sp
)
lw
$
s5
,
-
20
(
$
sp
)
lw
$
s3
,
-
16
(
$
sp
)
lw
$
s2
,
-
12
(
$
sp
)
lw
$
s6
,
-
8
(
$
sp
)
lw
$
s7
,
-
4
(
$
sp
)
addi
$
sp
,
$
sp
,
28
jr
$
ra
haciendo_derivada:
#
Tenemos
el
vector
con
los
numeros
colocados
en
sus
posiciones
correspondientes
addi
$
sp
,
$
sp
,
-
8
sw
$
s7
,
-
4
(
$
sp
)
sw
$
s1
,
-
8
(
$
sp
)
move
$
t0
,
$
a0
#
Pisamos
el
registro
,
por
lo
que
en
$
t0
es
ta
la
cadena
donde
es
ta
el
polinomio
bien
colocado
move
$
t2
,
$
a1
#
En
$
t2
es
ta
la
cadena
donde
vamos
a
poner
los
resultados
de
las
derivadas
li
$
t9
,
0
li
$
s7
,
1
bucle_derivada:
lw
$
t1
,
0
(
$
t0
)
#
Traemos
la
primera
posicion
correspondiente
al
el
exponente
0
bne
$
t9
,
0
,
mayor_1
#
Las
dos
primeras
iteraciones
las
metemos
en
la
primera
posicion
#
Mientras
sea
2
o
menos
:
#
$
t9
empieza
en
0
y
hace
hasta
iteracion
1
,
despues
va
a
mayor
que
2
y
en
es
te
bucle
al
macenamos
en
la
primera
posicion
del
vector
#
Si
es
0
,
no
hacemos
nada
sw
$
zero
,
0
(
$
t2
)
aqui:
j
vamonos
mayor_1:
mult
$
t9
,
$
t1
#
Multiplicamos
el
elemento
que
sale
del
vector
por
la
posicion
que
ocupa
dentro
del
mismo
que
es
su
exponente
bge
$
t1
,
$
zero
,
mayor_0
#
Vemos
si
es
negativo
o
positivo
mfhi
$
s1
#
Cargamos
en
$
s1
el
valor
del
registro
HI
para
comprobar
el
desbordamiento
bne
$
s1
,
-
1
,
errorHI4
#
Si
el
valor
traido
de
HI
es
di
stino
de
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
mflo
$
t1
#
Cargamos
en
$
t1
el
valor
del
registro
LO
para
comprobar
el
desbordamiento
bgt
$
t1
,
$
zero
,
errorHI4
#
Si
el
valor
traido
de
LO
es
menor
que
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
j
go
mayor_0
:
mfhi
$
s1
#
Cargamos
en
$
s1
el
valor
del
registro
HI
para
comprobar
el
desbordamiento
bne
$
s1
,
$
zero
,
errorHI4
#
Si
el
valor
traido
de
HI
es
di
stino
de
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
mflo
$
t1
#
Cargamos
en
$
t1
el
valor
del
registro
LO
para
comprobar
el
desbordamiento
blt
$
t1
,
$
zero
,
errorHI4
#
Si
el
valor
traido
de
LO
es
menor
que
cero
saltamos
a
la
etiqueta
error
porque
ha
habido
desbordamiento
go:
addiu
$
t2
,
$
t2
,
4
sw
$
t1
,
0
(
$
t2
)
#
Lo
al
macenamos
en
la
poscion
0
y
luego
en
la
primera
iteracion
(
mas
abajo
)
lo
volvemos
a
colocar
en
la
posicion
0
#
Es
decir
,
lo
al
macenamos
en
la
primera
posicion
del
vector
(
pos
1
)
y
no
en
las
posiciones
0
que
eran
las
anteriores
bne
$
t1
,
0
,
di
st
#
Si
a
partir
del
primero
,
al
hacer
todos
la
derivada
son
todos
0
,
se
activa
la
bandera
de
poner
a
todo
un
0
addi
$
s7
,
$
s7
,
1
#
Si
es
0
,
aumentamos
el
contador
y
luego
comprobamos
si
en
todas
las
posiciones
se
ha
cargado
un
0
#
Si
en
las
16
posiciones
se
ha
cargado
un
0
imprimimos
un
0
dist:
vamonos:
addu
$
t0
,
$
t0
,
4
addu
$
t9
,
$
t9
,
1
#
No
aumentamos
el
iterador
bne
$
t9
,
16
,
bucle_derivada
move
$
v0
,
$
s7
#
Retornamos
el
valor
de
$
s7
para
la
si
guiente
funcion
(
para
saber
si
ha
si
do
todo
ceros
)
lw
$
s7
,
-
4
(
$
sp
)
lw
$
s1
,
-
8
(
$
sp
)
addi
$
sp
,
$
sp
,
8
#
Restauracion
del
valor
$
s7
j
finalll
errorHI4:
li
$
v1
,
1
finalll:
jr
$
ra
hola:
addi
$
sp
,
$
sp
-
4
sw
$
s0
,
-
4
(
$
sp
)
move
$
t0
,
$
a0
#
En
$
t0
es
ta
la
cadena
donde
tenemos
el
resultado
de
la
derivada
addu
$
t0
,
$
t0
,
64
li
$
s0
,
63
#
Utilizamos
un
$
s
,
por
lo
que
tras
las
15
iteraciones
acabare
en
un
63
move
$
v1
,
$
s0
#
Para
retornar
el
valor
de
$
s0
,
y
que
lo
reciba
la
funcion
si
guiente
como
$
a2
lw
$
s0
,
0
(
$
sp
)
addi
$
sp
,
$
sp
,
4
jr
$
ra
el_antes_resultado_derivada:
move
$
t8
,
$
a2
#
El
exponenete
move
$
t2
,
$
a0
#
Todo
ceros
jr
$
ra
resultado_derivada:
#
Aqui
vamos
a
usar
el
vector
donde
tenemos
la
derivada
al
macenada
en
el
vector
addi
$
sp
,
$
sp
,
-
8
sw
$
s0
,
-
4
(
$
sp
)
sw
$
s4
,
-
8
(
$
sp
)
siguiente_posicion:
lw
$
t1
,
0
(
$
t0
)
#
En
$
t0
tenemos
el
resultado
de
la
derivada
y
lo
tendremos
que
pasar
a
cadena
mas
tarde
(
nos
traemos
un
numero
y
lo
trataremos
para
sacarlo
como
ASCII
)
li
$
v0
,
0
bne
$
t2
,
16
,
no_0
la
$
t4
,
CadenaOrdenada
li
$
t3
,
'0'
sb
$
t3
,
0
(
$
t4
)
#
Aniadimos
un
caracter
0
j
finnnal
no_band:
no_0:
no_es_ultima_iteracion:
beq
$
t1
,
$
zero
,
mepiro
#
En
$
t1
movemos
el
numero
para
convertirlo
a
cadena
li
$
t2
,
0
li
$
v1
,
0
bgt
$
t1
,
$
zero
,
es
mayorque0
#
Si
es
mayor
bifurca
porque
no
hay
ningun
tratamiento
pero
si
es
menor
lo
tratamos
li
$
v1
,
10
mulu
$
t1
,
$
t1
,
-
1
#
Lo
hacemos
positivo
esmayorque0:
move
$
t9
,
$
a1
#
En
$
t9
tenemos
la
cadena
resultado
que
sera
la
que
mostremos
por
pantalla
li
$
t7
,
0
addiu
$
t3
,
$
t8
,
-
48
#
$
t3
no
se
utilizaa
en
es
ta
iteracion
hasta
llegar
a
a
continuacion
que
se
resetea
a
0
li
$
s4
,
4
j
bucle2
#
Pasamos
a
bucle2
el
contenido
del
numero
del
10
-
15
seg
un
corresponda
bien
puesto
contunuacion:
#
En
$
a1
tenemos
la
cadena
li
$
t3
,
'^'
li
$
t4
,
'x'
li
$
t5
,
'-'
li
$
s0
,
'+'
li
$
s4
,
0
beq
$
t8
,
49
,
no_ponemos_elevado
beq
$
t8
,
48
,
no_ponemos_elevado
#
Para
referirnos
al
cero
sb
$
t3
,
0
(
$
t9
)
#
Aniadimos
el
'^'
addiu
$
t9
,
$
t9
,
1
addiu
$
t7
,
$
t7
,
1
#
Contador
no_ponemos_elevado:
beq
$
t8
,
48
,
no_ponemos_x
#
Para
referirnos
al
cero
sb
$
t4
,
0
(
$
t9
)
#
Aniadimos
la
'x'
addiu
$
t9
,
$
t9
,
1
addiu
$
t7
,
$
t7
,
1
#
Contador
no_ponemos_x:
bucle2:
bne
$
s4
,
4
,
normal
#
Es
tamos
en
el
tratamiento
del
exponente
(
$
s4
a
4
)
move
$
t4
,
$
t3
beq
$
t8
,
48
,
no_ponemos_exponente
#
Para
referirnos
al
cero
beq
$
t8
,
49
,
no_ponemos_exponente
#
Para
referirnos
al
uno
j
puesalfinalexponente
normal:
move
$
t4
,
$
t1
puesalfinalexponente:
li
$
t5
,
10
#
Cargamos
un
10
en
$
t5
para
poder
di
vuidir
entre
10
ruleta:
#
Bucle
donde
obtenemos
los
caracteres
del
numero
introducido
por
teclado
divu
$
t4
,
$
t5
#
Di
vidimos
entre
10
mfhi
$
t2
#
Traemos
a
$
t2
el
resto
desde
el
registro
hi
addiu
$
t2
,
$
t2
,
48
#
Sumamos
48
al
valor
para
obtener
el
caracter
en
ASCII
addiu
$
t7
,
$
t7
,
1
#
contador
sb
$
t2
0
(
$
t9
)
#
Guardamos
el
caracter
en
la
cadena
como
guardamos
en
cadena
en
formato
ascii
ponemos
sb
en
vez
de
sw
,
y
aumentamos
en
1
el
puntero
en
vez
de
aumetarlo
en
4
addiu
$
t9
,
$
t9
,
1
#
Incrementamos
la
posicion
de
la
cadena
mflo
$
t4
#
Traemos
a
$
t1
el
cociente
desde
el
registro
lo
bne
$
t4
,
$
0
,
ruleta
no_ponemos_exponente:
bne
$
s4
,
4
,
nadadenada
#
Bandera
j
contunuacion
nadadenada:
#
En
la
primera
iteracion
ignora
lo
si
guiente
y
en
la
si
guiente
ya
no
addiu
$
t6
,
$
t6
,
1
bne
$
v1
,
10
,
es
_mas
li
$
s5
,
'-'
sb
$
s5
,
0
(
$
t9
)
#
Aniadimos
el
'-'
addiu
$
t7
,
$
t7
,
1
#
Contador
j
electrohousecnoe
es_mas:
beq
$
t6
,
1
,
imprime_bien
li
$
s0
,
'+'
sb
$
s0
,
0
(
$
t9
)
#
Aniadimos
el
'+'
addiu
$
t7
,
$
t7
,
1
#
Contador
electrohousecnoe:
imprime_bien:
la
$
a0
,
CadenaOrdenada
la
$
a1
,
Cadena_guardar_caracteres_reves
move
$
t1
,
$
a0
move
$
t2
,
$
a1
addi
$
t7
,
$
t7
,
-
1
addu
$
t3
,
$
t2
,
$
t7
bucle23:
addiu
$
t7
,
$
t7
,
-
1
lb
$
t4
,
0
(
$
t3
)
sb
$
zero
,
0
(
$
t3
)
addiu
$
t3
,
$
t3
,
-
1
sb
$
t4
,
0
(
$
t1
)
addiu
$
t1
,
$
t1
,
1
bgez
$
t7
,
bucle23
j
finnnal
mepiro:
li
$
v0
,
4
finnnal:
addiu
$
t8
,
$
t8
,
-
1
#
Di
sminuimos
el
exponente
#
Pila:
rest
auracion
de
valores
#
lw
$
s0
,
-
4
(
$
sp
)
lw
$
s4
,
-
4
(
$
sp
)
addi
$
sp
,
$
sp
,
8
jr
$
ra
imprime_cadena
:
li
$
v0
,
4
syscall
jr
$
ra
remember:
la
$
a1
,
CadenaOrdenada
li
$
t1
,
0
remembermyname:
sb
$
zero
,
0
(
$
a1
)
addiu
$
a1
,
$
a1
,
1
addiu
$
t1
,
$
t1
,
1
bne
$
t1
,
15
,
remembermyname
jr
$
ra
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment