├── Lista 1 ├── bit-paridade.spim ├── num-distintos.spim ├── ola-mundo.spim ├── olamundo.pdf ├── piramides.spim ├── pneu.pdf ├── pneu.spim ├── soma-2-num.spim ├── soma2.pdf └── teleferico.spim ├── Lista 2 └── overflow-soma.spim ├── Lista 3 ├── l3-a.spim └── multi sem mul.spim ├── Lista 4 ├── conversao-temp.spim ├── media-ponderada.spim └── preco-consumidor.spim └── README.md /Lista 1/bit-paridade.spim: -------------------------------------------------------------------------------- 1 | # .data 2 | #msg4: .asciiz "Digite j: " 3 | #nl: .asciiz "\n" 4 | # .text 5 | #main: 6 | # # li (pseudoinstrucao): li reg, const => carrega o valor da constante no registrador reg 7 | # # la (pseudoinstrucao): la reg, rotulo => carrega o endereço de memória do rótulo no registrador reg 8 | # # move (pseudoinstrucao): move reg1, reg2 => reg1 = reg2 9 | # 10 | # # $s0: g 11 | # # $s1: h 12 | # # $s2: i 13 | # # $s3: j 14 | # 15 | # # Chama a funcao exemplo_folha 16 | # 17 | # # (a) - salva os argumentos da funcao 18 | # li $a0, 105 19 | # 20 | # # (b) - desvia o fluxo para a funcao 21 | # jal bitparidade # desvia o fluxo para exemplo_folha e salva o endereco da próxima instrucao em $ra 22 | # 23 | # # (c) - salva o retorno da funcao 24 | # move $s4, $v0 25 | # move $s5, $v1 26 | # 27 | # 28 | # # Imprime o resultado na tela 29 | # 30 | # li $v0, 1 31 | # move $a0, $s5 # $a0 = $t2, o numero a ser impresso 32 | # syscall 33 | # 34 | # # Imprime \n 35 | # li $v0, 4 36 | # la $a0, nl 37 | # syscall 38 | # 39 | # # Encerrar o programa 40 | # li $v0, 10 41 | # syscall 42 | bitparidade: 43 | # $a0 num menor q 128 44 | # $v0 bit paridade 45 | # $v1 num resultante 46 | # $t0 cnt loop 47 | # $t1 qnts 1 48 | # $t2 valor shift 49 | # $t3 qnt loops -> 7 50 | # $t4 salvador comparação 51 | # $t5 const 2 52 | # $t6 resto div 53 | move $t0, $zero # cnt loop = 0 54 | move $t1, $zero # qnt 1's = 0 55 | move $t2, $a0 # valor shift = num orig 56 | move $v1, $a0 # valor shift = num orig 57 | addi $t3, $zero, 7 # qnt loop = 7 58 | addi $t5, $zero, 2 # const = 2 59 | for: 60 | beq $t0, $t3, fimFor # if cnt loop = qnt loop -> jump fimFor 61 | 62 | andi $t4, $t2, 1 # verifica o bit menos significativo 63 | 64 | beq $t4, $zero, naoSoma # if bit menos significativo = 0 -> jump naoSoma 65 | addi $t1, $t1, 1 # qnt 1's++ 66 | 67 | naoSoma: 68 | srl $t2, $t2, 1 # $t2 = $t2 >> 1 faz o shift do valor, reduzindo um bit por vez 69 | 70 | addi $t0, $t0, 1 # cnt loop ++ 71 | j for # reinicia loop 72 | fimFor: 73 | # rem $t6, $t1, $t5 # t6 = t2 % t5 74 | div $t1, $t5 75 | mfhi $t6 76 | beq $t6, $zero, par # if t6 = 0 -> jump par 77 | addi $v0, $zero, 1 # v0 = 1 78 | ori $v1, $v1, 128 # altera o bit mais significativo 79 | j fimProg # jump fim prog 80 | par: 81 | move $v0, $zero # v0 = 0 82 | ori $v1, $v1, 0 83 | fimProg: 84 | 85 | jr $ra # retorna linha padrão do programa 86 | 87 | -------------------------------------------------------------------------------- /Lista 1/num-distintos.spim: -------------------------------------------------------------------------------- 1 | 2 | elemDistintos: 3 | # $a0 end base vetor 4 | # $a1 qnt elementos 5 | # $v0 qnt elementos distintos 6 | # $t2 contador loop 7 | # $t0 endereço da pos i 8 | # $t1 endereço da pos i+1 9 | # $t3 valor da pos i 10 | # $t4 valor da pos i+1 11 | 12 | move $v0, $zero #$v0 = 0 13 | move $t2, $zero #$t2 = 0 14 | move $t0, $a0 #$t0 = end base vetor 15 | addi $t1, $a0, 4 #$t0 = end base vetor + 4 16 | loop: 17 | 18 | lw $t3, 0($t0) #pega valor i 19 | lw $t4, 0($t1) #pega valor i+1 20 | beq $t3, $t4, naoSoma # t3 == t3, vai para ñ soma 21 | addi $v0, $v0, 1 # soma 1 qnt elem dist 22 | 23 | naoSoma: 24 | 25 | addi $t2, $t2, 1 # soma 1 em i 26 | addi $t0, $t0, 4 # soma 4 no endereço i -> i+1 27 | addi $t1, $t1, 4 # soma 4 no endereço i+1 -> i+2 28 | blt $t2, $a1, loop #recomeça loop se i == qnt num 29 | 30 | fimLoop: 31 | 32 | jr $ra # retorna pro caller -------------------------------------------------------------------------------- /Lista 1/ola-mundo.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | msg1: .asciiz "Ola Mundo" 4 | 5 | .text 6 | 7 | main: 8 | 9 | li $v0, 4 10 | la $a0, msg1 11 | syscall -------------------------------------------------------------------------------- /Lista 1/olamundo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dartmol203/FAC/c644add5d61fe9c0af15e1dc265d441f370d1e8a/Lista 1/olamundo.pdf -------------------------------------------------------------------------------- /Lista 1/piramides.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | ast: .byte 42 4 | spc: .byte 32 5 | nli: .byte 10 6 | 7 | .text 8 | main: 9 | #$t0 --- qnt linhas 10 | #$t1 --- contador loop1 (lin) 11 | #$t2 --- contador loop2 (spc) 12 | #$t3 --- contador loop3 (ast) 13 | #$t4 --- contador limite loop 2 14 | #$t5 --- contador limite loop 3 15 | 16 | #leitura do teclado 17 | li $v0, 5 18 | syscall 19 | 20 | move $t0, $v0 21 | addi $t0, $t0, -1 #qnt linhas -1 22 | 23 | move $t1, $zero 24 | j loopLin 25 | loopLin: 26 | bgt $t1, $t0, exit # break cnt loop1 > qntlinhas 27 | 28 | move $t2, $zero 29 | sub $t4, $t0, $t1 # qnt linhas - cntloop1 30 | 31 | move $t3, $zero 32 | move $t5, $t1 # cntloop3 = cntloop1 33 | add $t5, $t5, $t5 # cntloop3 * 2 34 | addi $t5, $t5, 1 # cntloop3 + 1 35 | j loopSpc #comecar subloop 36 | loopSpc: 37 | beq $t2, $t4, loopAst #break cnt loop2 = limite loop2 38 | 39 | li $v0, 11 40 | li $a0, 32 # imprimir espaço 41 | syscall 42 | 43 | addi $t2, $t2, 1 #somar 1 no contador 2 44 | j loopSpc #reiniciar loop 45 | loopAst: 46 | beq $t3, $t5, fimloop #break cnt loop3 = limite loop3 47 | 48 | li $v0, 11 49 | li $a0, 42 #imprimir asteristico 50 | syscall 51 | 52 | addi $t3, $t3, 1 #somar 1 no contador 3 53 | j loopAst #reiniciar loop 54 | 55 | fimloop: 56 | 57 | li $v0, 11 58 | li $a0, 10 #quebrar linha 59 | syscall 60 | 61 | addi $t1, $t1, 1 #somar 1 no contador 1 62 | j loopLin #reiniciar loop 63 | 64 | exit: 65 | li $v0, 10 66 | syscall 67 | 68 | -------------------------------------------------------------------------------- /Lista 1/pneu.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dartmol203/FAC/c644add5d61fe9c0af15e1dc265d441f370d1e8a/Lista 1/pneu.pdf -------------------------------------------------------------------------------- /Lista 1/pneu.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | .text 4 | 5 | main: 6 | 7 | li $v0, 5 8 | syscall 9 | move $t0, $v0 10 | 11 | li $v0, 5 12 | syscall 13 | move $t1, $v0 14 | 15 | sub $t2, $t0, $t1 16 | 17 | li $v0, 1 18 | move $a0, $t2 19 | syscall -------------------------------------------------------------------------------- /Lista 1/soma-2-num.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | msg1: .asciiz "Ola Mundo" 4 | 5 | .text 6 | 7 | main: 8 | 9 | li $v0, 5 10 | syscall 11 | move $t0, $v0 12 | 13 | li $v0, 5 14 | syscall 15 | move $t1, $v0 16 | 17 | add $t0, $t0, $t1 18 | 19 | li $v0, 1 20 | move $a0, $t0 21 | syscall 22 | -------------------------------------------------------------------------------- /Lista 1/soma2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dartmol203/FAC/c644add5d61fe9c0af15e1dc265d441f370d1e8a/Lista 1/soma2.pdf -------------------------------------------------------------------------------- /Lista 1/teleferico.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | .text 4 | 5 | main: 6 | 7 | li $v0, 5 8 | syscall 9 | move $t0, $v0 # C 10 | 11 | li $v0, 5 12 | syscall 13 | move $t1, $v0 # A 14 | 15 | move $t3, $zero # 0 16 | move $t4, $zero 17 | 18 | addi $t0, $t0, -1 #c-1 19 | 20 | Loop: 21 | sub $t1, $t1, $t0 #A - C-a 22 | addi $t3, $t3, 1 #contador 23 | slt $t4, $zero, $t1 # A > 0? 24 | beq $t4, 1, Loop 25 | 26 | fim: 27 | li $v0, 1 28 | move $a0, $t3 29 | syscall 30 | 31 | li $v0, 10 32 | syscall -------------------------------------------------------------------------------- /Lista 2/overflow-soma.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | msg1: .asciiz "overflow" 4 | 5 | 6 | .text 7 | main: 8 | #s0 = num 1 9 | #s1 = num 2 10 | #s2 = num 3 11 | # Le um numero inteiro do teclado 12 | li $v0, 5 # $v0 = 5 13 | syscall 14 | move $s0, $v0 # move para $s0 o valor lido do teclado que esta em $v0 15 | 16 | # Le um numero inteiro do teclado 17 | li $v0, 5 # $v0 = 5 18 | syscall 19 | move $s1, $v0 # move para $s0 o valor lido do teclado que esta em $v0 20 | 21 | # Le um numero inteiro do teclado 22 | li $v0, 5 # $v0 = 5 23 | syscall 24 | move $s2, $v0 # move para $s0 o valor lido do teclado que esta em $v0 25 | 26 | bne $s0, $zero, comSinal 27 | 28 | semSinal: 29 | nor $t3, $s1, $zero 30 | sltu $t3, $t3, $s2 31 | bne $t3, $zero, overflow 32 | 33 | j notoverflow 34 | comSinal: 35 | 36 | addu $t0, $s1, $s2 # $t0 = $s0 + $s2 37 | 38 | xor $t3, $s1, $s2 # $t3 = $s1 ^ $s2 39 | 40 | slt $t3, $t3, $zero # $t3 < 0? 41 | 42 | bne $t3, $zero, notoverflow # $t3 != 0? -> notoverflow 43 | 44 | xor $t3, $t0, $s2 # $t3 = $t0 ^ $s2 45 | 46 | slt $t3, $t3, $zero # $t3 < 0? 47 | 48 | bne $t3, $zero, overflow # $t3 != 0? -> overflow 49 | j notoverflow # jump to notoverflow 50 | 51 | overflow: 52 | 53 | li $v0, 4 # $v0 = 4 54 | la $a0, msg1 # carrega em $a0 o endereço de memória de res 55 | syscall 56 | 57 | j fim # jump to fim 58 | 59 | notoverflow: 60 | 61 | add $t0, $s1, $s2 62 | 63 | li $v0, 1 64 | move $a0, $t0 # $a0 = $t2, o numero a ser impresso 65 | syscall 66 | 67 | j fim 68 | fim: 69 | # Encerrar o programa 70 | li $v0, 10 71 | syscall -------------------------------------------------------------------------------- /Lista 3/l3-a.spim: -------------------------------------------------------------------------------- 1 | #.data 2 | # 3 | #msg1: .asciiz "Digite g: " 4 | #msg2: .asciiz "Digite h: " 5 | #msg3: .asciiz "Digite i: " 6 | #msg4: .asciiz "Digite j: " 7 | #res: .asciiz "f = (g + h) - (i + j) = " 8 | #nl: .asciiz "\n" 9 | # 10 | # .text 11 | #main: 12 | # # li (pseudoinstrucao): li reg, const => carrega o valor da constante no registrador reg 13 | # # la (pseudoinstrucao): la reg, rotulo => carrega o endereço de memória do rótulo no registrador reg 14 | # # move (pseudoinstrucao): move reg1, reg2 => reg1 = reg2 15 | # 16 | # # $s0: g 17 | # # $s1: h 18 | # # $s2: i 19 | # # $s3: j 20 | # 21 | # # Imprime msg1 na tela 22 | # li $v0, 4 # $v0 = 4 23 | # la $a0, msg1 # carrega em $a0 o endereço de memória de msg1 24 | # syscall 25 | # 26 | # # Le um numero inteiro do teclado 27 | # li $v0, 5 # $v0 = 5 28 | # syscall 29 | # move $s0, $v0 # move para $s0 o valor lido do teclado que esta em $v0 30 | # 31 | # # Imprime msg2 na tela 32 | # li $v0, 4 # $v0 = 4 33 | # la $a0, msg2 # carrega em $a0 o endereço de memória de msg2 34 | # syscall 35 | # 36 | # # Le um numero inteiro do teclado 37 | # li $v0, 5 # $v0 = 5 38 | # syscall 39 | # move $s1, $v0 # move para $s0 o valor lido do teclado que esta em $v0 40 | # 41 | # 42 | # 43 | # # Chama a funcao exemplo_folha 44 | # 45 | # # (a) - salva os argumentos da funcao 46 | # move $a0, $s0 47 | # move $a1, $s1 48 | # 49 | # # (b) - desvia o fluxo para a funcao 50 | # jal multfac # desvia o fluxo para exemplo_folha e salva o endereco da próxima instrucao em $ra 51 | # 52 | # mfhi $s0 53 | # mflo $s1 54 | # 55 | # li $v0, 1 56 | # move $a0, $s0 # $a0 = $t2, o numero a ser impresso 57 | # syscall 58 | # 59 | # # Imprime \n 60 | # li $v0, 4 61 | # la $a0, nl 62 | # syscall 63 | # 64 | # li $v0, 1 65 | # move $a0, $s1 # $a0 = $t2, o numero a ser impresso 66 | # syscall 67 | # 68 | # # Imprime \n 69 | # li $v0, 4 70 | # la $a0, nl 71 | # syscall 72 | # 73 | # # Encerrar o programa 74 | # li $v0, 10 75 | # syscall 76 | 77 | multfac: 78 | 79 | move $t3, $zero 80 | 81 | slt $t0, $a0, $zero 82 | slt $t1, $a1, $zero # $t1 = ($a1 < $zero) ? 1 : 0 83 | 84 | beq $t0, $zero, aPos 85 | 86 | neg $a0, $a0 87 | #addi $a0, $a0, 1 88 | aPos: 89 | 90 | beq $t1, $zero, bPos 91 | 92 | neg $a1, $a1 93 | #addi $a1, $a1, 1 94 | bPos: 95 | 96 | beq $t0, $t1, sinaisIguais # if $t0 == $t1 then Sinais iguais 97 | 98 | addi $t3, $t3, 1 99 | 100 | sinaisIguais: 101 | 102 | move $t6, $zero 103 | move $t7, $zero 104 | 105 | beq $a0, $zero, done 106 | beq $a1, $zero, done 107 | 108 | move $t4, $zero 109 | 110 | loop: 111 | andi $t5, $a1, 1 112 | beq $t5, $zero, next 113 | addu $t6, $t6, $a0 114 | sltu $t5, $t6, $a0 115 | addu $t7, $t7, $t5 116 | addu $t7, $t7, $t4 117 | 118 | next: 119 | 120 | srl $t5, $a0, 31 121 | sll $a0, $a0, 1 122 | sll $t4, $t4, 1 123 | addu $t4, $t4, $t5 124 | 125 | srl $a1, $a1, 1 126 | bne $a1, $zero, loop 127 | 128 | done: 129 | 130 | beq $t3, $zero, segue 131 | 132 | not $t7, $t7 133 | neg $t6, $t6 134 | 135 | 136 | segue: 137 | 138 | mthi $t7 139 | mtlo $t6 140 | 141 | jr $ra -------------------------------------------------------------------------------- /Lista 3/multi sem mul.spim: -------------------------------------------------------------------------------- 1 | .data 2 | 3 | promptStart: .asciiz "This program does AxB without using mult or div" 4 | getA: .asciiz "Please enter the first number(multiplicand): " 5 | getB: .asciiz "Please enter the second number(multiplier): " 6 | 7 | space: .asciiz " " 8 | 9 | result: .asciiz "The product, using my program is: " 10 | mipMult: .asciiz "The product, using MIPs multu is: " 11 | 12 | endLine: .asciiz "\n" 13 | 14 | .text 15 | 16 | main: 17 | #"welcome" screen 18 | li $v0,4 # code for print_string 19 | la $a0,promptStart # point $a0 to prompt string 20 | syscall # print the prompt 21 | 22 | 23 | li $v0,4 # code for print_string 24 | la $a0,endLine # point $a0 to prompt string 25 | syscall # print the prompt 26 | 27 | #prompt for multiplicand 28 | li $v0,4 # code for print_string 29 | la $a0,getA # point $a0 to prompt string 30 | syscall # print the prompt 31 | 32 | #acquire multiplicand 33 | li $v0,5 # code for read_int 34 | syscall # get an int from user --> returned in $v0 35 | move $s0,$v0 # move the resulting int to $s0 36 | move $s5,$s0 # copy of multiplicand to use in multu 37 | 38 | #prompt for multiplier 39 | li $v0,4 # code for print_string 40 | la $a0,getB # point $a0 to prompt string 41 | syscall # print the prompt 42 | 43 | #acquire multiplier 44 | li $v0,5 # code for read_int 45 | syscall # get an int from user --> returned in $v0 46 | move $s1,$v0 # move the resulting int to $s0 47 | 48 | move $s6,$s1 # copy of multiplier to use in multu 49 | 50 | jal MyMult 51 | j print 52 | 53 | MyMult: 54 | move $s3, $0 # lw product 55 | move $s4, $0 # hw product 56 | 57 | beq $s1, $0, done 58 | beq $s0, $0, done 59 | 60 | move $s2, $0 # extend multiplicand to 64 bits 61 | 62 | loop: 63 | andi $t0, $s0, 1 # LSB(multiplier) 64 | beq $t0, $0, next # skip if zero 65 | addu $s3, $s3, $s1 # lw(product) += lw(multiplicand) 66 | sltu $t0, $s3, $s1 # catch carry-out(0 or 1) 67 | addu $s4, $s4, $t0 # hw(product) += carry 68 | addu $s4, $s4, $s2 # hw(product) += hw(multiplicand) 69 | next: 70 | # shift multiplicand left 71 | srl $t0, $s1, 31 # copy bit from lw to hw 72 | sll $s1, $s1, 1 73 | sll $s2, $s2, 1 74 | addu $s2, $s2, $t0 75 | 76 | srl $s0, $s0, 1 # shift multiplier right 77 | bne $s0, $0, loop 78 | 79 | done: 80 | jr $ra 81 | 82 | print: 83 | # print result string 84 | li $v0,4 # code for print_string 85 | la $a0,result # point $a0 to string 86 | syscall # print the result string 87 | 88 | # print out the result 89 | li $v0,1 # code for print_int 90 | move $a0,$s4 # put result in $a0 91 | syscall # print out result 92 | 93 | li $v0,4 # code for print_string 94 | la $a0,space # point $a0 to string 95 | syscall # print the result string 96 | 97 | li $v0,1 # code for print_int 98 | move $a0,$s3 # put result in $a0 99 | syscall # print out result 100 | 101 | 102 | # print the line feed 103 | li $v0,4 # code for print_string 104 | la $a0,endLine # point $a0 to string 105 | syscall # print the linefeed 106 | 107 | doMult: 108 | #Do same computation using Mult 109 | multu $s5, $s6 110 | mfhi $t0 111 | mflo $t1 112 | 113 | li $v0,4 # code for print_string 114 | la $a0,mipMult # point $a0 to string 115 | syscall 116 | 117 | # print out the result 118 | li $v0,1 # code for print_int 119 | move $a0,$t0 # put high in $a0 120 | syscall # print out result 121 | 122 | li $v0,4 # code for print_string 123 | la $a0,space # point $a0 to string 124 | syscall # print the result string 125 | 126 | # print out the result 127 | li $v0,1 # code for print_int 128 | move $a0,$t1 # put low in $a0 129 | syscall # print out result 130 | 131 | # print the line feed 132 | li $v0,4 # code for print_string 133 | la $a0,endLine # point $a0 to string 134 | syscall # print the linefeed 135 | 136 | # All done, thank you! 137 | li $v0,10 # code for exit 138 | syscall # exit program -------------------------------------------------------------------------------- /Lista 4/conversao-temp.spim: -------------------------------------------------------------------------------- 1 | .data 2 | Celcius: .byte 'C' 3 | far: .byte 'F' 4 | kelvin: .byte 'K' 5 | teste: .asciiz "cheguei aqui\n" 6 | constsF2C: .float 5.0, 9.0, 32.0 7 | constsC2K: .float 273.15 8 | nl: .asciiz "\n" 9 | 10 | .text 11 | 12 | main: 13 | 14 | li $v0, 12 15 | syscall 16 | move $t0, $v0 17 | 18 | li $v0, 12 19 | syscall 20 | 21 | li $v0, 12 22 | syscall 23 | move $t1, $v0 24 | 25 | li $v0, 12 26 | syscall 27 | 28 | li $v0, 6 29 | syscall 30 | 31 | lb $s0, Celcius 32 | 33 | beq $t0, $s0, celso 34 | 35 | lb $s0, far 36 | 37 | beq $t0, $s0, faren 38 | 39 | kevin: 40 | lb $s0, Celcius 41 | 42 | beq $t1, $s0, KtoC 43 | 44 | KtoF: #feito 45 | 46 | lwc1 $f2, constsC2K 47 | 48 | sub.s $f0, $f0, $f2 49 | 50 | j CtoF 51 | 52 | KtoC: #feito 53 | 54 | lwc1 $f2, constsC2K 55 | 56 | sub.s $f0, $f0, $f2 57 | 58 | j mostrar 59 | 60 | faren: 61 | 62 | lb $s0, Celcius 63 | 64 | beq $t1, $s0, FtoC 65 | 66 | FtoK: #feito 67 | 68 | la $t3, constsF2C 69 | lwc1 $f2, 0($t3) 70 | lwc1 $f3, 4($t3) 71 | lwc1 $f4, 8($t3) 72 | 73 | div.s $f1, $f2, $f3 74 | sub.s $f0, $f0, $f4 75 | mul.s $f0, $f0, $f1 76 | 77 | lwc1 $f2, constsC2K 78 | 79 | add.s $f0, $f0, $f2 80 | 81 | j mostrar 82 | 83 | FtoC: #feito 84 | 85 | la $t3, constsF2C 86 | lwc1 $f2, 0($t3) 87 | lwc1 $f3, 4($t3) 88 | lwc1 $f4, 8($t3) 89 | 90 | div.s $f1, $f2, $f3 91 | sub.s $f0, $f0, $f4 92 | mul.s $f0, $f0, $f1 93 | 94 | j mostrar 95 | 96 | celso: 97 | 98 | lb $s0, far 99 | 100 | beq $t1, $s0, CtoF 101 | 102 | CtoK: #feito 103 | 104 | lwc1 $f2, constsC2K 105 | 106 | add.s $f0, $f0, $f2 107 | 108 | j mostrar 109 | 110 | CtoF: #feito 111 | 112 | la $t3, constsF2C 113 | lwc1 $f2, 0($t3) # $f2 = 5.0 114 | lwc1 $f3, 4($t3) # $f3 = 9.0 115 | lwc1 $f4, 8($t3) # $f4 = 32.0 116 | 117 | div.s $f1, $f3, $f2 118 | mul.s $f1, $f1, $f0 119 | add.s $f0, $f1, $f4 120 | 121 | j mostrar 122 | 123 | mostrar: 124 | 125 | li $v0, 2 126 | mov.s $f12, $f0 127 | syscall 128 | 129 | li $v0, 4 130 | la $a0, nl 131 | syscall 132 | 133 | li $v0, 10 134 | syscall -------------------------------------------------------------------------------- /Lista 4/media-ponderada.spim: -------------------------------------------------------------------------------- 1 | .data 2 | nl: .asciiz "\n" 3 | const: .float 0.0 4 | .text 5 | 6 | main: 7 | 8 | li $v0, 5 9 | syscall 10 | move $s0, $v0 11 | 12 | move $t0, $zero 13 | lwc1 $f1, const 14 | lwc1 $f2, const 15 | 16 | loop: 17 | 18 | beq $t0, $s0, calMedia 19 | 20 | li $v0, 6 21 | syscall 22 | mov.s $f3, $f0 23 | 24 | add.s $f1, $f1, $f0 25 | 26 | li $v0, 6 27 | syscall 28 | 29 | mul.s $f4, $f3, $f0 30 | 31 | add.s $f2, $f2, $f4 32 | 33 | addi $t0, $t0, 1 34 | 35 | j loop 36 | 37 | calMedia: 38 | div.s $f5, $f2, $f1 39 | 40 | li $v0, 2 41 | mov.s $f12, $f5 42 | syscall 43 | 44 | # Imprime o \n 45 | li $v0, 4 46 | la $a0, nl 47 | syscall 48 | 49 | # Encerra o programa 50 | li $v0, 10 51 | syscall 52 | 53 | -------------------------------------------------------------------------------- /Lista 4/preco-consumidor.spim: -------------------------------------------------------------------------------- 1 | .data 2 | nl: .asciiz "\n" 3 | const: .double 100.0 4 | .text 5 | 6 | main: 7 | li $v0, 7 8 | syscall 9 | mov.d $f2, $f0 10 | 11 | li $v0, 7 12 | syscall 13 | mov.d $f4, $f0 14 | 15 | li $v0, 7 16 | syscall 17 | mov.d $f6, $f0 18 | ldc1 $f10, const 19 | 20 | div.d $f4, $f4, $f10 21 | mul.d $f8, $f2, $f4 22 | add.d $f0, $f2, $f8 23 | 24 | div.d $f6, $f6, $f10 25 | mul.d $f8, $f2, $f6 26 | add.d $f0, $f0, $f8 27 | 28 | li $v0, 3 29 | mov.d $f12, $f0 30 | syscall 31 | 32 | 33 | 34 | # Imprime o \n 35 | li $v0, 4 36 | la $a0, nl 37 | syscall 38 | 39 | # Encerra o programa 40 | li $v0, 10 41 | syscall 42 | 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FAC --------------------------------------------------------------------------------