问题描述
我要在 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;
}