📜  8085程序对给定的8位数字中的1进行计数

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

问题–写一个程序,计算给定的8位数字,使用寄存器B显示起始地址为2000且数字存储在3000存储地址中并将结果存储到3001存储地址中的计数。

例子 –

算法 –

  1. 立即将00移到寄存器B进行计数
  2. 立即将08移至寄存器C以进行移位
  3. 将存储器[3000]的数据加载到累加器中
  4. 向右旋转“ A”并随身携带
  5. 如果没有进位则跳转到步骤7
  6. 否则将寄存器B增加1
  7. 将寄存器C减1
  8. 如果不为零,则跳至第4步
  9. 将寄存器B的内容移入累加器
  10. 将累加器的内容存储到内存[3001](计数)
  11. 停止

程序 –

Memory Mnemonics Operands Comment
2000 MVI B, 00 [B] <- 00
2002 MVI C, 08 [C] <- 08
2004 LDA [3000] [A] <- [3000]
2007 RAR rotate ‘A’ right with carry
2008 JNC 200C jump if no carry
200B INR B [B] <- [B] + 1
200C DCR C [C] <- [C] – 1
200D JNZ 2007 jump if not zero
2010 MOV A, B [A] <- [B]
2011 STA [3001] number of ones
2014 HLT Stop

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

  1. MVI用于立即加载8位给定寄存器(2字节指令)
  2. LDA用于通过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. HLT用于暂停程序