Умножить 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
Объяснение кода листинга программы
- Переменная
a
инициализируется значением 2. - Переменная
b
инициализируется значением 2. - Переменная
c
инициализируется значением 0. - Цикл начинается с переменной
AX
равной 0 иCX
равнойa
. - Внутри цикла
AX
увеличивается наb
и затем проверяется условиеAX < 2
. - Если условие истинно, то цикл продолжается, иначе цикл завершается.
- После завершения цикла, значение
AX
присваивается переменнойc
. - Результат вычисления 2 * 2 равен 4.
- Переменная
c
равна 4.