8085 program to add 2-BCD numbers
Problem – Write a program to add 2-BCD numbers where starting address is 2000 and the numbers is stored at 2500 and 2501 memory addresses and store sum into 2502 and carry into 2503 memory address. Example – Algorithm –
- Load 00H in a register (for carry)
- Load content from memory into register pair
- Move content from L register to accumulator
- Add content of H register with accumulator
- Add 06H if sum is greater than 9 or Auxiliary Carry is not zero
- If carry flag is not equal to 1, go to step 8
- Increment carry register by 1
- Store content of accumulator into memory
- Move content from carry register to accumulator
- Store content of accumulator into memory
- Stop
Program –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MVI | C, 00H | [C] <- 00H, carry |
2002 | LHLD | [2500] | [H-L] <- [2500] |
2005 | MOV | A, L | [A] <- [L] |
2006 | ADD | H | [A] <- [A] + [H] |
2007 | DAA | Add 06 if sum > 9 or AC = 1 | |
2008 | JNC | 200C | Jump if no carry |
200B | INR | C | [C] <- [C] + 1 |
200C | STA | [2502] | [A] -> [2502], sum |
200F | MOV | A, C | [A] <- [C] |
2010 | STA | [2503] | [A] -> [2503], carry |
2013 | HLT | Stop |
Explanation – Registers A, C, H, L are used for general purpose
- MVI is used to move data immediately into any of registers (2 Byte)
- LHLD is used to load register pair direct using 16-bit address (3 Byte instruction)
- MOV is used to transfer the data from memory to accumulator (1 Byte)
- ADD is used to add accumulator with any of register (1 Byte instruction)
- STA is used to store data from accumulator into memory address (3 Byte instruction)
- DAA is used to check if sum > 9 or AC = 1 add 06 (1 Byte instruction)
- JNC is used jump if no carry to given memory location (3 Byte instruction)
- INR is used to increase given register by 1 (1 Byte instruction)
- HLT is used to halt the program
Advantages:
- The 8085 program is a simple and efficient way to add two BCD numbers using a microprocessor.
- The program uses only a few instructions and requires minimal memory space, making it easy to implement in a microcontroller.
- The program produces accurate results since it adjusts the accumulator to BCD format using the DAA (decimal adjust accumulator) instruction.
- The program can be easily modified to add larger BCD numbers by adding more instructions to handle carry.
Disadvantages:
- The program is specific to the 8085 microprocessor and cannot be used directly on other microprocessors.
- The program assumes that the BCD numbers are stored in consecutive memory locations, which may not always be the case in real-world applications.
- The program does not handle overflow or underflow conditions, which may occur if the sum of two BCD numbers exceeds the maximum value that can be represented in BCD format.
- The program does not provide any error checking or reporting mechanism, which may make it difficult to identify errors or faults in the program.