问题–在8085中编写汇编语言程序以打印输入整数表。
假设–假设输入的号码位于存储位置2050,并且将从起始位置3050开始打印表格。
例子 –
算法 –
- 从存储位置2050将输入的值加载到累加器中,然后将其复制到另一个寄存器D中,并将0A存储在寄存器B中。
- 使用LXI指令将内存位置3050存储在M中,并取另一个值为C的寄存器C。
- 现在将D寄存器的内容复制到A,并将A和C的内容相加并存储在A中,然后将其复制到M。
- M的值增加1。
- 将A的内容复制到C,并将B的内容减1,如果B的值为0,则暂停,否则再次转到步骤3。
程序 –
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 |
解释 –
- LDA 2050:将内容从2050存储器位置加载到累加器(寄存器A)。
- MOV D,A:将累加器的内容移至寄存器D。
- MVI B 0A:将0A数据存储到寄存器B中。
- LXI H 3050:将30存储在H寄存器中,将50存储在L寄存器中,因此M将在其中包含3050。
- MVI C 00:将00数据存储在寄存器C中。
- MOV A,D:将D寄存器的内容移至A。
- 添加C:将A和C寄存器的内容相加并存储在A中。
- MOV M,A:将A寄存器的内容移到M。
- INX H:将M的内容增加1。
- MOV C,A:将A寄存器的内容移至C。
- DCR B:将B寄存器的内容减1。
- JNZ 200B:如果进位标志不为零,则跳转到地址200B。
- HLT:终止程序。