8085 program to find square root of a number
Problem – Write an assembly language program in 8085 microprocessor to find square root of a number.
Example –
Assumptions –
Number, whose square root we need to find is stored at memory location 2050 and store the final result in memory location 3050.
Algorithm –
- Assign 01 to register D and E
- Load the value, stored at memory location 2050 in accumulator A
- Subtract value stored at accumulator A from register D
- Check if accumulator holds 0, if true then jump to step 8
- Increment value of register D by 2
- Increment value of register E by 1
- Jump to step 3
- Move value stored at register E in A
- Store the value of A in memory location 3050
Program –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
2000 | MVI D, 01 | D <- 01 |
2002 | MVI E, 01 | E <- 01 |
2004 | LDA 2050 | A <- M[2050] |
2007 | SUB D | A <- A – D |
2008 | JZ 2011 | Jump if ZF = 0 to memory location 2011 |
200B | INR D | D <- D + 1 |
200C | INR D | D <- D + 1 |
200D | INR E | E <- E + 1 |
200E | JMP 2007 | Jump to memory location 2007 |
2011 | MOV A, E | A <- E |
2012 | STA 3050 | A -> M[3050] |
2015 | HLT | END |
Explanation – Registers used A, D, E:
- MVI D, 01 – initialize register D with 01
- MVI E, 01 – initialize register E with 01
- LDA 2050 – loads the content of memory location 2050 in accumulator A
- SUB D – subtract value of D from A
- JZ 2011 – make jump to memory location 2011 if zero flag is set
- INR D – increments value of register D by 1. Since it is used two times, therefore value of D is incremented by 2
- INR E – increments value of register E by 1
- JMP 2007 – make jump to memory location 2007
- MOV A, E – moves the value of register E in accumulator A
- STA 3050 – stores value of A in 3050
- HLT – stops executing the program and halts any further execution
Please Login to comment...