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 –
- Primero encontramos el número más pequeño en la array.
- Intercambia el número más pequeño del primer elemento de la array.
- 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
- MOV SI, 500: almacena 0500 en SI.
- MOV CL, [SI]: almacena el contenido en el desplazamiento SI en CL.
- XOR CH, CH: almacena el resultado de la operación lógica XOR sobre CH y CH en CH.
- INC SI: aumenta el valor de SI en 1.
- DEC CX: disminuye el valor de CX en 1.
- MOV AH, CL: almacena el contenido de CL en AH.
- 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).
- JC 41F: salta al desplazamiento 041F, si se establece la bandera de acarreo (1).
- JNZ 417: salta al desplazamiento 0417, si se restablece el indicador cero (0).
- XCHG DL, [BX]: intercambia el contenido de DL con el contenido en el desplazamiento BX.
- 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.
- 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