8085 Program to perform selection sort in ascending order


Now let us see a program of Intel 8085 Microprocessor. In this program we will see how to sort a sequence of numbers using selection sort.

Problem Statement:

Write 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
.
.
.
.
.
.

Updated on: 30-Jul-2019

471 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements