Problem – Write an assembly language program in 8086 microprocessor to sort a given array of n numbers using Selection Sort.
Assumptions – The number of elements in the array is stored at offset 500. The array starts from offset 501.
Example –
Algorithm –
- We first find the smallest number in the array.
- Swap the smallest number from the first element of the array.
- Keep repeating the process till all elements are traversed.
Program –
| Offset | Mnemonics | Comment |
|---|---|---|
| 400 | MOV DI, 501 | DI < – 501 |
| 403 | MOV SI, 500 | SI < – 500 |
| 406 | MOV CL, [SI] | CL < – [SI] |
| 408 | XOR CH, CH | CH < – CH ^(XOR) CH |
| 40A | INC SI | SI < – SI+0001 |
| 40B | DEC 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 | DEC AH | AH < – AH-01 |
| 417 | CMP AL, [SI] | AL-[SI] |
| 419 | JC 41F | If Carry Flag = 1, goto offset 41F |
| 41B | MOV AL, [SI] | AL < – [SI] |
| 41D | MOV BX, SI | BX < – SI |
| 41F | INC SI | SI < – SI+0001 |
| 420 | DEC AH | AH < – AH-01 |
| 422 | JNZ 417 | If Zero Flag = 0, goto offset 417 |
| 424 | MOV DL, [BX] | DL < – [BX] |
| 426 | XCHG DL, [DI] | DL < – > [DI] |
| 428 | XCHG DL, [BX] | DL < – > [BX] |
| 42A | INC DI | DI < – DI+0001 |
| 42B | MOV SI, DI | SI < – DI |
| 42D | LOOP 40C | CX < – CX-0001; If Zero Flag = 0, goto offset 40C. |
| 42F | HLT | End of program. |
Explanation – Registers AH, AL, BX, CX, DL, SI, DI are used for general purpose:
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: stores 0500 in SI.
- MOV CL, [SI]: stores the content at offset SI in CL.
- XOR CH, CH: stores the result of logical operation XOR b/w CH and CH in CH.
- INC SI: increase the value of SI by 1.
- DEC CX: decrease the value of CX by 1.
- MOV AH, CL: stores the contents of CL in AH.
- CMP AL, [SI]: compares the content of AL with content at offset SI. If AL < [SI] – Sets Carry Flag(i.e. Carry Flag = 1).
- JC 41F: jumps to offset 041F, if carry flag is set(1).
- JNZ 417: jumps to offset 0417, if zero flag is reset(0).
- XCHG DL, [BX]: swaps the content of DL with content at offset BX.
- LOOP 40C: decrease the value of CX by 1 and check whether Zero Flag is set(1) or not. If Zero Flag is reset(0), then it jumps to offset 040C.
- HLT: terminates the program.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

