# 8085 program to find the set bit of accumulator

**Problem –** All bits of an accumulator are 0 except a single bit which is 1. Write an assembly language program using 8085 to determine which bit of the accumulator is 1. The result should be a decimal number from 1 to 8 and is required to be stored in register C.

**Examples –**

Example 1 : Accumulator Content is 10H (Hex)Accumulator Content ->0 0 0 1 0 0 0 0Result after execution ->Register C : 5 Example 2 : Accumulator content is 02H (Hex)Accumulator Content ->0 0 0 0 0 0 1 0Result after execution ->Register C : 2

**Solution –**

The problem can be solved through multiple methods. Here, two approaches have been discussed:

- Without using Carry Flag
- Using Carry Flag

**Method 1: Without using Carry Flag**

**Algorithm –**

- Initialize a counter in the form of register C
- Load a register B with 01 to AND with accumulator and check for set bit
- AND the content of accumulator with register B
- If the result of AND operation is non-zero, then the final result is obtained
- If the result is zero, increment counter C
- Accumulator content is shifted right using RRC without affecting carry flag
- The search for next bit is carried out again

**Program –**

**Starting Address of Program ->** 3000H

MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|

3000 | LXI SP, 5000H | Initialize Stack Pointer |

3003 | MVI C, 01H | C <- 01H |

3005 | MVI B, 01H | B <- 01H |

3007 | ANA B | AND A with B |

3008 | JNZ 3010H | Jump at Zero Flag reset (Z=1) to location 3010H |

300B | INR C | C <- C+1 |

300C | RRC | Rotate accumulator right without Carry |

300D | JMP 3007H | Unconditional jump to location 3007H |

3010 | HLT | Halt Execution |

**Explanation –**

**LXI SP, 5000H**is used to initialize the stack pointer at a higher location such that it doesn’t coincide with the program counter**MVI C, 01H**stores the value of counter that will store the final result at end of execution**MVI B, 01H**stores 01H to register B**ANA B**Logical AND the contents of register B with right-most bit of accumulator to check for set bit**JNZ 3010H**jumps to Halt instruction if the AND operation results in non-zero value; it implies the bit is set and final result is obtained**INR C**increments the bit counter if AND operation results in zero value; implying search for set bit needs to be continued**RRC**is used to right shift the accumulator without affecting the carry flag**JMP 3007H**jumps unconditionally to check for next bit of accumulator**HLT**halts the execution of program flow

**Method 2: Using Carry Flag**

**Algorithm –**

- Initialize a counter in the form of register C
- Accumulator content is shifted right through carry flag
- The counter is incremented
- If the carry flag (the right-most bit of accumulator) is set, the final result is obtained
- If the carry flag is reset (CY=0), iteration is continued for the next bit

**Program –**

**Starting Address of Program ->** 3000H

MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|

3000 | LXI SP, 5000H | Initialize Stack Pointer |

3003 | MVI C, 00H | C <- 00H |

3005 | RAR | Rotate accumulator right through Carry |

3006 | INR C | C <- C+1 |

3007 | JNC 3005H | Jump to location 3005H if CY=0 |

300A | HLT | Halt Execution |

**Explanation –**

**LXI SP, 5000H**is used to initialize the stack pointer at a higher location such that it doesn’t coincide with the program counter**MVI C, 00H**stores the value of counter that will store the final result at end of execution**RAR**rotates the accumulator to right through Carry flag such that after the instruction Carry flag contains the right-most bit of accumulator**INR C**Increments the counter**JNC 3005H**jump to location 3005H if Carry flag is not set, that is the right-most bit of accumulator is 0. It doesn’t execute if the Carry flag is set**HLT**halts the execution of program flow

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

## Recommended Posts:

- Reset Accumulator (8085 & 8086 microprocessor)
- 8085 program to find the sum of a series
- 8085 program to find maximum of two 8 bit numbers
- 8085 program to find 1's and 2's complement of 8-bit number
- 8085 program to find square of a 8 bit number
- 8085 program to find larger of two 8 bit numbers
- 8085 program to find nth power of a number
- 8085 program to find 1’s and 2’s complement of 16-bit number
- 8085 program to find the factorial of a number
- 8085 program to find sum of digits of 8 bit number
- 8085 program to find the sum of first n natural numbers
- 8085 program to find the element that appears once
- 8085 program to find the sum of series of even numbers
- 8085 program to find smallest number between two numbers
- 8085 program to find maximum and minimum of 10 numbers
- 8085 program to find square root of a number
- 8085 program to find minimum value of digit in the 8 bit number
- 8085 program to find 2's complement of the contents of Flag Register
- 8085 program to add two 8 bit numbers
- 8085 program to add two 16 bit numbers

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.