8085程序如何将两个16位数字相除()

问题–在8085微处理器中编写汇编语言程序, 以将两个16位数字相除。
假设–

  • 程序的起始地址:2000
  • 输入存储器位置:2050、2051、2052、2053
  • 输出存储器位置:2054、2055、2056、2057。
示例–
INPUT: (2050H) = 04H (2051H) = 00H (2052H) = 02H (2053H) = 00H OUTPUT: (2054H) = 02H (2055H) = 00H (2056H) = FEH (2057H) = FFH

结果如下:
因此, 我们将两个16位数字相除。
算法–
  1. 将BC初始化为0000H作为商。
  2. 将除数装入HL对, 并将其保存在DE寄存器对中。
  3. 在HL对中加载股息。
  4. 用E寄存器减去累加器的内容。
  5. 将内容A移至C, 将内容H移至A。
  6. 用D减去A的内容。
  7. 将累加器的值移到H。
  8. 如果CY = 1, 则转到步骤10, 否则转到下一步。
  9. 递增寄存器B并跳至步骤4。
  10. 添加DE和HL的内容。
  11. 将剩余的存储在内存中。
  12. 将C的内容移至L, 将B的内容移至H。
  13. 将商存储在内存中。
程序–
内存地址 记忆 注释
2000 LXI B, 0000H 初始化商为0000H
2003 LHLD 2052H 在HL中加载除数
2006 XCHG 交换HL和DE
2007 LHLD 2050 加载被除数
200A MOV A, L A < -L
200B SUB E A < -A-E
200C MOV L, A L < -A
200D MOV, H A < -H
200E SBB D A < -A-D
200F MOV H, A H < -A
2010 JC 2017 进位时跳跃
2013 INX B B < -B + 1
2014 JMP 200B
2017 DAD D HL < -DE + HL
2018 SHLD 2056 HL存储在内存中
201B MOV L, C L < -C
201C MOV H, B H < -B
201D SHLD 2054 HL存储在内存中
2020 HLT 终止程序
【8085程序如何将两个16位数字相除()】说明–
  1. LXI B, 0000H:将BC初始化为0000H。
  2. LHLD 2052H:用地址2052加载HL对。
  3. XCHG:与DE对寄存器交换HL对的内容。
  4. LHLD 2050:用地址2050加载HL对。
  5. MOV A, L:将寄存器L的内容移到寄存器A中。
  6. SUB E:用累加器的内容减去寄存器E的内容。
  7. MOV L, A:将寄存器A的内容移到寄存器L中。
  8. MOV A, H:将寄存器H的内容移到寄存器A中。
  9. SBB D:用进位将累加器的内容减去寄存器D的内容。
  10. MOV H, A:将寄存器A的内容移到寄存器H中。
  11. JC 2017:如果有进位, 请跳至2017年。
  12. INX B:BC寄存器加1。
  13. JMP 200B:跳转到地址200B。
  14. 爸爸D:添加DE和HL对的内容。
  15. SHLD 2056:将HL对的内容存储到内存地址2056和2057中。
  16. MOV L, C:将寄存器C的内容移到寄存器L中。
  17. MOV H, B:将寄存器B的内容移到寄存器H中。
  18. SHLD 2054:将HL对的内容存储到内存地址2054和2055中。
  19. HLT:终止程序的执行。

    推荐阅读