📜  8085程序找到一个序列的总和

📅  最后修改于: 2021-06-28 15:16:26             🧑  作者: Mango

问题–编写一个程序,查找一个序列的总和,其中序列从3001存储器地址开始,序列数在3000存储器地址处,给定程序的起始地址为2000,将结果存储到4000存储器地址中。

例子 –

算法 –

  1. 立即将00移到寄存器B进行进位
  2. 立即将存储器[3000]的数据加载到H中
  3. 将存储器的值移到寄存器C中
  4. 将C减1
  5. HL对增加1
  6. 将存储器的值移到累加器中
  7. HL对增加1
  8. 用累加器增加存储器的价值
  9. 如果没有进位则跳转到步骤11
  10. 将寄存器B的值增加一
  11. 将寄存器C减1
  12. 如果不为零,则跳至步骤7
  13. 将累加器的内容存储到内存[4000]中(结果)
  14. 将寄存器B的内容移入累加器
  15. 将累加器的内容存储到内存[4001]中(进位)
  16. 停止

程序 –

Memory Mnemonics Operands Comment
2000 MVI B, 00 [B] <- 00
2002 LXI H, [3000] [H-L] <- [3000]
2005 MOV C, M [C] <- [M]
2006 DCR C [C] <- [C] – 1
2007 INX H [H-L] <- [H-L] + 1
2008 MOV A, M [A] <- [M]
2009 INX H [H-L] <- [H-L] + 1
200A ADD M [A] <- [A] + [M]
200B JNC 200F jump if no carry
200E INR B [B] <- [B] + 1
200F DCR C [C] <- [C] – 1
2010 JNZ 2009 jump if not zero
2013 STA [4000] result
2016 MOV A, B [A] <- [B]
2017 STA [4001] carry
201A HLT Stop

说明–寄存器A,B,C,H用于一般用途。

  1. MVI用于立即加载8位给定寄存器(2字节指令)
  2. LXI用于立即使用16位地址(3字节指令)加载寄存器对
  3. MOV用于将数据从累加器传输到寄存器(任意)或将寄存器(任何)传输到累加器(1字节)
  4. RAR用于带进位的“ A”右移(1字节指令)
  5. STA用于使用16位地址(3字节指令)将数据从累加器直接存储到存储器中
  6. INR用于将给定寄存器增加1(1字节指令)
  7. 如果没有进位(3字节指令),则使用JNC跳转到给定的步骤
  8. 如果JNZ不为零,则使用JNZ跳至给定步骤(3字节指令)
  9. DCR用于将给定寄存器减1(1字节指令)
  10. INX用于将寄存器对增加1(1字节指令)
  11. ADD用于将累加器的值与给定值相加(1字节指令)
  12. HLT用于暂停程序