pkila Posted June 28, 2012 at 05:52 PM Report #466255 Posted June 28, 2012 at 05:52 PM 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!
HappyHippyHippo Posted June 28, 2012 at 06:00 PM Report #466257 Posted June 28, 2012 at 06:00 PM 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 Portugol Plus
pkila Posted June 28, 2012 at 07:35 PM Author Report #466283 Posted June 28, 2012 at 07:35 PM Você tem razão. Interpretei errado mesmo o insert sort. Obrigado pela ajuda!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now