.CODE [0x00400020] 0x3c0800f3 lui $8, 243 ; 12: lui $t0,0xf3 # [0x00400024] 0x35080023 ori $8, $8, 35 ; 13: ori $t0,$t0,0x23 # $t0<= 0x00f30023 [0x00400028] 0x3c090052 lui $9, 82 ; 14: lui $t1,0x52 # [0x0040002c] 0x352900e2 ori $9, $9, 226 ; 15: ori $t1,$t1,0xe2 # $t1<= 0x005200e2 [0x00400030] 0x3c0a0000 lui $10, 0 ; 16: lui $t2,0x00 # [0x00400034] 0x354a008f ori $10, $10, 143 ; 17: ori $t2,$t2,0x8f # $t2<= 0x0000008f [0x00400038] 0x112a002e beq $9, $10, 184 [loop-0x00400038]; 18: beq $t1,$t2,loop [0x0040003c] 0x152a0002 bne $9, $10, 8 [next_i-0x0040003c]; 19: bne $t1,$t2,next_i [0x00400040] 0x254a008f addiu $10, $10, 143 ; 20: addiu $t2,$t2,0x8f # Obviamente, esta instrução nunca deve executar [0x00400044] 0x01095821 addu $11, $8, $9 ; 21: addu $t3,$t0,$t1 [0x00400048] 0x01096023 subu $12, $8, $9 ; 22: subu $t4,$t0,$t1 [0x0040004c] 0x01296823 subu $13, $9, $9 ; 23: subu $t5,$t1,$t1 [0x00400050] 0x01097024 and $14, $8, $9 ; 24: and $t6,$t0,$t1 [0x00400054] 0x01097825 or $15, $8, $9 ; 25: or $t7,$t0,$t1 [0x00400058] 0x0109c026 xor $24, $8, $9 ; 26: xor $t8,$t0,$t1 [0x0040005c] 0x0109c827 nor $25, $8, $9 ; 27: nor $t9,$t0,$t1 [0x00400060] 0x01090019 multu $8, $9 ; 28: multu $t0,$t1 [0x00400064] 0x00008010 mfhi $16 ; 29: mfhi $s0 [0x00400068] 0x00008812 mflo $17 ; 30: mflo $s1 [0x0040006c] 0x0109001b divu $8, $9 ; 31: divu $t0,$t1 # Hi,Lo<= 0x00f30023 mod,/ 0x005200e2 = 0x4efe5f,0x00000002 [0x00400070] 0x250800ab addiu $8, $8, 171 ; 32: addiu $t0,$t0,0x00ab # $t0<= 0x00f30023 + 0x000000ab = 0x00f300ce [0x00400074] 0x310800ab andi $8, $8, 171 ; 33: andi $t0,$t0,0x00ab # $t0<= 0x00f300ce and 0x000000ab = 0x0000008a [0x00400078] 0x3908ffab xori $8, $8, -85 ; 34: xori $t0,$t0,0xffab # $t0<= 0x0000008a xor 0x0000ffab = 0x0000ff21 [0x0040007c] 0x00084100 sll $8, $8, 4 ; 35: sll $t0,$t0,4 [0x00400080] 0x00084242 srl $8, $8, 9 ; 36: srl $t0,$t0,9 [0x00400084] 0x24120008 addiu $18, $0, 8 ; 37: addiu $s2,$zero,8 # $s2<= 0x00000008 [0x00400088] 0x02594004 sllv $8, $25, $18 ; 38: sllv $t0,$t9,$s2 [0x0040008c] 0x02484004 sllv $8, $8, $18 ; 39: sllv $t0,$t0,$s2 [0x00400090] 0x02484004 sllv $8, $8, $18 ; 40: sllv $t0,$t0,$s2 [0x00400094] 0x00084103 sra $8, $8, 4 ; 41: sra $t0,$t0,4 [0x00400098] 0x02484007 srav $8, $8, $18 ; 42: srav $t0,$t0,$s2 [0x0040009c] 0x02484006 srlv $8, $8, $18 ; 43: srlv $t0,$t0,$s2 [0x004000a0] 0x3c011001 lui $1, 4097 [array] ; 44: la $t0,array # coloca em $t0 o endereço inicial do vetor array (0x10010000) [0x004000a4] 0x34280000 ori $8, $1, 0 [array] [0x004000a8] 0x91090006 lbu $9, 6($8) ; 45: lbu $t1,6($t0) [0x004000ac] 0x392900ff xori $9, $9, 255 ; 46: xori $t1,$t1,0xff # $t1<= 0x00000010, inverte byte inferior [0x004000b0] 0xa1090006 sb $9, 6($8) ; 47: sb $t1,6($t0) [0x004000b4] 0x24080001 addiu $8, $0, 1 ; 49: addiu $t0,$zero,0x1 # $t0<= 0x00000001 [0x004000b8] 0x00084023 subu $8, $0, $8 ; 50: subu $t0,$zero,$t0 [0x004000bc] 0x0501000d bgez $8 52 [loop-0x004000bc] ; 51: bgez $t0,loop [0x004000c0] 0x0109582a slt $11, $8, $9 ; 52: slt $t3,$t0,$t1 [0x004000c4] 0x0109582b sltu $11, $8, $9 ; 53: sltu $t3,$t0,$t1 [0x004000c8] 0x290b0001 slti $11, $8, 1 ; 54: slti $t3,$t0,0x1 # $t3<= 0x00000001, pois -1 < 1 [0x004000cc] 0x2d0b0001 sltiu $11, $8, 1 ; 55: sltiu $t3,$t0,0x1 # $t3<= 0x00000000, pois (2^32)-1 > 1 [0x004000d0] 0x3c011001 lui $1, 4097 [array] ; 59: la $t0,array # coloca em $t0 o endereço do vetor (0x10010000) [0x004000d4] 0x34280000 ori $8, $1, 0 [array] [0x004000d8] 0x3c011001 lui $1, 4097 [size] ; 60: la $t1,size # coloca em $t1 o endereço do tamanho do vetor [0x004000dc] 0x34290020 ori $9, $1, 32 [size] [0x004000e0] 0x8d290000 lw $9, 0($9) ; 61: lw $t1,0($t1) [0x004000e4] 0x3c011001 lui $1, 4097 [const] ; 62: la $t2,const # coloca em $t2 o endereço da constante [0x004000e8] 0x342a0024 ori $10, $1, 36 [const] [0x004000ec] 0x8d4a0000 lw $10, 0($10) ; 63: lw $t2,0($t2) [0x004000f0] 0x19200007 blez $9 28 [end_add-0x004000f0] ; 64: blez $t1,end_add [0x004000f4] 0x8d0b0000 lw $11, 0($8) ; 65: lw $t3,0($t0) [0x004000f8] 0x016a5821 addu $11, $11, $10 ; 66: addu $t3,$t3,$t2 [0x004000fc] 0xad0b0000 sw $11, 0($8) ; 67: sw $t3,0($t0) [0x00400100] 0x25080004 addiu $8, $8, 4 ; 68: addiu $t0,$t0,4 # atualiza ponteiro do vetor. Lembrar, 1 palavra=4 posições de memória [0x00400104] 0x2529ffff addiu $9, $9, -1 ; 69: addiu $t1,$t1,-1 # decrementa contador de tamanho do vetor [0x00400108] 0x0810003c j 0x004000f0 [loop] ; 70: j loop [0x0040010c] 0x27bdfffc addiu $29, $29, -4 ; 74: addiu $sp,$sp,-4 # assume-se $sp inicializado, aloca espaço na pilha [0x00400110] 0xafbf0000 sw $31, 0($29) ; 76: sw $ra,0($sp) [0x00400114] 0x0c100049 jal 0x00400124 [sum_tst] ; 77: jal sum_tst [0x00400118] 0x8fbf0000 lw $31, 0($29) ; 78: lw $ra,0($sp) [0x0040011c] 0x27bd0004 addiu $29, $29, 4 ; 79: addiu $sp,$sp,4 # atualiza apontador de pilha [0x00400120] 0x03e00008 jr $31 ; 80: jr $ra # volta para o "sistema operacional" FIM DO PROGRAMA AQUI [0x00400124] 0x3c011001 lui $1, 4097 [var_a] ; 82: la $t0,var_a # pega endereço da primeira variável (pseudo-instrução) [0x00400128] 0x34280028 ori $8, $1, 40 [var_a] [0x0040012c] 0x8d080000 lw $8, 0($8) ; 83: lw $t0,0($t0) [0x00400130] 0x3c011001 lui $1, 4097 [var_b] ; 84: la $t1,var_b # pega endereço da segunda variável (pseudo-instrução) [0x00400134] 0x3429002c ori $9, $1, 44 [var_b] [0x00400138] 0x8d290000 lw $9, 0($9) ; 85: lw $t1,0($t1) [0x0040013c] 0x01285021 addu $10, $9, $8 ; 86: addu $t2,$t1,$t0 [0x00400140] 0x27bdfff8 addiu $29, $29, -8 ; 87: addiu $sp,$sp,-8 # aloca espaço na pilha [0x00400144] 0xafaa0000 sw $10, 0($29) ; 88: sw $t2,0($sp) [0x00400148] 0xafbf0004 sw $31, 4($29) ; 89: sw $ra,4($sp) [0x0040014c] 0x3c010040 lui $1, 64 [ver_ev] ; 90: la $t3,ver_ev # pega endereço da subrotina ver_ev (pseudo-instrução) [0x00400150] 0x342b0164 ori $11, $1, 356 [ver_ev] [0x00400154] 0x0160f809 jalr $31, $11 ; 91: jalr $ra,$t3 [0x00400158] 0x8fbf0004 lw $31, 4($29) ; 92: lw $ra,4($sp) [0x0040015c] 0x27bd0008 addiu $29, $29, 8 ; 93: addiu $sp,$sp,8 # atualiza apontador de pilha [0x00400160] 0x03e00008 jr $31 ; 94: jr $ra # PROGRAMA ACABA AQUI. Retorna para quem chamou [0x00400164] 0x8fab0000 lw $11, 0($29) ; 96: lw $t3,0($sp) [0x00400168] 0x316b0001 andi $11, $11, 1 ; 97: andi $t3,$t3,1 # $t3 <= 1 se parâmetro é ímpar, 0 caso contrário [0x0040016c] 0x03e00008 jr $31 ; 98: jr $ra # e retorna .DATA [0x10010000] 0xabcdef03 0xcdefab18 0xefabcd35 0xbadcfeab [0x10010010] 0xdcfebacd 0xfebadc77 0xdefabc53 0xcbafed45 [0x10010020] 0x00000008 0xffffffff 0x000000ff 0x00000100