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

2021年3月22日15:04:15 发表评论 840 次浏览

问题–在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 终止程序

说明–

  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:终止程序的执行。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: