Hace poco en la universidad me toco programar este ordenamiento en lenguaje ensamblador (asm) y la verdad no estan facil como programar en lenguajes de alto nivel (Java,C,C++,etc). El ensamblador por ser lengueje de nivel que implementa una represantacion simbolica de los codigos de maquina binarios y otras constantes necesarios para programar una arquitectura dada de CPU . Se basa en mnemonicos que simbolizam los pasos de procesamiento , los registros del procesador, las direcciones de memoria y otras caracteristicas del lenjuage.
Es muy sencillo aprenderse cada comando, cada mnemonico , pero estructurar un programa nos lo es. Por eso decidi compartir este algoritmo donde recibe unicamente como parametro la direccion del inicio del arreglo y el tamaño:
Algoritmo del Ordenamiento Burbuja (Bubble Sort)
BubbleSort PROCEDIMIENTO Dir_Arreglo,TamañoArreglo
;Decalcarion de variables locales necesarios
local Valor1, Valor2 , i, j, k,n,bContinuar ,nmenos1
Respaldar Registros necesarios con un push registros o pusha
mueve nmenos1,TamañoArreglo
restale uno
Mueve a un Registro Base,Dir_Arreglo
mueve a j, nmenos1
mueve i,0
Mueve a un Registro Indice o Destino,4;
;lo anterior 4 para desplazamiento de tamaño de 32 bits
; 2 para 16 bits, 1 para 8 bits
MIENTRASBCONTINUARES1:
mueve a BCONTINUAR,0
mueve a registrobase,Dir_Arreglo
mueve a j, nmenos1
FOR1:
mueve Valor1,[RegistroBase]
mueve Valor2,[RegistroBase+4]
; lo mismo que anteriormente
; en este caso el arreglo es de
; 32 bits cada elemento
mueve a registro,[RegistroBase]
mueve a registro2,[RegistroBase+4]
Si Valor1>Regitro2
intercambia [RegistroBase],[RegistroBase+4]
mueve BCONTINUAR,1
; esto impedira que se termine el programa
; y seguir en el bucle hasta dejar
;ordenado el arreglo
sino
decrementa j
suma a RegistroBase,4; 32 bits
compara j,0
Si no es igual FOR1
MOV un registro,BCONTINUAR
comparar registro,0
si es igual SALIR:
BRINCA A MIENTRASBCONTINUARES1
SALIR:
;Restaurara Todos los Registros respaldados
ret
BubbleSort FINPROCEDIMIENDO