8086 programa para ordenar una array de enteros en orden ascendente

Problema: escriba un programa en el microprocesador 8086 para clasificar los números en orden ascendente 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: 
F9 F2 39 05
F2 F9 39 05
F2 39 F9 05
F2 39 05 F9 (1 number got fix)

Pass-2:  
F2 39 05 F9
39 F2 05 F9
39 05 F2 F9 (2 number got fix)

Pass-3: 
39 05 F2 F9
05 39 F2 F9 (sorted)

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 mayor que el segundo y luego intercá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 mayor que el segundo y luego intercámbielos. 
     
  6. El segundo paso fija la posición de los dos últimos números. 
     
  7. Repetido. 
     

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 JC 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. JC 41C : salta a la dirección 41C si se genera un 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 *