#39;ятовування молодшого байта різниці
INC R0; перехід до старших байтам X і Y
INC R1;
MOV A, @ R0; завантаження старшого байта Y
CPL A; зворотний код Y
ADDC A, @ R1; віднімання старших байт
MOV @ R0, A; запам'ятовування результату
Множення двійкових чисел . Нехай робиться множення чисел 1101 2 і 1011 2 . p> 1 1 0 1 множимое
1 0 1 1 множник
1 1 0 1 1-е часткове твір
1 1 0 1 2-е часткове твір
0 0 0 0 3-е часткове твір
1 1 0 1 4-е часткове твір
1 0 0 0 1 1 1 1 твір
Як видно з прикладу, при виконанні множення формуються часткові твори (Твори множимо на цифри розрядів множника), які підсумовуються з відповідними зрушеннями один щодо одного. У цифрових пристроях процесу підсумовування часткових творів надають послідовний характер: формується один з часткових творів, до нього з відповідним зрушенням додається наступне часткове твір, до отриманої суми двох часткових творів додається з відповідним зрушенням чергове часткове твір, і так далі, поки не будуть підсумовані всі часткові твору. Цей процес підсумовування можна починати з молодшого або старшого часткового твору.
Нижче показані процеси при множенні з підсумовуванням часткових творів, починаючи зі старшого часткового твору (використовується наведений вище приклад множення чисел 1101 2 і 1011 2 ).
1 1 0 1 4-е часткове твір
1 1 0 1 0 зсув на один розряд вліво
0 0 0 0 3-е часткове твір
1 1 0 1 0 сума 4 - і 3-го часткових творів
1 1 0 1 0 0 зсув на один розряд вліво
1 1 0 1 2-е часткове твір
1 0 0 0 0 0 1 сума 4 -, 3 - та 2-го часткових творів
1 0 0 0 0 0 1 0 зсув на один розряд вліво
1 1 0 1 1-е часткове твір
1 0 0 0 1 1 1 1 твір
Розглянемо виконання операції множення з підсумовуванням часткових творів, починаючи з молодшого часткового твори на прикладі множення чисел 1101 2 і 1011 2 . p> 1 1 0 1 1-е часткове твір
0 1 1 0 1 зрушення на один розряд вправо
1 1 0 1 2-е часткове твір
1 0 0 1 1 1 Суми 1 - та 2-го часткових творів
1 0 0 1 1 1 зрушення на один розряд вправо
0 0 0 0 3-е часткове твір
1 0 0 1 1 1 Суми 1 -, 2 - і 3-го часткових творів
1 0 0 1 1 1 зрушення на один розряд вправо
1 1 0 1 4-е часткове твір
1 0 0 0 1 1 1 1 сума часткових творів
1 0 0 0 1 1 1 1 зрушення вправо, твір
При множенні цілих чисел для фіксації твору в розрядної сітці повинно передбачатися число розрядів, рівне сумі числа розрядів множимо і множника.
Приклад 1.8 . Помножити однобайтние цілі числа без знака. У регістрі R1 розміщений множник, в регістрі R2 - множимое. Двухбайтного результат множення буде розміщений в акумуляторі (старший байт) і в R1 (молодший байт) замість множника. У регістр R3, що виконує функції лічильника програмних циклів, завантажується число 8 (число біт множника). Множення виконується молодшими бітами вперед зі зрушенням вправо часткового твору. Послідовність дій при цьому методі множення наступна:
- Вміст акумулятора і регістра-розширювача R1 зсувається вправо на один біт так, що молодший біт множника, що висувається з регістра R1, поміщається в тригер прапора C.
- Якщо C = 1, то множимое додається до вмісту акумулятора, в іншому випадку ніяких операцій не проводиться.
- Декрементируется лічильник циклів R3, і якщо його вміст не дорівнює нулю, то всі дії повторюються.
- Перед виходом з підпрограми формується остаточний результат зрушенням часткового результату на один біт вправо:
MPL: MOV R3, # 8; завантаження лічильника циклів
CLR A; очищення акумулятора
CLR C; очищення ознаки переносу
SHIFT: RRC A; зсув акумулятора вправо
XCH A, R1; обмін акумулятора і R1
RRC A; зсув множника із занесенням
; висунутого біта в C
XCH A, R1; обмін акумулятора і R1
JNC RESULT; якщо C = 1, то підсумовування
ADD A, R2; додаток множимо
RESULT: DJNZ R3, SHIFT; декремент лічильника і перевірка
; закінчення операції (R3 = 0)
RRC A; зсув акумулятора
XCH A, R1; обмін
RRC A; зрушення вмісту R1
XCH A, R1; обмін
Приклад 1.9 . Помножити акумулятор на число 2 в ступені X, де X - число (не більше 8), що зберігається в R2. Множення на 2 замінюється арифметичним зсувом вліво акумулятора і розширювача R1:
MOV R1, # 0; скидання R1
CLR С; скидання прапора перенесення
LOOP: RLC A; арифметичний зсув вліво об'єднаного
XCH A, R1; 16-бітного результату в
RLC A; реєстрової парі (R1) (A)
XCH A, R1;
DJNZ R2, LOOP; цикл
3.4.2. Вивч...