Jump to content

[Resolvido] Insert sort em assembly (mips)


pkila
 Share

Recommended Posts

Olá a todos, bom meu problema é o seguinte, tenho de implementar o insert sort em assembly. O que está ocorrendo é que a partir da segunda comparação, se houver algum número menor ao invés de trocar estes ele substitui pelo anterior.

Por exemplo: 4, 2, 1, compara o 4 com 2 e troca, 2,4,1, só que ao comparar o 2 com o 1, ele ao invés de ficar 1,4,2, fica 1,4,4. No caso está ficando com o valor anterior salvo.

.text
.globl main
main:

 lw $a1, tam   # $t0 recebe o tamanho
 sll $0,$0,0
 sll $0,$0,0

 la $a0, vetor  # base de acesso a memória
 sll $0,$0,0

zero_ou_menor:

 bltz $a1,fim  # Se menor que zero então não tem elementos no vetor
 sll $0,$0,0

 beq $a1,$0,fim  # Um elemento só não segue a execução
 sll $0,$0,0

enquanto:

 beq $2,$a1,fim  # Se $2 == $a1 então encerra
 sll $0,$0,0

cons_prim:

 mul $t0,$2,4  # pos. n do vetor mod
 sll $0,$0,0
 sll $0,$0,0

 add $t0,$a0,$t0  # Soma os endereços de memória

 lw $t1,0($t0)  # Carrega o valor n
 sll $0,$0,0
 sll $0,$0,0

defc:

 addi $3,$2,1  # pos. n+1 do vetor mod
 sll $0,$0,0

cons_seg:

 beq $3,$a1,soma  # Garantia de execuação
 sll $0,$0,0
 sll $0,$0,0

 mul $t0,$3,4  # Multiplica o cnteudo de 3 por 4, para conseguir a pos n+1
 sll $0,$0,0
 sll $0,$0,0

 add $t0,$a0,$t0  # Soma na posição de memória
 sll $0,$0,0

 lw $t2,0($t0)  # Carrega o valor n+1 do vetor
 sll $0,$0,0
 sll $0,$0,0

comp_prim_seg:

 blt $t2,$t1,troca # Se v[i] < v[i-1]
 sll $0,$0,0

 addi $3,$3,1  # Soma1 se não for menor ou igual
 sll $0,$0,0

 sw $t2,0($t0)
 sll $0,$0,0

 j cons_seg
 sll $0,$0,0

troca:

 sw $t1,0($t0)
 sll $0,$0,0

 mul $t0,$2,4
 sll $0,$0,0
 sll $0,$0,0

 add $t0,$t0,$a0
 sll $0,$0,0

 sw $t2,0($t0)
 sll $0,$0,0

 addi $3,$3,1
 sll $0,$0,0

 j cons_seg
 sll $0,$0,0

soma:

 addi $2,$2,1
 sll $0,$0,0

 j enquanto
 sll $0,$0,0

fim:
 li $v0, 10 # Syscall para fim
 syscall

.data
vetor: .word 4,2,1
tam: .word 3

Desde já agradeço pela ajuda!

Link to comment
Share on other sites

eu nem vi o código ... no entanto acho que estás confuso no algoritmo

o primeiro passo está correcto, ao inserir o valor 2 no array ordenado tens de trocar o 2 pelo 4

no entanto o passo segunite (inserir o 1 no array ordenado) tens de primeiro troca o 1 pelo 4 .... não é feita a comparação 1-2

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.