Problem – Write an assembly language program in 8085 to print the table of input integer. Assumption – Suppose the inputted number is at memory location 2050 and the table will be printed from starting location 3050. Example –
- Load the value of input in accumulator from memory location 2050 and then copy it to another register say D.Also store 0A in register B.
- Store memory location 3050 in M using LXI instruction and take another register say C with its value 00.
- Now copy the content of D register to A and add the contents of A and C and store it in A then copy it to M.
- Increment value of M by 1.
- Copy content of A to C and decrements the content of B by 1 and if its value is 0 then halt otherwise again go to step number 3.
Program –
ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LDA 2050 | A<-[2050] |
2003 | MOV D, A | D<-[A] |
2004 | MVI B 0A | B<-0A |
2006 | LXI H 3050 | H<-30 & L<-50 |
2009 | MVI C 00 | C<-00 |
200B | MOV A, D | A<-[D] |
200C | ADD C | A<-[A]+[C] |
200D | MOV M, A | M<-[A] |
200E | INX H | HL<-HL+1 |
200F | MOV C, A | C<-[A] |
2010 | DCR B | B<-[B]-1 |
2011 | JNZ 200B | Jump to address 200B if ZF=0 |
2014 | HLT | Terminates the program |
Explanation –
- LDA 2050: load the contents from 2050 memory location to accumulator(register A).
- MOV D, A: move the contents of accumulator to register D.
- MVI B 0A: store 0A data into register B.
- LXI H 3050: store 30 in H register and 50 in L register, hence M will contain 3050 inside it.
- MVI C 00: store 00 data in register C.
- MOV A, D: move the contents of D register into A.
- ADD C: add the contents of A and C register and store in A.
- MOV M, A: move the contents of A register into M.
- INX H: increments content of M by 1.
- MOV C, A: move the contents of A register into C.
- DCR B: decrements the content of B register by 1.
- JNZ 200B: jump to address 200B if Carry flag is not zero.
- HLT: terminate the program.
Advantages:
- This program is capable of printing the table of any input integer up to 255 in decimal or FF in hexadecimal.
- The program uses subroutines to print numbers and characters, making it more modular and reusable.
- The program uses the multiplication operation to generate the table, which is an efficient method.
- The program can be easily modified to output the table in different formats, such as a CSV or HTML table.
Disadvantages:
- The program is relatively complex and may be difficult to understand for novice programmers.
- The program assumes that the input integer is in the A register and does not provide error checking for invalid input.
- The program does not allow for dynamic memory allocation, which may limit its usefulness in more complex applications.
- The program outputs the table to the console, which may not be suitable for all use cases.