-
-
Save tonussi/6702514 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.data | |
#Arranjo a ser ordenado | |
_v: .word 29,28,27,26,25,24,23,22,21,-1 | |
_k: .word 2 #Valor de k | |
.text | |
.globl main | |
main: | |
#Inicialização dos parâmetros | |
la $a0, _v | |
lw $a1, _k | |
jal swap | |
li $v0, 10 #Exit syscall | |
syscall | |
#corpo do procedimento | |
swap: | |
sll $t0, $a1, 2 # k*4 | |
add $t1, $t0, $a0 | |
lw $t2, 0($t1) # v[k] = t2 | |
lw $t3, 4($t1) # v[k+1] = t3 | |
sw $t2, 4($t1) # v[k+1] = t2 | |
sw $t3, 0($t1) # v[k] = t3 | |
#retorno ao programa principal | |
jr $ra |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.data | |
_v: .word 29,28,27,26,25,24,23,22,21,-1 | |
_n: .word 10 | |
.text | |
.globl main | |
main: | |
la $a0,_v | |
lw $a1,_n | |
jal sort | |
li $v0,10 #Exit syscall | |
syscall | |
# procedure sort | |
sort: | |
# preservação de registradores armazenando seus conteúdos na pilha | |
addi $sp,$sp,-12 | |
sw $ra,8($sp) | |
sw $s1,4($sp) | |
sw $s0,0($sp) | |
move $s0,$zero # inicialização de i | |
# início do corpo do laço externo | |
for1tst: | |
nop #MARCA 1 | |
slt $t0,$s0,$a1 # for1st | |
beq $t0,$zero,exit1 | |
addi $s1,$s0,-1 | |
# inicio do corpo do laço interno | |
for2tst: | |
slti $t0,$s1,0 # for2st | |
bne $t0,$zero,exit2 | |
sll $t1,$s1,2 | |
add $t2,$a0,$t1 | |
lw $t3,0($t2) | |
lw $t4,4($t2) | |
slt $t0,$t4,$t3 | |
beq $t0,$zero,exit2 | |
move $a1, $s1 | |
nop # MARCA 2 | |
jal swap # chamada de swap | |
addi $s1,$s1,-1 | |
j for2tst | |
# fim do corpo do laço interno | |
exit2: | |
addi $s0,$s0,1 | |
j for1tst | |
# fim do corpo do laço externo | |
exit1: | |
# restauração de conteúdos de registradores preservados na pilha | |
lw $s0,0($sp) | |
lw $s1,4($sp) | |
lw $ra,8($sp) | |
addi $sp,$sp,12 | |
# retorno ao procedimento chamador | |
jr $ra | |
# codificação da procedure swap | |
swap: | |
sll $t0, $a1, 2 | |
add $t1, $t0, $a0 | |
lw $t2, 0($t1) | |
lw $t3, 4($t1) | |
sw $t2, 4($t1) | |
sw $t3, 0($t1) | |
jr $ra |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.data | |
_v: .word 29,28,27,26,25,24,23,22,21,-1 | |
_n: .word 10 | |
.text | |
.globl main | |
main: | |
la $a0,_v | |
lw $a1,_n | |
jal sort | |
li $v0,10 #Exit syscall | |
syscall | |
# procedure sort | |
sort: | |
# preservação de registradores armazenando seus conteúdos na pilha | |
addi $sp,$sp,-12 | |
sw $ra,8($sp) | |
sw $s1,4($sp) | |
sw $s0,0($sp) | |
move $s3, $a1 | |
move $s0,$zero # inicialização de i | |
# início do corpo do laço externo | |
for1tst: | |
nop #MARCA 1 | |
slt $t0,$s0,$s3 # for1st | |
beq $t0,$zero,exit1 | |
addi $s1,$s0,-1 | |
# inicio do corpo do laço interno | |
for2tst: | |
slti $t0,$s1,0 # for2st | |
bne $t0,$zero,exit2 # Se t0 não for 0 vai para exit2 | |
sll $t1,$s1,2 # t1 = (($s0-1)*4) | |
add $t2,$a0,$t1 # Calcula endereco v + ((s0-1)*4) | |
lw $t3,0($t2) # Busca o elemento v[k] | |
lw $t4,4($t2) # Busca o elemento v[k+1] | |
slt $t0,$t4,$t3 # Se t4 é menor que t3 -> t0 = 1 | |
beq $t0,$zero,exit2 # Se t0 for 0 vai para exit2 | |
move $a1, $s1 # | |
nop # MARCA 2 a1 = k-1 | |
jal swap # chamada de swap | |
addi $s1,$s1,-1 | |
j for2tst | |
# fim do corpo do laço interno | |
exit2: | |
addi $s0,$s0,1 # s0 = 5+1 | |
j for1tst | |
# fim do corpo do laço externo | |
exit1: | |
# restauração de conteúdos de registradores preservados na pilha | |
lw $s0,0($sp) | |
lw $s1,4($sp) | |
lw $ra,8($sp) | |
addi $sp,$sp,12 | |
# retorno ao procedimento chamador | |
jr $ra | |
# codificação da procedure swap | |
swap: | |
sll $t0, $a1, 2 | |
add $t1, $t0, $a0 | |
lw $t2, 0($t1) | |
lw $t3, 4($t1) | |
sw $t2, 4($t1) | |
sw $t3, 0($t1) | |
jr $ra |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.data | |
_v: .word 29,28,27,26,25,24,23,22,21,-1 | |
_n: .word 10 | |
.text | |
.globl main | |
main: | |
la $a0,_v # array | |
lw $a1,_n # indice | |
jal sort | |
li $v0,10 #Exit syscall | |
syscall | |
# procedure sort | |
sort: | |
# preservação de registradores armazenando seus conteúdos na pilha | |
addi $sp,$sp,-12 | |
sw $ra,8($sp) | |
sw $s1,4($sp) | |
sw $s0,0($sp) | |
move $s0,$zero # inicialização de i | |
# início do corpo do laço externo | |
for1tst: | |
nop #MARCA 1 | |
slt $t0,$s0,$a1 # for1st | |
beq $t0,$zero,exit1 | |
addi $s1,$s0,-1 | |
# inicio do corpo do laço interno | |
for2tst: | |
slti $t0,$s1,0 # for2st | |
bne $t0,$zero,exit2 | |
sll $t1,$s1,2 | |
add $t2,$a0,$t1 | |
lw $t3,0($t2) | |
lw $t4,4($t2) | |
slt $t0,$t4,$t3 | |
beq $t0,$zero,exit2 | |
nop # MARCA 2 | |
jal swap # chamada de swap | |
addi $s1,$s1,-1 | |
j for2tst | |
# fim do corpo do laço interno | |
exit2: | |
addi $s0,$s0,1 | |
j for1tst | |
# fim do corpo do laço externo | |
exit1: | |
# restauração de conteúdos de registradores preservados na pilha | |
lw $s0,0($sp) | |
lw $s1,4($sp) | |
lw $ra,8($sp) | |
addi $sp,$sp,12 | |
# retorno ao procedimento chamador | |
jr $ra | |
# codificação da procedure swap | |
swap: | |
sll $t0, $a1, 2 # t0 = k * 4 | |
add $t1, $t0, $a0 # v + k = endereco de V[K] | |
lw $t2, 0($t1) # t2 = v[k] | |
lw $t3, 4($t1) # t3 = v[k+1] | |
sw $t2, 4($t1) # v[k+1] = t2 | |
sw $t3, 0($t1) # v[k] = t3 | |
jr $ra |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment