汇编程序i8080乘以两个16位数字

时间:2016-11-13 10:09:57

标签: assembly

我必须为i8080处理器准备程序。我的程序必须乘以两个16b数字。但我不知道如何逐位检查乘数。

例如1111 * 1011 = 1011的第一位是1所以我加1111 第二位是1所以我加了11110 第三位是0所以我不添加111100 四是1所以我加了1111000

结果是1111 + 11110 + 1111000 = 10100101

我唯一的问题是如何chceck比特乘法器?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

可能最简单的方法是向右移动然后检查进位,否则你必须不断改变你测试的那个位并且很难,特别是对于寄存器对。然而,在8080上移位有点烦人,因为只能旋转A。我们假设乘数位于BC(和HL中的被乘数以及DE中的结果,因此您可以将被乘数移至DAD H并且需要一些XCHG执行添加结果但不常发生这种情况。

mov a, b
ora a    ; reset carry
rar
mov b, a
mov a, c
rar
mov c, a
jnc skipadd

使用ora a确保乘数简单为零,这允许退出测试,例如:

mov a, b
ora c
jnz looptop

如果您展开16,则可以从左侧填充BC并使用被乘数左移的进位,它不会产生任何差异。