# 8085 Program to do an operation on two BCD numbers based on the contents of X

Now let us see a program of Intel 8085 Microprocessor. In this program we will see how to do different operations on BCD numbers based on choice.

Problem Statement:

Write 8085 Assembly language program to perform some operations on two 8-bit BCD numbers base on choice.

Discussion:

In this program we are taking a choice. The choice value is stored at memory location 8000H (named as X). And the BCD numbers are stored at location 8001H and 8002H. We are storing the result at location 8050H and 8051H.

Here if the choice is 00H, then it will perform addition, for 01H, it will perform subtraction, and for 02H, it will do the multiplication operation.

Input:

First input

Data
.
.
.
.
.
.
8000
00
8001
97
8002
88
.
.
.
.
.
.

Second input

Data
.
.
.
.
.
.
8000
01
8001
97
8002
88
.
.
.
.
.
.

Third input

Data
.
.
.
.
.
.
8000
02
8001
05
8002
04
.
.
.
.
.
.

Flow Diagram:

Program:

HEX Codes
Labels
Mnemonics
F000
21, 00, 80

LXI H,8000H
Point to get the choice
F003
7E

MOV A,M
Load choice into A
F004
FE, 00

CPI 00H
F006
CA,14, F0

F009
FE, 01

CPI 01H
Compare for SUB
F00B
CA,27, F0

JZ SUB
F00E
FE, 02

CPI 02H
Compare for MUL
F010
CA, 3F, F0

JZ MUL
F013
76

HLT
Terminate the program
F014
23
INX H
Point to first operand
F015
7E

MOV A,M
Load operand to A
F016
23

INX H
Point to next operand
F017
86

Add M with A
F018
27

DAA
F019
6F

MOV L,A
Store A to L
F01A
D2, 22, F0

JNC SKP1
If CY = 0, jump to SKP1
F01D
26, 01

MVI H,01H
Load H with 01H
F01F
C3, 62, F0

JMP STORE
Store result
F022
26, 00
SKP1
MVI H,00H
Clear HL
F024
C3, 62, F0

JMP STORE
Store HL as result
F027
23
SUB
INX H
Point to first operand
F028
46

MOV B,M
Load operand to B
F029
3E, 99

MVI A,99H
Load A with 99H
F02B
23

INX H
Point to next operand
F02C
96

SUB M
Subtract M from A
F02D
C6, 01

Add 01H to get 10's complement
F02F
80

Add B with A
F030
27

DAA
F031
6F

MOV L,A
Store A to L
F032
DA, 3A, F0

JC SKP2
If CY = 1, jump to SKP2
F035
26, FF

MVI H,FFH
Load H with FFH
F037
C3, 62, F0

JMP STORE
Store result
F03A
26, 00
SKP2
MVI H,00H
Clear HL
F03C
C3, 62, F0

JMP STORE
Store HL as result
F03F
23
MUL
INX H
Point to first operand
F040
46

MOV B,M
Load operand to B
F041
23

INX H
Point to next operand
F042
4E

MOV C,M
Load the second operand
F043
26, 00

MVI H,00H
Clear H register
F045
AF

XRA A
Clear A register
F046
B9

CMP C
Compare C with A
F047
CA, 5E, F0

JZ DONE
Jump to Done if Z = 1
F04A
80
LOOP
Add B with A
F04B
27

DAA
F04C
57

MOV D,A
Move A to D
F04D
D2, 55, F0

JNC NINC
if CY = 0, not increment H
F050
7C

MOV A,H
Load H to A
F051
C6, 01

Increase A
F053
27

DAA
F054
67

MOV H,A
Get back to H
F055
79
NINC
MOV A,C
Load A to C
F056
C6, 99

Add A and 99H
F058
27

DAA
F059
4F

MOV C,A
Load A to C again
F05A
7A

MOV A,D
Get back the data from D to A
F05B
C2, 4A, F0

JNZ LOOP
Jump to Loop if Z = 0
F05E
6F
DONE
MOV L,A
Take A to L
F05F
C3, 62, F0

JMP STORE
Store HL as result
F062
22, 50, 80
STORE
SHLD 8050H
Store result from HL
F065
76

HLT
Terminate the program

Output:

First output

Data
.
.
.
.
.
.
8050
85
8051
01
.
.
.
.
.
.

Second output

Data
.
.
.
.
.
.
8050
09
8051
00
.
.
.
.
.
.

Third output

Data
.
.
.
.
.
.
8050
20
8051
00
.
.
.
.
.
.