Practica 1

Practica realizada por: Agustín Piñero.
Opinión respecto de la practica:
- Esta práctica está realizada con el programa Mars.
- Esta asignatura no ha ido del todo acorde con la teoría, puesto que cuando realizamos la práctica no habíamos empezado el tema correspondiente a Programación MIPS.
- En esta asignatura nos hemos perdido bastantes veces, ya que no teníamos conocimiento de este lenguaje de programación.
- Con respecto a la mejora de esta práctica, si se hubiese hubiese practicado después de la teoría que ya tendríamos los conocimientos suficientes para hacerlo sin problema hubiese mejorado notablemente la práctica.
- Durante la realización de esta práctica la profesora no nos ha motivado demasiado en el lenguaje ensamblador, ahí es cuando perdía algo de interés por la programación MIPS.
- Con respecto al conocimiento útil, hay unos microprocesadores de arquitectura RISC usada para el aprendizaje de lenguajes ensambladores, para ello se estudia con Mars.
- Esta práctica ha sido algo pesada, ya que no se entendía todo. Una vez ya comprendido la realización de cada ejercicio se hacía mas amena.
- Personalmente la práctica ha sido interesante, para comprender los procesos que realiza el ordenador, aunque este lenguaje es algo difícil de comprender ya que es el más cercano al lenguaje máquina.

Ejercicios de la práctica correspondiente.

1) Modificar el código anterior para que se cargue en los registros s0, s1, s2, s3 y s4 el vector denominado array_media

.data
array_media:.half 10,20,30,40
.text
.globl main
main:
la $t1,array_media
lh $s0,0($t1)
lh $s1,2($t1)
lh $s2,4($t1)
lh $s3,6($t1)


2) Repetir para el tercer vector de enteros de palabras denominado array_palabra

.data
array_palabra:.word -1,-2,-3,-4
.text
.globl main
main:
la $t1,array_palabra
lw $s0,0($t1)
lw $s1,4($t1)
lw $s2,8($t1)
lw $s3,0x0c($t1)


3) Añadir en el código del problema 1, las líneas necesarias para mostrar por pantalla solo los elementos impares del array tratado

.data
array_media:.half 10,20,30,40
.text
.globl main
main:
la $t1,array_media
lh $s0,0($t1)
lh $s1,2($t1)
lh $s2,4($t1)
lh $s3,6($t1)
move $a0,$s1
li $v0,1
syscall
move $a0,$s3
li $v0,1
syscall

4)
Añadir en el código del problema 2, las líneas necesarias para mostrar por pantalla solo los elementos pares
del array tratad, separados por una coma

.data
array_palabra:.word -1,-2,-3,-4
texto: .ascii ","
.text
.globl main
main:
la $t1,array_palabra
lw $s0,0($t1)
lw $s1,4($t1)
lw $s2,8($t1)
lw $s3,0x0c($t1)
move $a0,$s0
li $v0,1
syscall
la $a0,texto
li $v0,4
syscall
move $a0,$s2
li $v0,1
syscall


5) Escribe el código de un programa que sume dos valores almacenados en memoria. Estos dos valores reciben
los nombres Numero1 y Numero2 y sus valores son respectivamente 100 y -10. Para el resultado realice una
reserva de espacio en memoria a continuación de Numero1 y Numero2 (Utilice la directiva .space).  Para la
carga de memoria en registros use t0 para Numero1 y t1 para Numero2

.data
texto: .asciiz "EL resultado es:"
Numero1: .word 100
Numero2: .word -10
resultado: .space 4
.text
.globl main
main:
lw $t0, Numero1
lw $t1, Numero2
lw $t2, resultado
add $t2, $t0, $t1
la $a0, texto
li $v0,4
syscall
move $a0,$t2
li $v0,1
syscall


6)
Modificar el código anterior para que al término de la suma del array guarde en memoria el resultado.
Considere que inicialmente habrá que efectuar una reserva de memoria para esta variable a la que
denominaremos “SUMA”

.data
valor: .word 0xa,0xb,0x01,0x02 #Defino array 4 palabras
SUMA:.space 4
.text
.globl main
main:
lw $t5, SUMA
move $t0,$zero # $t0<-- "indice" con valor incial 0
move $t1,$zero # $t1<-- "suma" con valor incial 0
li $t2,4 # $t2<-- constante
bucle:
sll $t3,$t0,2 # Desplazamiento de dos bits a la izquierda de "indice"
lw $t4,valor($t3) # $t4 <-- valor[indice]
add $t1,$t1,$t4 # suma=suma+valor[indice]
add $t0,$t0,1 # índice=índice+1
ble $t0,$t2,bucle # Repite BUCLE si índice<4
sw $t1,SUMA

7)
Diseñe un código para almacenar en un array en memoria, denominado array1, los

siguientes valores en
teros de 32 bits: 5, 13,-7,-5, 17.

.data
array_byte:.byte -7,-5,5,13,17
array1:.space 4
.text
.globl main
main:
la $t1,array_byte
lb $s0,0($t1)
lb $s1,0($t1)
lb $s2,0($t1)
lb $s3,0($t1)


8) Copie el contenido de array1, de 5 elementos enteros y ubicado al principio de la memoria de datos, en array
2, situado dos posiciones más delante de array1.
Array1={2,34,12,-4,6}

.data
array1:.word 2,34,12,-4,6
espacio:.space 8
array2:.space 20
.text
.globl main
main:
move $t0,$zero
li $t2,5
bucle:sll $t3 ,$t0,2
lw $t1, array1($t3)
sw $t1, array2($t3)
add $t0,$t0,1
blt $t0,$t2,bucle