Last active
June 7, 2023 03:31
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// 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