emu8086 - 不使用算术指令将两个 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], AL
DAA
MOV AL,[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;
}