Address Code Basic Source 0x00400000 0x24020004 addiu $2,$0,0x0000000410 li $v0, 4 0x00400004 0x3c011001 lui $1,0x00001001 11 la $a0, mensaje1 0x00400008 0x34240000 ori $4,$1,0x00000000 0x0040000c 0x0000000c syscall 12 syscall 0x00400010 0x24020005 addiu $2,$0,0x0000000513 li $v0, 5 0x00400014 0x0000000c syscall 14 syscall 0x00400018 0x00028021 addu $16,$0,$2 15 move $s0, $v0 #Guarda A en $s0 0x0040001c 0x24020004 addiu $2,$0,0x0000000418 li $v0, 4 0x00400020 0x3c011001 lui $1,0x00001001 19 la $a0, mensaje2 0x00400024 0x3424001b ori $4,$1,0x0000001b 0x00400028 0x0000000c syscall 20 syscall 0x0040002c 0x24020005 addiu $2,$0,0x0000000521 li $v0, 5 0x00400030 0x0000000c syscall 22 syscall 0x00400034 0x00028821 addu $17,$0,$2 23 move $s1, $v0 #Guarda B en $s1 0x00400038 0x00108400 sll $16,$16,0x0000001029 sll $s0, $s0, 16 #Desplazar A a la izquierda 16 bits 0x0040003c 0x00108403 sra $16,$16,0x0000001030 sra $s0, $s0, 16 #Desplazar A a la derecha con extensión de signo unos o ceros 0x00400040 0x00118c00 sll $17,$17,0x0000001033 sll $s1, $s1, 16 #Desplazar B a la izquierda 16 bits 0x00400044 0x00118c03 sra $17,$17,0x0000001034 sra $s1, $s1, 16 #Desplazar B a la derecha con extensión de signo unos o ceros 0x00400048 0x24120000 addiu $18,$0,0x000000037 li $s2, 0 # A = 0 0x0040004c 0x00109821 addu $19,$0,$16 38 move $s3, $s0 # Q = $s3 que almacena a $s0 (multiplicando) 0x00400050 0x24140000 addiu $20,$0,0x000000039 li $s4, 0 # Q-1 = 0 0x00400054 0x24150010 addiu $21,$0,0x000000140 li $s5, 16 # Contador (count) = 16 (número de bits) 0x00400058 0x00134842 srl $9,$19,0x00000001 44 srl $t1, $s3, 1 # Desplazamiento a la derecha de 1 bit, se almacena en $t1 el valor 0x0040005c 0x31290003 andi $9,$9,0x00000003 45 andi $t1, $t1, 3 # 3 en binario es 11, por lo que obtiene los bits Q0 y Q1 del multiplicador 0x00400060 0x20010001 addi $1,$0,0x00000001 46 beq $t1, 1, suma # Si Q0 y Q1 son 01 hace la suma de A = A + M 0x00400064 0x1029000a beq $1,$9,0x0000000a 0x00400068 0x20010002 addi $1,$0,0x00000002 47 beq $t1, 2, resta # Si Q0 y Q1 son 10 hace la resta de A = A - M 0x0040006c 0x1029000a beq $1,$9,0x0000000a 0x00400070 0x0810001d j 0x00400074 48 j desplazamiento # Si Q0 y Q1 son 00 o 11, se realiza el desplazamiento 0x00400074 0x00129043 sra $18,$18,0x0000000152 sra $s2, $s2, 1 #desplaza $s2(A) 0x00400078 0x00139843 sra $19,$19,0x0000000153 sra $s3, $s3, 1 #desplaza $s3(Q) 0x0040007c 0x3c010000 lui $1,0x00000000 56 subiu $s5, $s5, 1 0x00400080 0x34210001 ori $1,$1,0x00000001 0x00400084 0x02a1a823 subu $21,$21,$1 0x00400088 0x16a0fff3 bne $21,$0,0xfffffff3 59 bnez $s5, loop 0x0040008c 0x08100028 j 0x004000a0 60 j imprimir_resultado 0x00400090 0x02519020 add $18,$18,$17 64 add $s2, $s2, $s1 0x00400094 0x0810001d j 0x00400074 67 j desplazamiento 0x00400098 0x02519022 sub $18,$18,$17 71 sub $s2, $s2, $s1 0x0040009c 0x0810001d j 0x00400074 74 j desplazamiento 0x004000a0 0x02535025 or $10,$18,$19 78 or $t2, $s2, $s3 # Realizar la concatenación de A y Q 0x004000a4 0x24020004 addiu $2,$0,0x0000000481 li $v0, 4 0x004000a8 0x3c011001 lui $1,0x00001001 82 la $a0, resultado 0x004000ac 0x34240036 ori $4,$1,0x00000036 0x004000b0 0x0000000c syscall 83 syscall 0x004000b4 0x000a2021 addu $4,$0,$10 84 move $a0, $t2 0x004000b8 0x24020001 addiu $2,$0,0x0000000185 li $v0, 1 0x004000bc 0x0000000c syscall 86 syscall 0x004000c0 0x2402000a addiu $2,$0,0x0000000a89 li $v0, 10 0x004000c4 0x0000000c syscall 90 syscall