# 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

## Recommended Posts:

- Reset Accumulator (8085 & 8086 microprocessor)
- 8085 program to find the sum of a series
- 8085 program to find the factorial of a number
- 8085 program to find the element that appears once
- 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 the sum of first n natural numbers
- 8085 program to find sum of digits of 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 square of a 8 bit number
- 8085 program to find the sum of series of even numbers
- 8085 program to find square root of a number
- 8085 program to find minimum value of digit in the 8 bit 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.