Skip to content

Instantly share code, notes, and snippets.

@tonussi
Forked from senhorinha/exercicio1.asm
Created September 25, 2013 16:48
Show Gist options
  • Save tonussi/6702514 to your computer and use it in GitHub Desktop.
Save tonussi/6702514 to your computer and use it in GitHub Desktop.
.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
.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
.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
.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