如何解决不使用算术指令将两个 16 位数字相乘
我要在 emu 8086 微处理器中不使用 MUL 将两个 16 位数字相乘 下面是我是怎么做的
MOV AX,000H
MOV DX,AX
MOV AL,[4000H]
MOV CL,[4002H]
ADD AL,CL
MOV [4003H],AL
DAA
MOV AL,[4004H]
MOV CL,[4005H]
ADC AL,CL
MOV [4006H],[000H]
ADC AL,AL
MOV [4007H],AL
HLT
但我认为答案不正确
解决方法
我不精通汇编,但只使用按位运算和加法的算法可能看起来像这样
multiply (unsigned int a,unsigned int b) {
if (a == 0 || b == 0) return 0;
int c = 0;
while (a != 0) {
if (a & 1) {
c += b;
}
a = a >> 1;
b = b << 1;
}
return c;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。