Práctica Nº1


Para la realización de este ejercicio se ha utilizado el programa Mars 4.1

EJERCICIOS:

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, 12($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
texto:.ascii","
.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,$s0
li $v0,0x00000001
syscall
la $a0,texto
li $v0,4
syscall
li $v0,0x00000001
move $a0,$s2
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, 12($t1)
move $a0,$s1
li $v0,0x00000001
syscall
la $a0,texto
li $v0,4
syscall
move $a0, $s3
li $v0,0x00000001
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
numero1:.word 100
numero2:.word -10
mensaje:.asciiz "La suma es:"
resultado:.space 4
.text
.globl main
main:
lw $t0,numero1
lw $t1,numero2
add $t0,$t0,$t1
la $a0, mensaje
li $v0, 4
syscall
move $a0, $t0
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
suma:.space 4
.text
.globl main
main:
move $t0,$zero #indice
lw $t1,suma #suma
li $t2,4
bucle:
sll $t3,$t0,2
lw $t4,valor($t3)
add $t1,$t1,$t4
add $t0,$t0,1
ble $t0,$t2,bucle
sw $t1,suma

7-Diseñe un código para almacenar en un array en memoria, denominado array1, los siguientes valores enteros 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

10-Diseñe un código que pida por teclado dos valores enteros, que los sume y muestre el resultado por pantalla.
.data
valor: .word 0xa,0xb
entero:.space 20
.text
.globl main
main:
move $t0,$zero # $t0<-- "indice" con valor incial 0
move $t1,$zero # $t1<-- "suma" con valor incial 0
li $t2,4 # $t2<-- constante
la $s0, valor
li $v0,0x00000005
syscall
li $v1,0x00000005
syscall
bucle:
add $t3,$t0,$t0
add $t3,$s0,$t0
lw $s1,0($t3)
li $v0,0x00000001
syscall
li $v1,0x00000001
syscall