Skip to content

Instantly share code, notes, and snippets.

@CrysoK
Last active June 7, 2023 03:31
Show Gist options
  • Save CrysoK/cbcfce406a1bcc9965b1d0d224ef1803 to your computer and use it in GitHub Desktop.
Save CrysoK/cbcfce406a1bcc9965b1d0d224ef1803 to your computer and use it in GitHub Desktop.
Implementación de bubble-sort en el lenguaje ensamblador de la arquitectura MARIE.
/// CÓDIGO
/ ENTRADA
Input / Ingreso del número de elementos
Store cantidad / cantidad = input
Store i / i = cantidad
INI_CARGA, Load i / Inicio del ciclo de carga
Skipcond 800 / Continúa el ciclo si i > 0
Jump FIN_CARGA / Termina el ciclo si i <= 0
Subt _1
Store i / i = i - 1
Input / Ingreso de un elemento
StoreI elem / *elem = input
Load elem
Add _1
Store elem / elem = elem + 1
Jump INI_CARGA / Continúa el ciclo
/ ORDENAMIENTO
FIN_CARGA, Load cantidad
Store n / n = cantidad
INI_PASADA, Load _0
Store intercambio / intercambio = 0
Store i / i = 0
INI_COMPARACIONES, Subt n
Add _1
Skipcond 000 / Omite si i - n + 1 < 0
Jump FIN_PASADA / if (i - n + 1 >= 0) goto FIN_PASADA
Load lista
Add i
Store elem / elem = lista + i
Load lista
Add i
Add _1
Store siguiente / siguiente = lista + i + 1
LoadI siguiente
Store tmp / tmp = lista[i + 1]
LoadI elem
Subt tmp
Skipcond 800 / Omite si lista[i] - lista[i + 1] > 0
Jump SIG_COMPARACION / if (lista[i] - lista[i + 1] <= 0) goto SIG_COMPARACION
LoadI elem
StoreI siguiente / lista[i + 1] = lista[i]
Load tmp
StoreI elem / lista[i] = tmp
Load _1
Store intercambio / intercambio = 1
Load i
Add _1
Store tmp / tmp = i + 1 (ultimo elemento ordenado)
SIG_COMPARACION, Load i
Add _1
Store i / i = i + 1
Jump INI_COMPARACIONES
FIN_PASADA, Load tmp
Store n / n = tmp
Load intercambio
Skipcond 400
Jump INI_PASADA
/ SALIDA
Load lista
Store elem / elem = lista
Load cantidad
Store i / i = cantidad
MOSTRAR, LoadI elem
Output / output(*elem)
Load elem
Add _1
Store elem / elem = elem + 1
Load i
Subt _1
Store i / i = i + 1
Skipcond 400 / Omite si i == 0
Jump MOSTRAR / if (i != 0) goto MOSTRAR
FIN, Halt / Termina el programa
/// DATOS
_0, DEC 0 / Constante 0
_1, DEC 1 / Constante 1
_2, DEC 2 / Constante 2
cantidad, DEC 0 / Variable para el número de elementos de la lista
intercambio, DEC 0 / Variable "bandera" para optimizar el ordenamiento
lista, HEX 050 / Constante con la dirección del primer elemento de la lista
elem, HEX 050 / Variable para la dirección de un elemento de la lista
siguiente, HEX 051 / Variable para la dirección 'elem + 1'
tmp, DEC 0 / Variable auxiliar para el intercambio
n, DEC 0 / Variable "contador" para ciclos
i, DEC 0 / Variable "contador" para ciclos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment