Lista de Exercício de Organização de Computadores
Por: Salezio.Francisco • 28/3/2018 • 2.048 Palavras (9 Páginas) • 372 Visualizações
...
2)
add $v0, $s1, $v0 # v0 = fib(s0-1) + fib(s0-2)
sair: lw $ra, 0($sp) # recupera os dados da pilha
lw $s0, 4($sp)
lw $s1, 8($sp)
addi $sp, $sp, 12 # oblitera a pilha
j $ra # volta para a funcao pai
Questão 3 (1 ponto): Implemente o código do SelectionSort em assembly MIPS para um vetor de 20 posições e valores inteiros distintos informados pelo usuário.
.data
vetor: .space 80
string: .asciiz "\nDigite um valor: "
string2: .asciiz "\nResultado: "
string3: .asciiz " "
tam: .word 20
.text
main: la $s0, vetor # s0 = &vetor
la $s1, tam # s1 = &tam
lw $s1, 0($s1) # s1 = tam
scan: beq $s1, $zero, fimscan # if s1 == 0 -> fimscan
li $v0, 4
la $a0, string
syscall # imprime string
li $v0, 5
syscall # le um valor
sw $v0, 0($s0) # salva em vetor[x]
addi $s0, $s0, 4
addi $s1, $s1, -1
j scan
fimscan: la $s0, vetor # s0 = &vetor
la $s1, tam # s1 = &tam
lw $s1, 0($s1) # s1 = tam
li $t0, 0 # t0 = 0 (i++)
addi $t1, $s1, -1 # t1 = s1 - 1 (tam - 1)
forI: beq $t0, $t1, fimforI # t0 == t1? (i == tam-1?)
add $t2, $t0, $zero # t2 = t0 (min = i)
addi $t3, $t0, 1 # t3 = t0 + 1 (j = i + 1)
forJ: beq $t3, $s1, fimforJ # t3 == s1? (j == tam)
li $t4, 4 # t4 = 4
mul $t5, $t3, $t4 # t5 = t3 * 4 (t5 = j*4)
add $t5, $s0, $t5 # t5 = &num[j]
lw $t5, 0($t5) # t5 = num[j]
mul $t6, $t2, $t4 # t6 = t2 * 4 (t6 = min*4)
add $t6, $s0, $t6 # t6 = &num[min]
lw $t6, 0($t6) # t6 = num[min]
slt $t7, $t5, $t6 # t7 = t5 < t6
beq $t7, $zero, falha
add $t2, $t3, $zero # min = j
falha: addi $t3, $t3, 1 # t3++ (j++)
j forJ
fimforJ: beq $t0, $t2, naomudar # t0 == t2 (i == min?)
mul $t8, $t0, $t4 # t8 = t3 * 4 (t8 = i * 4)
add $t8, $s0, $t8 # t8 = &num[j]
mul $t9, $t2, $t4 # t9 = t2 * 4 (t8 = min * 4)
add $t9, $s0, $t9 # t9 = &num[min]
lw $s2, 0($t8) # s2 = num[i]
lw $s3, 0($t9) # s3 = num[min]
sw $s3, 0($t8) # num[i] = s3
sw $s2, 0($t9) # num[min] = s2
naomudar: addi $t0, $t0, 1 # t0++ (i++)
j forI
fimforI: li $v0, 4
la $a0, string2 # imprime string2
syscall
print: beq $s1, $zero,
...