Programa en ensamblador MIPS: transposición de cadenas y multiplicación de matriz por vector
Enviado por Andres y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 3,73 KB
Práctica 1 (mayúsculas)
Transposición de mayúsculas y minúsculas en una cadena
Programa en lenguaje ensamblador MIPS que solicita al usuario la introducción de una cadena de texto y muestra la cadena transpuesta, es decir, convierte las letras mayúsculas en minúsculas y viceversa.
Sección de datos
.data
buffr: .space 100
entrada: .asciiz "Introduzca la cadena : "
salida: .asciiz "La cadena introducida traspuesta es : "
Sección de código
.text
.globl inicio
inicio:
la $a0, entrada # Cargo dirección de la cadena a mostrar
li $v0, 4 # Código para mostrar string por pantalla
syscall
la $a0, buffr # Cargo la dirección donde voy a guardar lo que escriba por teclado
li $a1, 100 # Número máximo de caracteres a leer
li $v0, 8 # Código para leer de teclado
syscall
li $a1, 64 # Cargamos en ASCII la A mayúscula
li $a2, 123 # Cargamos en ASCII la z minúscula
li $a3, 96 # Cargamos en ASCII la a minúscula
#lb $t0, 0($a0) # Cargamos en t0 la primera letra de buffr
addi $a0, $a0, -1 # Restamos 1 al registro del buffr
while:
addi $a0, $a0, 1 # Sumamos 1 al registro del buffr para cargar la siguiente letra
lb $t0, 0($a0) # Cargamos en t0 la siguiente letra de buffr
beq $t0, $zero, imprimir # Si hemos llegado al final del buffr, imprimir la transpuesta
bgt $t0, $a2, error # Si no está dentro del rango ASCII de letras, ir a la etiqueta error
blt $t0, $a1, error # Si no está dentro del rango ASCII de letras, ir a la etiqueta error
ble $t0, $a3, if # Si es minúscula, ir a la etiqueta if
bge $t0, $a3, els # Si es mayúscula, ir a la etiqueta els
if:
addi $t0, $t0, 32 # Sumamos 32 al registro de la letra para convertirla en mayúscula
sb $t0, 0($a0) # Guardamos la letra en el buffr
j while
els:
addi $t0, $t0, -32 # Restamos 32 al registro de la letra para convertirla en minúscula
sb $t0, 0($a0) # Guardamos la letra en el buffr
j while
error:
li $t0, 32 # Cargamos el valor ASCII del espacio en t0
sb $t0, 0($a0) # Guardamos el espacio en el buffr
j while
imprimir:
la $a0, salida # Cargamos la dirección de la cadena a mostrar
li $v0, 4 # Código para mostrar string por pantalla
syscall
la $a0, buffr # Mostramos la cadena transpuesta por pantalla
syscall
Práctica 2: vector por matriz
Programa en ensamblador MIPS que realiza la multiplicación de los elementos de una matriz por los elementos de un vector, almacenando el resultado en la matriz.
Sección de datos
.data
vector: .word 2, 3, 4
matriz: .word 1, 2, 3
.word 4, 5, 6
.word 7, 8, 9
#nc: .word 3
#i: .word 1
#j: .word 1
#contador: .word 4
Sección de código
.globl inicio
.text
inicio:
la $t0, matriz # Carga dirección de la matriz
la $t1, vector # Carga dirección del vector
while:
lw $t2, 0($t0) # Carga posición de la matriz
lw $t3, 0($t1) # Carga posición del vector
mul $t4, $t3, $t2 # Multiplica matriz por vector y lo guarda en t4
sw $t4, 0($t0) # Guarda resultado en la matriz
addi $s0, $s0, 1 # Suma UNO al contador de la matriz
addi $s1, $s1, 1 # Suma UNO al contador del vector
add $t0, $t0, 4 # Desplazamos la posición de la matriz a la siguiente posición
add $t1, $t1, 4 # Desplazamos la posición del vector a la siguiente posición
bgt $s1, 2, if # Salto si nos hemos salido del vector
bgt $s0, 8, fin # Salto si nos hemos salido de la matriz
j while
if:
add $t1, $t1, -12 # Volvemos a la primera posición del vector
li $s1, 0
j while
fin:
li $v0, 10 # Fin del programa
syscall