#Ejercicio #Escriba un programa que, utilizando los modos de direccionamiento realice las siguientes operaciones # sin modificar el segmento de datos: # # ¥ Calcular la suma del primer half colocado a partir de la etiqueta datos1 y del word que # tiene valor -1 y colocar este resultado en el espacio de 2 bytes resaltado en negrita. # Imprimir y comprobar el valor. # ¥ Utilizando la etiqueta datos2, almacenar el car‡cter ASCII ÔcÕ en el byte resaltado en # negrita e inicializado a 6. Imprimir y comprobar el valor. .data datos1: .word -4, 5 .byte 6 .align 1 .half 3 .align 2 .word -1 .space 2 .byte 'b' datos2: .byte 5 .globl main .text main: la $t0, datos1 # Creo un puntero que apunta a datos1 (al word que vale -4) lh $t1, 10($t0) # Cargo el half que vale 3 en $t1. lw $t2, 12($t0) # Cargo el word que vale -1 en $t2 add $t2, $t1, $t2 #Sumo ambos valores sh $t2, 16($t0) # Guardo el resultado en el space lh $a0, 16($t0) # Leo el contenido del space para comprobar si es correcto li $v0, 1 # Llamada al sistema para imprimir el contenido de $a0 syscall la $t0, datos2 # Creo un puntero que apunta a datos1 (al byte que vale 5) lb $t1, -1($t0) # Cargo el byte que vale 'b' en el registro $t0 addi $t1, $t1, 1 # Le sumo 1 a la 'b' para obtener la letra 'c' sb $t1, -11($t0) # Almaceno la letra 'c' en el byte que vale 6 la $a0, datos2 # Creo un puntero a la cadena (a la letra 'c') addi $a0, $a0, -11 li $v0, 4 # Llamada al sistema para imprimir la cadena syscall li $v0, 10 #Fin del main syscall
Segmento de datos en MIPS
#Ejercicio #Escriba un programa que, utilizando los modos de direccionamiento realice las siguientes operaciones # sin modificar el segmento de datos: # # ¥ Calcular la suma del primer half colocado a partir de la etiqueta datos1 y del word que # tiene valor -1 y colocar este resultado en el espacio de 2 bytes resaltado en negrita. # Imprimir y comprobar el valor. # ¥ Utilizando la etiqueta datos2, almacenar el car‡cter ASCII ÔcÕ en el byte resaltado en # negrita e inicializado a 6. Imprimir y comprobar el valor. .data datos1: .word -4, 5 .byte 6 .align 1 .half 3 .align 2 .word -1 .space 2 .byte 'b' datos2: .byte 5 .globl main .text main: la $t0, datos1 # Creo un puntero que apunta a datos1 (al word que vale -4) lh $t1, 10($t0) # Cargo el half que vale 3 en $t1. lw $t2, 12($t0) # Cargo el word que vale -1 en $t2 add $t2, $t1, $t2 #Sumo ambos valores sh $t2, 16($t0) # Guardo el resultado en el space lh $a0, 16($t0) # Leo el contenido del space para comprobar si es correcto li $v0, 1 # Llamada al sistema para imprimir el contenido de $a0 syscall la $t0, datos2 # Creo un puntero que apunta a datos1 (al byte que vale 5) lb $t1, -1($t0) # Cargo el byte que vale 'b' en el registro $t0 addi $t1, $t1, 1 # Le sumo 1 a la 'b' para obtener la letra 'c' sb $t1, -11($t0) # Almaceno la letra 'c' en el byte que vale 6 la $a0, datos2 # Creo un puntero a la cadena (a la letra 'c') addi $a0, $a0, -11 li $v0, 4 # Llamada al sistema para imprimir la cadena syscall li $v0, 10 #Fin del main syscall