我必须为i8080处理器准备程序。我的程序必须乘以两个16b数字。但我不知道如何逐位检查乘数。
例如1111 * 1011 = 1011的第一位是1所以我加1111 第二位是1所以我加了11110 第三位是0所以我不添加111100 四是1所以我加了1111000
结果是1111 + 11110 + 1111000 = 10100101
我唯一的问题是如何chceck比特乘法器?
感谢您的帮助
答案 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
并使用被乘数左移的进位,它不会产生任何差异。