📜  8085程序将两个16位数字相除

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

问题–在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. 将商存储在内存中。

程序 –

MEMORY ADDRESS MNEMONICS COMMENTS
2000 LXI B, 0000H INITIALISE QUOTIENT AS 0000H
2003 LHLD 2052H LOAD THE DIVISOR IN HL
2006 XCHG EXCHANGE HL AND DE
2007 LHLD 2050 LOAD THE DIVIDEND
200A MOV A, L A<-L
200B SUB E A<-A-E
200C MOV L, A L<-A
200D MOV A, H A<-H
200E SBB D A<-A-D
200F MOV H, A H<-A
2010 JC 2017 JUMP WHEN CARRY
2013 INX B B<-B+1
2014 JMP 200B
2017 DAD D HL<-DE+HL
2018 SHLD 2056 HL IS STORED IN MEMORY
201B MOV L, C L<-C
201C MOV H, B H<-B
201D SHLD 2054 HL IS STORED IN MEMORY
2020 HLT TERMINATES THE PROGRAM

解释 –

  1. LXI B,0000H:将BC寄存器初始化为0000H。
  2. LHLD 2052H:将地址为2052的HL对加载。
  3. XCHG:与DE对寄存器交换HL对的内容。
  4. LHLD 2050:向HL对加载地址2050。
  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. DAD 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:终止程序的执行。