Problema: escriba un programa en el microprocesador 8086 para clasificar los números en orden descendente en una array de n números, donde el tamaño «n» se almacena en la dirección de memoria 2000: 500 y los números se almacenan desde la dirección de memoria 2000: 501.
Ejemplo –
Ejemplo de explicación:
- Pass-1:
32 05 14 50 32 05 14 50 32 14 05 50 32 14 50 05 (1 número corregido) - Pase-2:
32 14 50 05 32 14 50 05 32 50 14 05 (se arreglaron 2 números) - Pass-3:
32 50 14 05
50 32 14 05 (ordenado)
Algoritmo –
- Cargue datos desde el desplazamiento 500 al registro CL (para contar).
- Viaje desde la ubicación inicial de la memoria hasta la última y compare dos números si el primer número es más pequeño que el segundo y luego cámbielos.
- El primer paso fija la posición del último número.
- Disminuya el conteo en 1.
- Vuelva a viajar desde la ubicación de la memoria inicial hasta (último-1, con la ayuda del conteo) y compare dos números si el primer número es más pequeño que el segundo y luego cámbielos.
- El segundo paso fija la posición de los dos últimos números.
- Repetir
Programa –
DIRECCIÓN DE MEMORIA | MNEMOTÉCNICA | COMENTARIO |
---|---|---|
400 | MOV SI, 500 | SI<-500 |
403 | CL MOV, [SI] | CL<-[SI] |
405 | CL CL | CL<-CL-1 |
407 | MOV SI, 500 | SI<-500 |
40A | MOV CH, [SI] | CH<-[SI] |
40C | DIC CH | CH<-CH-1 |
40E | INC SI | SI<-SI+1 |
40F | MOV AL, [SI] | AL<-[SI] |
411 | INC SI | SI<-SI+1 |
412 | CMP AL, [SI] | AL-[SI] |
414 | JNC 41C | SALTAR A 41C SI CY!=1 |
416 | XCHG AL, [SI] | INTERCAMBIAR AL Y [SI] |
418 | DIC SI | SI<-SI-1 |
419 | XCHG AL, [SI] | INTERCAMBIAR AL Y [SI] |
41B | INC SI | SI<-SI+1 |
41C | DIC CH | CH<-CH-1 |
41E | JNZ 40F | SALTAR A 40F SI ZF=0 |
420 | CL CL | CL<-CL-1 |
422 | JNZ 407 | SALTAR A 407 SI ZF=0 |
424 | HLT | FINAL |
Explicación –
- MOV SI, 500 : establezca el valor de SI en 500.
- MOV CL, [SI] : carga datos desde el desplazamiento SI al registro CL.
- DEC CL : disminuir el valor del registro CL BY 1.
- MOV SI, 500 : establezca el valor de SI en 500.
- MOV CH, [SI] : carga datos desde el desplazamiento SI al registro CH.
- DEC CH : disminuye el valor del registro CH BY 1.
- INC SI : aumenta el valor de SI en 1.
- MOV AL, [SI] : carga el valor del desplazamiento SI al registro AL.
- INC SI : aumenta el valor de SI en 1.
- CMP AL, [SI] : compara el valor del registro AL y [SI] (AL-[SI]).
- JNC 41C : salta a la dirección 41C si no se genera el acarreo.
- XCHG AL, [SI] : intercambia el contenido del registro AL y SI.
- DEC SI : disminuye el valor de SI en 1.
- XCHG AL, [SI] : intercambia el contenido del registro AL y SI.
- INC SI : aumenta el valor de SI en 1.
- DEC CH : disminuye el valor del registro CH en 1.
- JNZ 40F : salta a la dirección 40F si se restablece el cero.
- DEC CL : disminuye el valor del registro CL en 1.
- JNZ 407 : salta a la dirección 407 si se restablece el cero.
- HLT : detener.
Publicación traducida automáticamente
Artículo escrito por Amber_Saxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA