Problem – Write an assembly language program in 8085 microprocessor to find square of 8 bit number. Example –
- Assign 20 to register H, 50 to register L and 00 to accumulator A
- Load the content of memory location which is specified by M in register B
- Add content of M in accumulator A and decrement value of B by 01
- Check if B holds 00, if true then store the value of A at memory location 3050 otherwise go to step 3
Program –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
2000 | MVI H 20 | H <- 20 |
2002 | MVI L 50 | L <- 50 |
2004 | MVI A 00 | A <- 00 |
2006 | MOV B, M | B <- M |
2007 | ADD M | A <- A + M |
2008 | DCR B | B <- B – 01 |
2009 | JNZ 2007 | Jump if ZF = 0 |
200C | STA 3050 | M[3050] <- A |
200F | HLT | END |
Explanation – Registers used A, H, L, B and indirect memory M:
- MVI H 20 – initialize register H with 20
- MVI L 50 – initialize register L with 50
- MVI A 00 – initialize accumulator A with 00
- MOV B, M – moves the content of memory location which is indirectly specified by M in register B
- ADD M – add the content of memory location which is indirectly specified by M in accumulator A
- DCR B – decrement value of register B by 1
- JNZ 2007 – jump to memory location 2007 if ZF = 0, i.e register B does not contain 0
- STA 3050 – stores value of A in 3050
- HLT – stops executing the program and halts any further execution
Advantages:
- Simple and easy to understand logic
- Uses only a few instructions, making it efficient in terms of memory usage and execution time
- Can be easily modified to square larger numbers
Disadvantages:
- Only works for 8-bit numbers
- Can only find the square of positive numbers
- May not be the most efficient method for finding the square of a number, especially for larger numbers. There are faster algorithms, such as the binary method or the Karatsuba algorithm, that can be used to find the square of a number more efficiently.