Buscar

Lista 04 Assembly MIPS - Modularização

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 10 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais