8086 programa para clasificación por selección

Problema: escriba un programa en lenguaje ensamblador en un microprocesador 8086 para clasificar una array determinada de n números utilizando la clasificación por selección.

Suposiciones: la cantidad de elementos en la array se almacena en el desplazamiento 500. La array comienza desde el desplazamiento 501.

Ejemplo –

Algoritmo –

  1. Primero encontramos el número más pequeño en la array.
  2. Intercambia el número más pequeño del primer elemento de la array.
  3. Siga repitiendo el proceso hasta que se atraviesen todos los elementos.

Programa –

Compensar Mnemotécnica Comentario
400 MOV DI, 501 ED < – 501
403 MOV SI, 500 SI < – 500
406 CL MOV, [SI] CL < – [SI]
408 XOR CH, CH CH < – CH ^(XOR) CH
40A INC SI SI < – SI+0001
40B DIC CX CX < – CX-0001
40C MOV BX, SI BX < – SI
40E MOV AH, CL AH < – CL
410 INC AH AH < – AH+01
412 MOV AL, [SI] AL < – [SI]
414 INC SI SI < – SI+0001
415 DIC AH AH < – AH-01
417 CMP AL, [SI] AL-[SI]
419 JC 41F Si Carry Flag = 1, vaya al desplazamiento 41F
41B MOV AL, [SI] AL < – [SI]
41D MOV BX, SI BX < – SI
41F INC SI SI < – SI+0001
420 DIC AH AH < – AH-01
422 JNZ 417 Si Zero Flag = 0, vaya al desplazamiento 417
424 MOV DL, [BX] DL < – [BX]
426 XCHG DL, [DI] DL < – > [DI]
428 XCHG DL, [BX] DL < – > [BX]
42A INC DI ED < – ED+0001
42B MOV SI, DI SI < – DI
42D BUCLE 40C CX < – CX-0001; Si Marca cero = 0, vaya a compensación 40C.
42F HLT Fin del programa.

Explicación: los registros AH, AL, BX, CX, DL, SI, DI se utilizan para fines generales:

AL - Stored the smallest number
AH - Stores the counter for the inner loop
BX - Stores the offset of the smallest 
     number of each iteration of the outer loop
CX - Stores the counter for the outer loop
DL - Helps in swapping the elements
SI - Pointer
DI - Pointer 
  1. MOV SI, 500: almacena 0500 en SI.
  2. MOV CL, [SI]: almacena el contenido en el desplazamiento SI en CL.
  3. XOR CH, CH: almacena el resultado de la operación lógica XOR sobre CH y CH en CH.
  4. INC SI: aumenta el valor de SI en 1.
  5. DEC CX: disminuye el valor de CX en 1.
  6. MOV AH, CL: almacena el contenido de CL en AH.
  7. CMP AL, [SI]: compara el contenido de AL con el contenido en el desplazamiento SI. Si AL < [SI] – Establece la bandera de acarreo (es decir, la bandera de acarreo = 1).
  8. JC 41F: salta al desplazamiento 041F, si se establece la bandera de acarreo (1).
  9. JNZ 417: salta al desplazamiento 0417, si se restablece el indicador cero (0).
  10. XCHG DL, [BX]: intercambia el contenido de DL con el contenido en el desplazamiento BX.
  11. BUCLE 40C: disminuya el valor de CX en 1 y verifique si la bandera cero está configurada (1) o no. Si Zero Flag se restablece (0), entonces salta al desplazamiento 040C.
  12. HLT: termina el programa.

Publicación traducida automáticamente

Artículo escrito por 47AbhinavSharma 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 *