.data mensaje1: .asciiz "Ingrese el multiplicando: " #ingresa el numero A mensaje2: .asciiz "Ingrese el multiplicador: " #ingresa el numero B resultado: .asciiz "El resultado de la multiplicación es: " .text #lee ambos numeros main: #Mostrar mensaje y leer el multiplicando (A) li $v0, 4 la $a0, mensaje1 syscall li $v0, 5 syscall move $s0, $v0 #Guarda A en $s0 #Mostrar mensaje y leer el multiplicador (B) li $v0, 4 la $a0, mensaje2 syscall li $v0, 5 syscall move $s1, $v0 #Guarda B en $s1 # Para que los valores (A y B) se manejen correctamente como números con signo, # es necesario extender el bit de signo al llenar con bits iguales al bit de signo original # Extender el signo del multiplicando (A) sll $s0, $s0, 16 #Desplazar A a la izquierda 16 bits sra $s0, $s0, 16 #Desplazar A a la derecha con extensión de signo # Extender el signo del multiplicador (B) sll $s1, $s1, 16 #Desplazar B a la izquierda 16 bits sra $s1, $s1, 16 #Desplazar B a la derecha con extensión de signo # Inicializar registros li $s2, 0 # A = 0 move $s3, $s0 # Q = $s3 que almacena a $s0 (multiplicando) li $s4, 0 # Q-1 = 0 li $s5, 16 # Contador (count) = 16 (número de bits) loop: # Comprobar los bits Q0 y Q1 srl $t1, $s3, 1 # Desplazamiento a la derecha de 1 bit, se almacena en $t1 el valor andi $t1, $t1, 3 # 3 en binario es 11, por lo que obtiene los bits Q0 y Q1 del multiplicador beq $t1, 1, suma # Si Q0 y Q1 son 01 hace la suma de A = A + M beq $t1, 2, resta # Si Q0 y Q1 son 10 hace la resta de A = A - M j desplazamiento # Si Q0 y Q1 son 00 o 11, se realiza el desplazamiento desplazamiento: # Desplazar A y Q hacia la derecha con extensión de signo sra $s2, $s2, 1 #desplaza $s2(A) sra $s3, $s3, 1 #desplaza $s3(Q) # Disminuye el contador en 1 subiu $s5, $s5, 1 # Comprobar si el contador es cero bnez $s5, loop j imprimir_resultado suma: # Sumar A y M add $s2, $s2, $s1 # Hace desplazamiento después de sumar j desplazamiento resta: # Restar M de A sub $s2, $s2, $s1 # Hace desplazamiento después de restar j desplazamiento imprimir_resultado: # Realizar la concatenación de A y Q or $t2, $s2, $s3 # Realizar la concatenación de A y Q # Mostrar el resultado de la multiplicación li $v0, 4 la $a0, resultado syscall move $a0, $t2 li $v0, 1 syscall # Salir del programa li $v0, 10 syscall