**Problem –** Assembly level program in 8085 which converts a binary number into ASCII number.

**Example –**

**Assumptions –** Binary number which have to convert in ASCII value is stored at memory location 2050 and output will be displayed at memory location 3050 and 3051.

**Algorithm –**

- Load the content of 2050.
- Then separate the LSB of the no. using ANI 0F instruction and MSB of the number by again loading the content of 2050 and rotate it by one bit 4 times to get reverse of the number and then again use ANI 0F to separate the digit.
- If the digit is more than or equal to 0A (in hexadecimal) then add 37 otherwise add 30 to convert into ASCII value (For checking the number is greater than or equal to A then use instruction: CPI 0A and then check the carry flag, if it is 0 then it means digit is greater than or equal to A and if 1 digit is less than A).
- Now Store the ASCII values of both the digits in 3050 and 3051 respectively.

**Program –**

Main routine:

ADDRESS | MNEMONICS | COMMENTS |
---|---|---|

2000 | LDA 2050 | A<-[2050] |

2003 | CALL 2500 | go to address 2500 |

2006 | STA 3050 | A->[3050] |

2009 | LDA 2050 | A<-[2050] |

200C | RLC | Rotate the number by one bit to left without carry |

200D | RLC | Rotate the number by one bit to left without carry |

200E | RLC | Rotate the number by one bit to left without carry |

200F | RLC | Rotate the number by one bit to left without carry |

2010 | CALL 2500 | go to address 2500 |

2013 | STA 3051 | A->[3051] |

2016 | HLT | Terminates the program |

Sub routine:

ADDRESS | MNEMONICS | COMMENTS |
---|---|---|

2500 | ANI 0F | A<-[A] AND 0F |

2502 | CPI 0A | [A]-0A |

2504 | JNC 250A | Jump to [250A] if carryflag is 0 |

2507 | ADI 30 | A<-[A]+30 |

2509 | RET | Return to the next instruction from where subroutine address was called in main routine |

250A | ADI 37 | A<-[A]+37 |

250C | RET | Return to the next instruction from where subroutine address was called in main routine |

**Explanation –**

Main routine:

**LDA 2050:**This instruction will load the number from address 2050 to the accumulator.**CALL 2500:**This instruction will stop executing the main routine instructions after it and will move to the subroutine address 2500 for performing the subtask and after performing subroutine instructions it will come back to mainroutine and execute the instructions after CALL 2500.**STA 3050:**This instruction will store the result (performed in subroutine) of Accumulator to address 3050.**LDA 2050:**This instruction will again load the number from address 2050 to the accumulator as the earlier loaded number is changed in accumulator.**RLC:**Rotate the contents of Accumulator by one bit left side without carry.**RLC:**Rotate the contents of Accumulator by one bit left side without carry.**RLC:**Rotate the contents of Accumulator by one bit left side without carry.**RLC:**Rotate the contents of Accumulator by one bit left side without carry.

(Applying RLC 4 times it will reverse the contents of the Accumulator)**9. CALL 2500:**This instruction will stop executing the main routine instructions after it and will move to the subroutine address 2500 for performing the subtask and after performing subroutine instructions it will come back to mainroutine and execute the instructions after CALL 2500.**10. STA 3051:**This instruction will store the result (performed in subroutine) of Accumulator to address 3051.**11. HLT:**This instruction will terminate the program.

Sub routine:

**ANI 0F:**This instruction will separate the LSB of the number present in Accumulator and stores the result back in Accumulator.**CPI 0A:**This instruction will compare the content of Accumulator with 0A i.e. [A]-0A.**JNC 205A:**If the carryflag becomes 0 then it will jump to 205A otherwise move to the next instruction.**ADI 30:**It will add 30 to the content of Accumulator and again store the result back in Accumulator.**RET:**Now it will move back to the main routine after the next instruction of CALL and start executing instructions of main routine.It will add 37 to the content of Accumulator and again store the result back in Accumulator. **RET:**Now it will move back to the main routine after the next instruction of CALL and start executing instructions of main routine.

Next article: 8085 program to convert 8 bit BCD number into ASCII Code

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.

## Recommended Posts:

- 8085 program to convert ASCII code into HEX code
- 8085 program to convert 8 bit BCD number into ASCII Code
- 8085 program to convert a hexadecimal number into ASCII code
- 8086 program to convert 8 bit BCD number into ASCII Code
- 8085 program to convert a BCD number to binary
- 8085 program to convert binary numbers to gray
- 8085 program to convert gray to binary
- 8085 program to convert an 8 bit number into Grey number
- 8085 program to convert an 8 bit BCD number into hexadecimal number
- 8086 program to convert 8 bit ASCII to BCD number
- 8085 program for Binary search
- 8085 program to count number of ones in the given 8-bit number
- 8085 program to search a number in an array of n numbers
- 8085 program to find the factorial of a number
- 8085 program to count the number of ones in contents of register B
- 8085 program to find square root of a number
- 8085 program to find 1's and 2's complement of 8-bit number
- 8085 program to find 1’s and 2’s complement of 16-bit number
- 8085 program to find sum of digits of 8 bit number
- 8085 program to find nth power of a number

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.