**Problem –** Write a program in 8086 microprocessor to sort numbers in ascending order in an array of n numbers, where size “n” is stored at memory address 2000 : 500 and the numbers are stored from memory address 2000 : 501.

**Example –**

Example explanation:

**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)

**Algorithm –**

- Load data from offset 500 to register CL (for count).
- Travel from starting memory location to last and compare two numbers if first number is greater than second number then swap them.
- First pass fix the position for last number.
- Decrease the count by 1.
- Again travel from starting memory location to (last-1, by help of count) and compare two numbers if first number is greater than second number then swap them.
- Second pass fix the position for last two numbers.
- Repeate.

**Program –**

MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|

400 | MOV SI, 500 | SI<-500 |

403 | MOV CL, [SI] | CL<-[SI] |

405 | DEC CL | CL<-CL-1 |

407 | MOV SI, 500 | SI<-500 |

40A | MOV CH, [SI] | CH<-[SI] |

40C | DEC 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 | JUMP TO 41C IF CY=1 |

416 | XCHG AL, [SI] | SWAP AL AND [SI] |

418 | DEC SI | SI<-SI-1 |

419 | XCHG AL, [SI] | SWAP AL AND [SI] |

41B | INC SI | SI<-SI+1 |

41C | DEC CH | CH<-CH-1 |

41E | JNZ 40F | JUMP TO 40F IF ZF=0 |

420 | DEC CL | CL<-CL-1 |

422 | JNZ 407 | JUMP TO 407 IF ZF=0 |

424 | HLT | END |

**Explanation –**

**MOV SI, 500**: set the value of SI to 500.**MOV CL, [SI]**: load data from offset SI to register CL.**DEC CL**: decrease value of register CL BY 1.**MOV SI, 500**: set the value of SI to 500.**MOV CH, [SI]**: load data from offset SI to register CH.**DEC CH**: decrease value of register CH BY 1.**INC SI**: increase value of SI BY 1.**MOV AL, [SI]**: load value from offset SI to register AL.**INC SI**: increase value of SI BY 1.**CMP AL, [SI]**: compares value of register AL and [SI] (AL-[SI]).**JC 41C**: jump to address 41C if carry generated.**XCHG AL, [SI]**: exchange the contents of register AL and SI.**DEC SI**: decrease value of SI by 1.**XCHG AL, [SI]**: exchange the contents of register AL and SI.**INC SI**: increase value of SI by 1.**DEC CH**: decrease value of register CH by 1.**JNZ 40F**: jump to address 40F if zero flat reset.**DEC CL**: decrease value of register CL by 1.**JNZ 407**: jump to address 407 if zero flat reset.**HLT**: stop.

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.

## Recommended Posts:

- 8086 program to sort an integer array in descending order
- 8086 program to print the table of input integer
- 8086 program for selection sort
- 8086 program to determine modulus of first array elements corresponding to another array elements
- 8086 program to determine largest number in an array of n numbers
- 8086 program to find the min value in a given array
- 8086 program to determine squares of numbers in an array of n numbers
- 8086 program to determine cubes of numbers in an array of n numbers
- 8086 program to determine product of corresponding elements of two array elements
- 8086 program to divide a 16 bit number by an 8 bit number
- 8086 program to subtract two 16-bit numbers with or without borrow
- 8086 program to add two 16-bit numbers with or without carry
- 8086 program to multiply two 16-bit numbers
- 8086 program to convert an 8 bit BCD number into hexadecimal number
- 8086 program to find the factorial of a number
- 8086 program to add two 8 bit BCD numbers
- 8086 program to find Square Root of a number
- 8086 program to convert binary to Grey code
- 8086 program to convert 8 bit ASCII to BCD number
- 8086 program to find sum of odd numbers in a given series

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.