Statement: Write a main program and a conversion subroutine to convert the binary number stored at 6000H into its equivalent BCD number. Store the result from memory location 6100H.

Home
8085 Forum
8085 Free Projects
8085 Free Programs
8085 Tutorials
8085 details
Interfacing Techniques
Electronic Tutorials
Electronic Projects
Assembler/ IDE
Datasheets
Guest Book
About Me
Sample Problem: (6000) H = 8AH

       1.8AH ? 64H (Decimal 100)                                :. Divide by 64H (Decimal 100)
          8AH/64H ? Quotient = 1, Remainder = 26H        
          26H < 64H (Decimal 100)                                :. Go to step 2 and Digit 2 = 1
       2.26H ? OAH (Decimal 10)                                :. Divide by OAH (Decimal 10)
          26H/OAH ? Quotient = 3, Remainder = O8H
          OSH < OAH (Decimal 10)                                        :. Go to step 3 and Digit 1 = 3
       3. Digit 0 = O8H

Source Program:

       LXI SP, 27FFH                        : Initialize stack pointer
       LDA 6000H                                : Get the binary number in accumulator
       CALL SUBROUTINE                : Call subroutine
       HLT                                        : Terminate program execution

Subroutine to convert binary number into its equivalent BCD number:

       PUSH B                : Save BC register pair contents
       PUSH D                : Save DE register pair contents
       MVI B, 64H                : Load divisor decimal 100 in B register
       MVI C, 0AH                : Load divisor decimal 10 in C register
       MVI D, 00H                : Initialize Digit 1
       MVI E, 00H                : Initialize Digit 2
STEP1: CMP B                : Check if number < Decimal 100
       JC STEP 2                : if yes go to step 2
       SUB B                        : Subtract decimal 100
       INR E                        : update quotient
       JMP STEP 1                : go to step 1
STEP2: CMP C                : Check if number < Decimal 10
       JC STEP 3                : if yes go to step 3
       SUB C                        : Subtract decimal 10
       INR D                        : Update quotient
       JMP STEP 2                : Continue division by 10
STEP3: STA 6100H                : Store Digit 0
       MOV A, D                : Get Digit 1
       STA 6101H                : Store Digit 1
       MOV A, E                : Get Digit 2
       STA 6102H                : Store Digit 2
       POP D                : Restore DE register pair
       POP B                        : Restore BC register pair
       RET                        : Return to main program



FLOWCHART