Program to perform selection sort in ascending order in 8085 Microprocessor


Here we will see one 8085 Microprocessor program. In this program we will see how to sort a sequence of numbers using selection sort.

Problem Statement 

Write an 8085 Assembly language program to sort a given sequence using selection sort in ascending order. The numbers are stored at 8001H onwards. 8000H is holding the block size.

Discussion 

In the selection sorting technique, we will choose the minimum or the maximum term from a set of numbers. In this case we are considering the sorting in ascending order, so we are choosing the minimum number. By taking the minimum number, we are swapping it with the element of currently pointed location. In each pass the minimum number of the sub block is placed at the correct position.

This program has two subroutines. The first subroutine will check the minimum number in a set of numbers, and the second subroutine will be used to swap the numbers.

Input

Address
Data


8000
06
8001
22
8002
55
8003
33
8004
66
8005
44
8006
11



Flow Diagram

 

 

Program

Address
HEX Codes
Labels
Mnemonics
Comments
F000
31, 00, 90


LXI SP,9000H
Initialize Stack Pointer
F003
21, 00, 80


LXI H,8000H
Point to get the block size
F006
4E


MOV C,M
Get the count
F007
23
DO
INX H
Point to next location to get block
F008
7E


MOV A,M
Load the element to A
F009
CD, 18, F0


CALL MIN
Find the minimum
F00C
BE


CMP M
Compare M and A
F00D
CA, 13, F0


JZ GO
if Z = 1, they are same, skip swapping
F010
CD, 2A, F0


CALL SWAP
Swap minimum and current content
F013
0D
GO
DCR C
Decrease C by 1
F014
C2, 07, F0


JNZ DO
If Z = 0, go to Do
F017
76


HLT
Terminate the program
F018
E5
MIN
PUSH H
Push HL into Stack
F019
C5


PUSH B
Push BC into stack
F01A
0D


DCR C
Decrease C by 1
F01B
23
LOOP
INX H
Point to next location
F01C
BE


CMP M
Compare memory data with A
F01D
DA, 23, F0


JNC SKIP
If CY = 0, jump to SKIP
F020
7E


MOV A,M
Update the value of A
F021
54


MOV D,H
Copy H to D
F022
5D


MOV E,L
Copy L to E
F023
0D
SKIP
DCR C
Decrease C by 1
F024
C2, 1B, F0


JNZ LOOP
If Z = 0, go to Loop
F027
C1


POP B
Pop BC from stack
F028
E1


POP H
Pop HL from stack
F029
C9


RET
Return from subroutine
F02A
F5
SWAP
PUSH PSW
Store AF into stack
F02B
C5


PUSH B
Push BC into stack
F02C
1A


LDAX D
A = get data from location pointed by DE
F02D
47


MOV B,A
Copy A to B
F02E
7E


MOV A,M
get data from location pointed by HL
F02F
12


STAX D
Store A content into memory pointed by DE
F030
70


MOV M,B
Store B content to memory pointed by HL
F031
C1


POP B
Pop BC from Stack
F032
F1


POP PSW
Pop AF from stack
F033
C9


RET
Return from swap


 

Output

Address
Data


8001
11
8002
22
8003
33
8004
44
8005
55
8006
66


raja
Published on 09-Oct-2019 10:33:20
Advertisements