- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
8085 program with a subroutine to add ten packed BCD numbers.
Here we will see how to add ten packed BCD numbers using 8085.
Problem Statement
A set of ten packed BCD numbers is stored in the memory location starting from 8040H to 8049H.
Write a program with a subroutine to add these numbers in BCD. If a carry is generated save it to register B, and adjust it to BCD. The final sum will be less than 9999BCD. Store the sum at locations 8060H and 8061H.
Write a second subroutine to unpack the BCD sum stored in registers A and B, and store them in the OutputBuffer memory starting at 8062H. The most significant digit (BCD4) should be stored at 8065H and the least significant digit (BCD1) at 8062H.
Discussion
The numbers are present at 8040 onwards. As the B will store the carry, we have to clear the B first. In the first phase we have to take the number from memory, then add them as BCD numbers, and store them accordingly. In the next phase the Unpacking task will be completed. In that part we are taking the 16-bit BCD number then break it into 4 digits. Then store them into given location.
Input
Address | Data |
---|---|
… | … |
8040 | 12 |
8041 | 23 |
8042 | 42 |
8043 | 55 |
8044 | 10 |
8045 | 99 |
8046 | 35 |
8047 | 45 |
8048 | 76 |
8049 | 81 |
… | … |
Flow Diagram
Program
Address | HEX Codes | Labels | Mnemonics | Comments |
---|---|---|---|---|
8000 | 21, 40, 80 | | LXI H 8040H | Initialize pointer with the first location of IN-BUFFER |
8003 | 0E, 0A | | MVI C 0AH | Initialize counter with the number of data to be add |
8005 | AF | | XRA A | Clear the contents of the accumulator and the Reg. B |
8006 | 47 | | MOV B, A | |
8007 | CD, 23, 80 | NEXTBCD: | CALL BCDADD | A subroutine that add BCD numbers |
800A | 23 | | INX H | Go to next location |
800B | 0D | | DCR C | Decrement count until 0 is reached |
800C | C2, 07, 80 | | JNZ NEXTBCD | |
800F | 32, 60, 80 | | STA 8060 H | Store the result byte available in A |
8012 | 57 | | MOV D, A | Temporarily D = A |
8013 | 78 | | MOV A, B | Putting B in A |
8014 | 32, 61, 80 | | STA 8061 H | To store it in OUT-BUFFER |
8017 | 7A | | MOV A, D | Restoring back A |
8018 | 21, 62, 80 | | LXI H 8062H | Initialize pointer with the last location of OUT-BUFFER |
801B | CD, 2E, 80 | | CALL UNPAK | A subroutine that separates two nibbles from a packed BCD number |
801E | 78 | | MOV A, B | Copy B to A |
801F | CD, 2E, 80 | | CALL UNPAK | A subroutine that separates two nibbles from a packed BCD number |
8022 | 76 | | HLT | Terminate the program |
8023 | 86 | BCDADD: | ADD M | Add the contents of the memory location specified by the HL register pair with A |
8024 | 27 | | DAA | Decimal adjust accumulator |
8025 | D0 | | RNC | If no carry is produced then return to the calling program |
8026 | 57 | | MOV D, A | Copy A to D |
8027 | 78 | | MOV A, B | If a carry is produced then adjust the contents of the Reg. B |
8028 | C6. 01 | | ADI 01H | |
802A | 27 | | DAA | |
802B | 47 | | MOV B, A | |
802C | 7A | | MOV A, D | Copy D to A |
802D | C9 | | RET | Return to the calling program |
802E | 57 | UNPAK: | MOV D, A | Copy A to D |
802F | E6, 0F | | ANI 0FH | Mask off the most significant four bits |
8031 | 77 | | MOV M, A | Writing A to the memory |
8032 | 23 | | INX H | Go to next location |
8033 | 7A | | MOV A, D | Copy D to A |
8034 | E6, F0 | | ANI F0H | Mask off the least significant four bits |
8036 | 0F | | RRC | Rotate accumulator 4 times to get the first BCD digit |
8037 | 0F | | RRC | |
8038 | 0F | | RRC | |
8039 | 0F | | RRC | |
803A | 77 | | MOV M, A | Writing A to the memory |
803B | 23 | | INX H | Go to next location |
803C | C9 | | RET | Return to the calling program |
Output
Address | Data |
---|---|
… | … |
8060 | 78 |
8061 | 04 |
8062 | 08 |
8063 | 07 |
8064 | 04 |
8065 | 00 |
… | … |
- Related Articles
- 8085 program to add 2-BCD numbers
- 8085 Program to Add two multi-byte BCD numbers
- 8085 program to subtract two BCD numbers
- 8085 Program to multiply two 2-digit BCD numbers
- 8086 program to add two 16 bit BCD numbers with carry
- BCD numbers in 8085 Microprocessor
- 8085 Program for subtraction of multi-Byte BCD numbers
- 8086 program to add two 8 bit BCD numbers
- Program to multiply two 2-digit BCD numbers in 8085 Microprocessor
- 8085 Program to convert BCD to HEX
- 8085 Program to convert HEX to BCD
- Program for subtraction of multi-byte BCD numbers in 8085 Microprocessor
- 8085 Program to Add two 8 Bit numbers
- 8085 program to add two 16 bit numbers
- 8085 program to add numbers in an array
