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

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

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

假设–

  • 程序的起始地址:2000
  • 输入存储器位置:2050、2051、2052、2053
  • 输出存储器位置:2054、2055、2056、2057

示例–

INPUT:
       (2050H) = 04H
       (2051H) = 07H 
       (2052H) = 02H 
       (2053H) = 01H
OUTPUT:
        (2054H) = 08H
        (2055H) = 12H
        (2056H) = 01H
        (2057H) = O0H

结果如下:

因此, 我们将两个16位数字相乘

算法

  1. 加载HL对中的第一个数据。
  2. 将HL对的内容移动到堆栈指针。
  3. 将第二对数据装入HL对并将其移至DE。
  4. 将H寄存器设为00H, 将L寄存器设为00H。
  5. 添加HL对和堆栈指针。
  6. 检查进位是否将进位加1, 否则进入下一步。
  7. 然后将E移至A, 并对累加器和寄存器D执行"或"运算。
  8. 运算的值为零, 然后存储该值, 否则转到步骤3。

程序–

内存地址 记忆 注释
2000 LHLD 2050 用地址2050加载H-L对
2003 SPHL 保存在栈指针中
2004 LHLD 2052 用地址2052加载H-L对
2007 XCHG 交换HL和DE配对内容
2008 LXI H, 0000H H <-00H, L <-00H
200B LXI B, 0000H B <-00H, C <-00H
200E DAD SP
200F JNC 2013 不进位时跳跃
2012 INX B BC增加1
2013 DCX D 递减DE 1
2014 MOV A, E A <-E
2015 ORA D 或累加器和寄存器的内容
2016 JNZ 200E 不为零则跳跃
2019 SHLD 2054 L <-2054, H <-2055
201C MOV L, C L <-C
201D MOV H, B B < H
201E SHLD 2056 L <-2055, H <-2056
2021 HLT 终止程序

说明–寄存器B, C, D, E, H, L和累加器用于通用。

  1. LHLD 2050:用地址2050加载HL对。
  2. SPHL:将HL的内容保存在堆栈指针中。
  3. LHLD 2052:用地址2052加载H-L对。
  4. XCHG:与DE交换HL对的内容。
  5. LXI H, 0000H:将H设为00H, 将L设为00H。
  6. LXI B, 0000H:将B设为00h, 将C设为00H
  7. DAD SP:添加HL对和堆栈指针。
  8. JNC 2013:如果没有进位, 请跳转至地址2013。
  9. INX B:将BC寄存器加1。
  10. DCX D:将DE寄存器对减1。
  11. MOV A, E:将寄存器E的内容移至累加器。
  12. ORA D:或累加器和D寄存器的内容。
  13. JNZ 200E:如果不为零, 则跳转到地址200E。
  14. SHLD 2054:将结果从HL对寄存器存储到内存地址2054和2055。
  15. MOV L, C:将寄存器C的内容移到L。
  16. MOV H, B:将寄存器B的内容移到H。
  17. SHLD 2056:将结果从HL对寄存器存储到内存地址2056和2057。
  18. HLT:终止程序。

木子山

发表评论

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