Baixe o app para aproveitar ainda mais
Prévia do material em texto
Q15) Faça uma função que receba um número inteiro positivo 𝑛 e calcule o seu fatorial, 𝑛! Resposta 15: .text main: addi $2, $0, 5 syscall add $4, $0, $2 jal fatorial add $4, $0, $2 addi $2, $0, 1 syscall addi $2, $0, 10 syscall fatorial: addi $8, $0, 1 addi $9, $0, 1 laco: beq $8, $4, fim_programa addi $8, $8, 1 mul $9, $9, $8 j laco fim_programa: add $2, $0, $9 jr $31 Q16) Escreva uma função para determinar a quantidade de números primos abaixo 𝑁. Resposta 16: .text main: addi $2, $0, 5 syscall addi $4, $2, 0 sub $4, $4, 1 addi $11, $0, 1 addi $19, $0, 2 jal for fim_programa: addi $2, $0, 11 addi $4, $0, 'P' syscall addi $2, $0, 11 addi $4, $0, ':' syscall addi $2, $0, 11 addi $4, $0, ' ' syscall addi $2, $0, 1 addi $4, $18, 0 syscall addi $2, $0, 10 syscall for: bne $11, $4, continua_for jr $31 continua_for: addi $11, $11, 1 beq $11, $19, num_2 j verifica_se_eh_par verifica_se_eh_par: andi $15, $11, 1 beq $15, $0, for j redefinindo_$14 redefinindo_$14: addi $14, $0, 1 j Intervalo_Divisor_Numero Intervalo_Divisor_Numero: addi $14, $14, 1 bne $14, $11, continua j verificar_se_acabou continua: div $16, $11, $14 mfhi $16 beq $16, $0, for j verificar_se_acabou verificar_se_acabou: bne $14, $11, Intervalo_Divisor_Numero addi $18, $18, 1 j for num_2: addi $18, $18, 1 j for Q17) Escreva uma função que gera um triângulo de altura e lados 𝑛 e base 2 ∗ 𝑛 − 1. Por exemplo, a saída para 𝑛 = 6 seria: * *** ***** ******* ********* *********** Resposta 17: .text main: addi $2, $0, 5 syscall addi $8, $2, 0 addi $9, $0, 0 addi $10, $0, 1 addi $11, $0, 0 jal for addi $2, $0, 10 syscall for: beq $9, $8, fim_tudo continuacao: beq $11, $10, proxima_linha addi $2, $0, 11 addi $4, $0, '*' syscall addi $11, $11, 1 j continuacao proxima_linha: addi $2, $0, 11 addi $4, $0, '\n' syscall addi $10, $10, 2 addi $9, $9, 1 addi $11, $0, 0 j for fim_tudo: jr $31 Q18) Escreva uma função que recebe um inteiro 𝑛 e imprime o Triângulo de Floyd de 𝑛 linhas. Ex.: 𝑛 = 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Resposta 18: .text main: addi $2, $0, 5 syscall addi $8, $2, 0 addi $9, $0, 1 addi $10, $0, 0 addi $11, $0, 1 jal calculo Finaliza_Programa: addi $2, $0, 10 syscall calculo: bne $9, $8, continua_calculo jr $31 continua_calculo: bne $10, $9, imprime_na_mesma_linha j imprime_na_proxima_linha imprime_na_mesma_linha: addi $2, $0, 1 addi $4, $11, 0 addi $10, $10, 1 syscall addi $2, $0, 11 addi $4, $0, ' ' syscall addi $11, $11, 1 beq $10, $9, calculo j imprime_na_mesma_linha imprime_na_proxima_linha: addi $9, $9, 1 addi $10, $0, 0 addi $2, $0, 11 addi $4, $0, '\n' syscall j imprime_na_mesma_linha Q19) Escreva uma função que leia um inteiro entre 0 e 255 e retorne os valores dos nibbles menos significativo e de segunda ordem. O programa principal deve imprimir os valores recebidos. nibble menos significativo = 01112 = 7 Ex.: num = 55 => 000...001101112 nibble de segunda ordem = 00112 = 3 Resposta 19: .text main: addi $8, $0, 2 addi $11, $0, 1 addi $12, $0, 8 addi $13, $0, 0 addi $14, $0, 0 addi $15, $0, 10000000 addi $18, $0, 0 addi $19, $0, 0 addi $20, $0, 1 addi $25, $0, 1000 addi $2, $0, 5 syscall addi $9, $2, 0 jal for add $4, $0, 'M' addi $2, $0, 11 syscall add $4, $0, 'S' addi $2, $0, 11 syscall add $4, $0, ':' addi $2, $0, 11 syscall add $4, $0, ' ' addi $2, $0, 11 syscall addi $4, $19, 0 addi $2, $0, 1 syscall add $4, $0, '\n' addi $2, $0, 11 syscall add $4, $0, 'S' addi $2, $0, 11 syscall add $4, $0, 'O' addi $2, $0, 11 syscall add $4, $0, ':' addi $2, $0, 11 syscall add $4, $0, ' ' addi $2, $0, 11 syscall addi $4, $18, 0 addi $2, $0, 1 syscall addi $2, $0, 10 syscall for: beq $12, $13, Termos_Segunda_Ordem div $9, $8 mflo $10 mfhi $4 mul $16, $4, $15 add $14, $14, $16 div $15, $15, 10 add $9, $10, 0 addi $13, $13, 1 j for Termos_Segunda_Ordem: div $14, $14, 10000 mfhi $17 Inversao_Segunda_Ordem: beq $17, $0, Contagem_Termos_Segunda_Ordem div $17, $17, 10 mfhi $21 mul $22, $21, $25 add $23, $23, $22 div $25, $25, 10 j Inversao_Segunda_Ordem Contagem_Termos_Segunda_Ordem: beq $23, $0, Inversao_Menos_Significativo div $23, $23, 10 mfhi $21 mul $24, $21, $20 add $18, $18, $24 mul $20, $20, 2 j Contagem_Termos_Segunda_Ordem Inversao_Menos_Significativo: addi $25, $0, 1000 Inversao: beq $14, $0, Contagem_Nibble_Menos_Significativo div $14, $14, 10 mfhi $21 mul $22, $21, $25 add $23, $23, $22 div $25, $25, 10 j Inversao Contagem_Nibble_Menos_Significativo: addi $20, $0, 1 Contagem_Menos_Significativo: beq $23, $0, Fim_Laco div $23, $23, 10 mfhi $21 mul $24, $21, $20 add $19, $19, $24 mul $20, $20, 2 j Contagem_Menos_Significativo Fim_Laco: jr $31 Q20) Considere uma matriz quadrada 𝑛 × 𝑛 mapeada em um vetor linha de tamanho 𝑛 ∙ 𝑛. Veja um exemplo para 𝑛 = 3. 1 3 5 [2 4 7] ⟹ [1 3 5 2 4 7 9 0 8] 9 0 8 Escreva uma função que receba 𝑛, 𝑙𝑖𝑛ℎ𝑎 e 𝑐𝑜𝑙𝑢𝑛𝑎 de uma matriz quadrada e retorne o í𝑛𝑑𝑖𝑐𝑒 do vetor correspondente. (considere 𝑙𝑖𝑛ℎ𝑎 e 𝑐𝑜𝑙𝑢𝑛𝑎 começando em 0, assim como o í𝑛𝑑𝑖𝑐𝑒 do vetor). Para o exemplo, dados 𝑛 = 3, 𝑙𝑖𝑛ℎ𝑎 = 1 e 𝑐𝑜𝑙𝑢𝑛𝑎 = 2, a função retorna í𝑛𝑑𝑖𝑐𝑒 = 5 1 3 5 ] ⟹ [1 3 5 2 4 7 9 0 8] 𝑐𝑜 𝑙𝑢 𝑛 𝑎 = 2 í𝑛 𝑑 𝑖𝑐 𝑒 = 5 𝑙𝑖𝑛ℎ𝑎 = 1 [2 4 7 9 0 8 Resposta 20: .text main: addi $2, $0, 5 syscall addi $8, $2, 0 addi $2, $0, 5 syscall addi $9, $2, 0 addi $2, $0, 5 syscall addi $10, $2, 0 addi $11, $0, 0 addi $12, $0, 0 addi $13, $0, 0 jal calculo addi $4, $13, 0 addi $2, $0, 1 syscall addi $2, $0, 10 syscall calculo: mul $13, $8, $11 beq $9, $11, Linha_Encontrada addi $11, $11, 1 j calculo Linha_Encontrada: add $13, $13, $10 jr $31
Compartilhar