首页 > 解决方案 > 不使用算术指令将两个 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

在此处输入图像描述

但我认为答案不正确

标签: emu8086microprocessors

解决方案


我不精通汇编,但仅使用按位运算和加法的算法可能看起来像这样

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;
}

推荐阅读