8086 programa para ordenar una array de enteros en orden descendente

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 –

  1. Cargue datos desde el desplazamiento 500 al registro CL (para contar).
  2. 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.
  3. El primer paso fija la posición del último número.
  4. Disminuya el conteo en 1.
  5. 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.
  6. El segundo paso fija la posición de los dos últimos números.
  7. 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 –

  1. MOV SI, 500 : establezca el valor de SI en 500.
  2. MOV CL, [SI] : carga datos desde el desplazamiento SI al registro CL.
  3. DEC CL : disminuir el valor del registro CL BY 1.
  4. MOV SI, 500 : establezca el valor de SI en 500.
  5. MOV CH, [SI] : carga datos desde el desplazamiento SI al registro CH.
  6. DEC CH : disminuye el valor del registro CH BY 1.
  7. INC SI : aumenta el valor de SI en 1.
  8. MOV AL, [SI] : carga el valor del desplazamiento SI al registro AL.
  9. INC SI : aumenta el valor de SI en 1.
  10. CMP AL, [SI] : compara el valor del registro AL y [SI] (AL-[SI]).
  11. JNC 41C : salta a la dirección 41C si no se genera el acarreo.
  12. XCHG AL, [SI] : intercambia el contenido del registro AL y SI.
  13. DEC SI : disminuye el valor de SI en 1.
  14. XCHG AL, [SI] : intercambia el contenido del registro AL y SI.
  15. INC SI : aumenta el valor de SI en 1.
  16. DEC CH : disminuye el valor del registro CH en 1.
  17. JNZ 40F : salta a la dirección 40F si se restablece el cero.
  18. DEC CL : disminuye el valor del registro CL en 1.
  19. JNZ 407 : salta a la dirección 407 si se restablece el cero.
  20. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *