Tengo un problema con un codigo RISC-V que estaba intentando hacer, donde tengo que reordenar un array de menor a mayor. Lo que pasa es que con lo que hice solo pasa por el array una vez para despues terminar, cuando necesito hacerlo reiterativo hasta que ya no puedan haber cambios y ahi se termine el codigo, que me recomiendan?:
main: #Guardar los valores en las direcciones t
la t0, arr
lw t1, len
lw t2, pos
lw t3, pos2
cambiar_posicion:
beq t2 ,t1 ,end #Si len y pos son iguales, se termina el codigo
lw t4, 0(t0) #Cargar el elemento actual en t4
lw t5, 4(t0) #Cargar el elemento siguiente en t5
comparar_numeros:
blt t5, t4, change #Si t5 es menor que t4, se cambia de posicion
blt t3, t1, actualizar #Si len y pos2 son iguales, pos2 se actualiza a la posicion siguiente de pos
j cambiar_posicion
actualizar:
addi t2, t2, 1
li t3, 1
add t3, t2, t3
addi t0, t0, 4
j cambiar_posicion
Tengo un problema con un codigo RISC-V que estaba intentando hacer, donde tengo que reordenar un array de menor a mayor. Lo que pasa es que con lo que hice solo pasa por el array una vez para despues terminar, cuando necesito hacerlo reiterativo hasta que ya no puedan haber cambios y ahi se termine el codigo, que me recomiendan?:
.globl main
.data arr: .word 5,8,3,8,3,7,2 len: .word 7 pos: .word 0 pos2: .word 1
.text
main: #Guardar los valores en las direcciones t la t0, arr lw t1, len lw t2, pos lw t3, pos2 cambiar_posicion: beq t2 ,t1 ,end #Si len y pos son iguales, se termina el codigo lw t4, 0(t0) #Cargar el elemento actual en t4 lw t5, 4(t0) #Cargar el elemento siguiente en t5 comparar_numeros: blt t5, t4, change #Si t5 es menor que t4, se cambia de posicion blt t3, t1, actualizar #Si len y pos2 son iguales, pos2 se actualiza a la posicion siguiente de pos j cambiar_posicion
actualizar: addi t2, t2, 1 li t3, 1 add t3, t2, t3 addi t0, t0, 4 j cambiar_posicion
change: sw t5, 0(t0) sw t4, 4(t0) addi t2, t2, 1 li t3, 1 add t3, t2, t3 addi t0, t0, 4 j cambiar_posicion
end: mv a0, t0 #Guardar en el return el valor del resultado li a7, 1 ecall li a7, 10 ecall