La nueva Programación en ensamblador mips
Enviado por Jillian • 19 de Noviembre de 2018 • 1.295 Palabras (6 Páginas) • 398 Visitas
...
addi $s0, $zero, 0 #y
addi $s1, $zero, 0 #B
addi $s2, $zero, 0 #C
addi $s3, $zero, 20 #valorInicio
addi $s4, $zero, 0 #resultadoEjecucionFuncion
addi $t3, $zero, 0 #i
addi $s5, $zero, 50 #declaro variable50
addi $s7, $zero, $s6 #cursor s7 y s6 vector
Loop beq $t3, $s5 END #direccional for al if?
addi $t3, $t3, 1 #aumento el i
add $t4, $s3, $t3
sw $t4, 0($s7)
addi $t4, $t4, 1 #aumentando
beq $st3, $s0 E #i==y
addi $t5, $zero, 0 #auxiliar para -B-C
addi $t6, $zero, 0 #auxiliar para (-C-B)t5+V[]
addi $t7, $zero, 10 #10
addi $s4, $zero, 0 #t6+t7 total y resultadoEjecu
sub $t5, $s1, $s2 #-b-c
add $t6, y($s8) #s8 posicion del V
add $s4, $t7, $t6 #suma total sesultadoejecucion
add $t4, $s3, $t3 #auxiliar para ir hasta la pos4
sw $t4, 0($s7) #s7cursor
addi $t4, $t4, 4 #aumentando 4
Diagrama de Flujo
[pic 2]
2. Dados dos vectores numéricos, determine cual de los dos tiene el mayor promedio.
Implementación en lenguaje de alto nivel
Una implementación funcional en Python del pseudocódigo anterior que cumple con las condiciones de la práctica se encuentra en el archivo adjunto ‘Promedios.py’. La implementación se puede ver a continuación:
- # Funcion que calcula el promedio de un vector con valor centinela = 32000
- def promedio (v):
- n = 0 # Cuenta el numero de elementos en el vector
- s = 0 # Contiene la suma de los elementos del vector
- for i in v:
- if i != 32000:
- n = n + 1
- s = s + i
- return float(s / n )
-
- # Vectores ingresados por el usuario
- v1 = [2,3,4,5,6,7,5,32000]
- v2 = [4,5,6,7,8,9,24,32000]
-
- # Promedios de los vectores
- p1 = promedio(v1)
- p2 = promedio(v2)
-
- # Comparando los promedios
- if p1 > p2:
- print "p1:", p1
- prom = p1
- elif p1
- print "p2:", p2
- prom = p2
- else:
- print -1 # O tambien “promedios iguales”
- prom = p1
- v1[n] = v1[n] - prom
- v2[n] = v2[n] - prom
Implementación en lenguaje de bajo nivel
- # LAB 3: Programación en ensamblador MIPS
- # Promedios.ams
- .data # MANEJO DE MEMORIA DE DATOS
- centinela: .word 32000
- v1: .word 4, 56, 76, 38, 88, 65, 999, 32000
- v2: .word 23, 98, 65, 34, 32000
-
- .text # MANEJO DE MEMORIA DE DATOS
- la $t0, centinela # t0 tiene la direccion de centinela
- la $t1, v1 # t1 tiene la direccion de v1
- la $t2, v2 # t2 tiene la direccion de v2
- lw $s0, 0($t0) # s0 tiene el valor de centinela
-
- addi $a0, $t1, 0 # a0 tiene la direccion de v1
- jal promedio
- addi $s1, $v0, 0 # s1 tiene el promedio de v1
-
- addi $a0, $t2, 0 # a0 tiene la direccion de v2
- jal promedio
- addi $s2, $v0, 0 # s2 tiene el promedio de v2
-
- addi $a0, $zero, -1 # a0 = -1
- beq $s1, $s2, imprimir # Si los promedios son iguales imprima -1 para indicar que
- # son promedios iguales
- slt $t0, $s2, $s1 # t0 = 1 si s2
- beq $t0, 1, mayor # Si el primer promedio es mayor que el segundo, salte a mayor
- add $a0, $s2, $zero # a0 tiene el valor del segundo promedio
- jal imprimir # imprima el segundo promedio
- sll $a0, $t4, 2 # posicion en memoria donde esta el n-esimo elemento de v1
- sll $a1, $t4, 2 # posicion en memoria donde esta el n-esimo elemento de v2
- sub $t7, $a0, $s2 # v1[n] - prom
- sub $t8, $a1, $s2 # v2[n] - prom
- lw 0($a0), $t7 #
- lw 0($a1), $78 #
- mayor: add $a0, $s1, $zero # a0 tiene el valor del primer promedio
-
...