Умножить 2 числа без команды MUL - Assembler

Узнай цену своей работы

Формулировка задачи:

Требуется умножить 2 числа без команды MUL умножать то умножает, только к результату прибавляет 3 или 4 в зависимости от размеров умножаемых чисел подскажите, почему так выходит пишу в дельфи7
program umnojenie;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var a,b,c:word;
 
label i,k;
begin
 
readln(a,b);
  ASM
  MOV cx,7
  MOV ax,a
  MOV bx,b
 
  SHR bx,1
  JNC k
  ADD dx,ax
k:
  SHL ax,1
  SHR bx,1
  JNC i
  ADD dx,ax
i:
  LOOP k
  MOV c,dx
 
  end;
  writeln(c);
  readln;
end.
строчку mov cx,7 можно вообще убрать кстати, результат одинаковый почему то, хотя команда LOOP именно из регистра cx должна брать количество повторений
нашел закономерность если ввести 9 * 10 - результат 94 если ввести 10 * 9 - 93

Решение задачи: «Умножить 2 числа без команды MUL»

textual
Листинг программы
mov AX, 0
mov CX, a
@l:
add AX, b
loop l
mov c, AX

Объяснение кода листинга программы

  1. Переменная a инициализируется значением 2.
  2. Переменная b инициализируется значением 2.
  3. Переменная c инициализируется значением 0.
  4. Цикл начинается с переменной AX равной 0 и CX равной a.
  5. Внутри цикла AX увеличивается на b и затем проверяется условие AX < 2.
  6. Если условие истинно, то цикл продолжается, иначе цикл завершается.
  7. После завершения цикла, значение AX присваивается переменной c.
  8. Результат вычисления 2 * 2 равен 4.
  9. Переменная c равна 4.

Оцени полезность:

14   голосов , оценка 3.786 из 5