Лекція №10 Арифметичні та логічні команди До команд цієї категоpії належать команди: додати, відняти, збільшення або зменшення на 1 кодів, що знаходяться в pегістpах, pегістpових паpах або пам'яті. В командах додавання акумулятоp (pегістр A) вміщує один з доданків. Кожна команда точно визначає pізні джеpела дpугого доданку. Опеpації додавання Команда додавання безпосеpедніх даних з акумулятоpом (ADI data) add immediate КОП C6H ADI D8 (A) ( (A) + D8 безпосеpедня адpесація Це 2-х байтна команда, в пеpшому байті вміщується КОП, в другому - безпосередньо дані для додавання з акумулятором. Схема виконання команди ADI 10H: A Після операції А До операції 7 тактів/2MГц = 3,5мкс 2MГц– частота генератора Діє на всі біти регістру F Команда додавання змісту регістру і змісту акумулятора (ADD R) add register ADD R (A) ( (A) + (R) пряма регістрова. Це однобайтна команда. Схема виконання команди ADD B: A Після операції А 4 такти До операції В Діє на всі біти регістру F Зміст акумулятору додається до змісту регістру і сума розміщується в акумуляторі. 3. Команда додавання змiсту акумулятоpа з непpямим pегiстpом (ADD M) add memory. Це однобайтна команда. Додається змiст пам'ятi, на яку вказує паpа pегicтpiв HL зi змiстом акумулятоpа. ADD M (A) ( (A) + {(HL)} посередня регістрова адресація А А До операції Після операції
F Діє на всі біти регістру F
Змiст акумулятоpа додається до змiсту пам'ятi, адpеса якої знаходитьcя в паpi pегiстpiв HL, а сума pозмiщується в A. Додавання з позикою За цими командами до змiсту акумулятоpа додають змiст pегiстpу або комірки пам’яті і зміст індикатора Cy регістру F. 4. ACI D8 A ( A + D8 + Cy add immediate with carry - безпосередня адресація. Команда двохбайтна. ACI 21H А А До операції Після операції Дані
F
Діє на всі біти регістру F 5. ADC R A( A + R + Cy add register with carry - пряма регістрова адресація Команда однобайтна.
A A
До операції B Після операції F
Діє на всі біти регістру F 6. ADC M A ( A + {(HL)} + Cy add memory with carry - посередня регістрова адресація А A
До операції Після операції
F Діє на всі біти регістру F Додавання з подвійною точністю 7. DAD Rp HL ( HL + Rp add register pair to H and L - пряма регістрова адресація. Команда однобайтна. Додати зміст пари регістрів зі змістом пари HL. HL HL
До операції Після операції BC Cy = 1
Встановлюється тільки індикатор Cy - якщо є перенос при додаванні з подвійною точністю. Операції віднімання За кожною командою віднімається зміст деякого регістру або комірки пам’яті від змісту акумулятора. Внутрішні особливості АЛП не мають змоги віднімати. АЛП здійснює додавання, утворюючи з від’ємного числа доповнений код і потім додає його. 8. Команда відняти безпосередньо SUI D8 A ( A - D8 subtract immediate - безпосередня адресація. Команда двохбайтна, в першому байті вміщується КОП, а безпосередньо за ним дані для віднімання від акумулятору A A +0000 1001 1111 1111 1 0000 1000 До операції Після операції F
Дані , які знаходяться в пам’яті безпосередньо за КОП віднімаються від акумулятора і сума розміщується в акумуляторі. Доповнений код другого числа 1111 1111 додається до 0000 1001, що дає суму 1 0000 1000 . В старшому біті суми є переповнення, яке не належить різниці 0000 1000. МП використовує це переповнення для встановлення індикатору переносу Су. Віднімаючи МП інвертує перенос і результат стає змістом індикатору переносу Су. Коли в ході віднімання Су=0 це значить, що переносу не було і що перше число більше другого. Тобто біт Су дорівнює біту знаку S. 9. SUB R A ( A - R subtract register - пряма регістрова адресація. Команда займає один байт і впливає на всі біти регістру F. 10. SUB M A ( A - {(HL)} subtract memory - посередня регістрова адресація. Команда займає один байт і впливає на всі біти регістру F. Віднімання з позикою За цими командами віднімається вміст регістру або комірки пам’яті і значення Су від вмісту акумулятора. Індикатори змінюються. Це однобайтні команди SBB R, SBB M i двохбайтна команда SBI D8 11. SBB R A ( A - R - Cy subtract register with borrow - пряма регістрова адресація. A A До операції Після операції B
Діє на всі біти регістру F. 12. SBB M A ( A - {(HL)} - Cy subtract memory with borrow - посередня регістрова адресація. 13. SBI D8 A ( A - D8 - Cy subtract immediate with borrow - безпосередня адресація. Команди інкрементування і декрементування Інкремент - збільшення на одиницю, декремент - зменшення на одиницю. 14. INR R R ( R - 1 increment register - пряма регістрова адресація. Змінюються всі індикатори крім Су. 15. DCR R R ( R + 1 decrement register - пряма регістрова адресація. Змінюються всі індикатори крім Су. 16. INX Rp Rp ( Rp - 1 increment register pair - пряма регістрова адресація. Зміст регістрових пар розглядається як єдине ціле 16 - розрядне число. Індикатори не змінюються. Приклад INX H {(HL)} ( {(HL)} + 1 До операції Після операції HL HL Регістр ознак F не змінюється. Склад команд логічних операцій До команд цієї групи відносять команди порівняння, зсуву, інвертування, а також логічні операції AND, OR, XOR. Логічні операції в МП здійснюються порозрядно згідно з таблицями істинності. Логічне множення AND, &, ^ (кон’юнкція) використовується для виділення необхідного розряду або групи розрядів (розділення на тетради): 0 ^ 0 = 0 x1 = ABH s1=0FH s2=0F0H 1 ^ 0 = 0 x1 ^ s1 = 0BH 0 ^ 1 = 0 x1 ^ s2 = 0A0H 1 ^ 1 = 1 Логічне додавання OR, V (диз’юнкція) використовується для формування байта із окремих бітів: 0 V 0 = 0 x1 = 0BH 0 V 1 = 1 x2 = 0A0H x1 = 39H s = 80H 1 V 0 = 1 x1 V x2 = 0ABH x1 V s = 0B9H 1 V 1 = 1 Додавання по модулю два XOR, ¥ використовується для обнулення А і погашення всіх прапорців в регістрі F: 0 ¥ 0 = 0 0 ¥ 1 = 1 1 ¥ 0 = 1 A ¥ A ( A 1 ¥ 1 = 0 S=0, Z=1, Ac=0, P=1, Cy=0 1. ANA R A ( A ^ R and register - пряма регістрова адресація. Результат побітного логічного множення змісту А і змісту регістру заноситься в акумулятор. Діє на всі біти регістру F. 2. ANA M A ( A ^ {(HL)} and memory - посередня регістрова адресація. Діє на всі біти регістру F. Cy = 0. 3. ANI D8 A ( A ^ D8 and immediate - безпосередня адресація. А А 01H Діє на всі біти регістру F. Cy = 0. 4. XRA R A ( A ¥ R exclusive or register - пряма регістрова адресація Діє на всі біти регістру F. Cy = 0. Ac = 0. Обнулення А. А А Z = 1 Cy = 0 Ac = 0 5. XRA M A ( A ¥ {(HL)} exclusive or memory - посередня регістрова адресація. Діє на всі біти регістру F. Cy = 0. Ac = 0. 6. XRI D8 A ( A ¥ D8 exclusive or immediate - безпосередня адресація. Діє на всі біти регістру F. Cy = 0. Ac = 0. 7. ORA R A ( A V R or register - пряма регістрова адресація Діє на всі біти регістру F. Cy = 0. Ac = 0. Побітна операція логічного додавання змісту А і змісту регістру згідно таблиці істинності. Результат в А. 8. ORA M A ( A V {(HL)} or memory - посередня регістрова адресація. Діє на всі біти регістру F. Cy = 0. Ac = 0. 9. ORI D8 A ( A V D8 or immediate - безпосередня адресація. Діє на всі біти регістру F. Cy = 0. Ac = 0. 10. CMP R A - R compare register - пряма регістрова адресація. Порівняти регістр з акумулятором. Зміст А не змінюється. Від вмісту А віднімається вміст регістру, але результат нікуди не записується, а відповідно до результату формуються ознаки регістру F. якщо A < R => S=1, Cy=1 A >= R => S=0, Cy=0 A = R => Z=1 11. CMP M A - {(HL)} compare memory - посередня регістрова адресація. Діє на всі біти регістру F. 12. CPI D8 A - D8 compare immediate - безпосередня адресація. Діє на всі біти регістру F. 13. RLC Зсув вліво rotate left - неявна адресація. Cy ( A7 Діє тільки на Cy A0 ( A7 An+1 ( An 0 Cy A A 1010 1100 ( 0101 1001 Cy=1 14. RRC Зсув вправо Діє тільки на Cy rotate right - неявна адресація. (СY) ( (A0) (A7) ( (A0) (An) ( (An-1) RAL Циклічний зсув вліво. Діє тільки на Cy Rotate left through carry – неявна адресація. (СY) ( (A7) (A0) ( (Cy) (An+1) ( (An) RAR Циклічний зсув вправо. Діє тільки на Cy Rotate right through carry – неявна адресація. (СY) ( (A0) (A7) ( (Cy) (An) ( (An+1) 17. CMA A ( A Інверсія. Отримання оберненого коду акумулятора. Не діє на регістр F. complement accumulator – неявна адресація. 18. CMC Cy ( Діє лише на біт Cy. complement carry – адресація відсутня. 19. STC Cy ( 1 Діє лише на біт Cy. set carry - адресація відсутня. Встановити біт Сy регістру F в 1.