mensaje1: .asciiz mensaje2: .asciiz resultado: .asciiz .text main: li $v0, 4 la $a0, mensaje1 syscall li $v0, 5 syscall move $s0, $v0 #Guarda A en $s0 li $v0, 4 la $a0, mensaje2 syscall li $v0, 5 syscall move $s1, $v0 #Guarda B en $s1 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 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 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: 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: sra $s2, $s2, 1 #desplaza $s2(A) sra $s3, $s3, 1 #desplaza $s3(Q) subiu $s5, $s5, 1 bnez $s5, loop j imprimir_resultado suma: add $s2, $s2, $s1 j desplazamiento resta: sub $s2, $s2, $s1 j desplazamiento imprimir_resultado: or $t2, $s2, $s3 # Realizar la concatenación de A y Q li $v0, 4 la $a0, resultado syscall move $a0, $t2 li $v0, 1 syscall li $v0, 10 syscall