arr: .byte ^a/A/,30,^a/B/,20,^a/C/,50,^a/D/,10,^a/E/,40
ind: .blkl 5
finInd: .blkl 1
.entry ej, ^m<r3>
;LLENA INDICE ind CON DIRECCIONES DE 2da. CLAVE DE arr
moval arr+1,r6 ;r6 recorre arr
moval ind,r7 ;r7 recorre ind
WHILE1: cmpl r6,#ind
bgtr ENDWHILE1
movl r6,(r7)+
addl #2,r6
brb WHILE1
ENDWHILE1:
;ORDENA INDICE PARA ACCEDER A arr EN ORDEN ASCENDENTE SEGUN NUMEROS.;USA SELECCION DIRECTA
moval ind-4,r6 ;r6 es i
WHILE2: cmpl r6,#finInd-8 ;mientras i sea menor que n-1
bgtr ENDWHILE2
movb @4(r6),r8 ;r8 es menor
addl3 #4,r6,r9 ;r9 es posicion del menor
addl3 #4,r6,r7 ;r7 es j
WHILE3: cmpl r7,#finInd-4 ;mientras j sea menor que n
bgeq ENDWHILE3
IF: cmpb @4(r7),r8 ;si se encuentra uno menor
bgeq ENDIF
movb @4(r7),r8 ;cambia menor y su direccion
addl3 #4,r7,r9
ENDIF:
addl #4,r7
brb WHILE3
ENDWHILE3:
movl 4(r6),r10 ;intercambia direccion de menor con el direccionado con i
movl (r9),4(r6)
movl r10,(r9)
addl #4,r6
brb WHILE2
ENDWHILE2:
$exit_s
.end ej