Приклад 3. Додавання 8-бітних чисел без переносу
Команда повернення із підпрограми
Умовний виклик підпрограм
11. CC Addr змішана адресація
call on carry якщо Cy=1, то 1,2,3,4
якщо Cy=0, то PC ß PC + 3
12. CNC Addr змішана адресація
call on not carry якщо Cy=0, то 1,2,3,4
якщо Cy=1, то PC ß PC + 3
13. CZ Addr змішана адресація
call on zero якщо Z=1, то 1,2,3,4
якщо Z=0, то PC ß PC + 3
14. CZ Addr змішана адресація
call on not zero якщо Z=0, то 1,2,3,4
якщо Z=1, то PC ß PC + 3
15. CP Addr змішана адресація
call on plus якщо S=0, то 1,2,3,4
якщо S=1, то PC ß PC + 3
16. CM Addr змішана адресація
call on minus якщо Z=1, то 1,2,3,4
якщо Z=0, то PC ß PC + 3
17. CPE Addr змішана адресація
call on parity якщо P=1, то 1,2,3,4
якщо P=0, то PC ß PC + 3
18. CPO Addr змішана адресація
call on not parity якщо P=0, то 1,2,3,4
якщо P=1, то PC ß PC + 3
19. RET змішана адресація
return PCL ß {(SP)}
PCH ß {(SP) + 1}
SP ß SP + 2
стек
PCL=01H PCH=20H PC=2001H SP=2205H
Повернення за умовою (Conditional return)
20. RC, якщо Сy=1, то PCL ß {(SP)}
PCH ß {(SP) + 1}
SP ß SP + 2
якщо Cy=0, то PC ß PC +1, тобто наступна команда.
21. RNC Cy=0 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
22. RZ Z=1 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
23. RNZ Z=0 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
24. RP S=0 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
25. RM S=1 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
26. RPE P=1 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
27. RPO P=0 (то PCL ß {(SP)} PCH ß {(SP) + 1} SP ß SP + 2 якщо навпаки, то PC ß PC +1)
28. RST N (Re-start) повторний пуск 0 <= N <= 7 N – вектор переривання
{(SP) - 1} ß PCH
{(SP) - 2} ß PCL
SP ß SP - 2 0 7
PC ß 8 * NNN NNN – 000…111
29. PCHL неявна адресація
move H and L to PC
PCH ß H
PCL ß L
30. SPHL неявна адресація
move H and L to SP
SP ß HL
Завдання:необхідно додати зміст комірки пам’яті за адресами ADDR1 і ADDR2, і помістити результат в комірку пам’яті з адресою ADDR3.
В цьому прикладі для простоти не будемо враховувати можливість виникнення переносу.
(ADDR1) = 23H – перший доданок
(ADDR2) = 43H – другий доданок
Результатом додавання буде:
(ADDR3) = 23H + 43H = 66H
Алгоритм
Крок 1. Завантаження в акумулятор змісту комірки пам’яті з адресою ADDR1
Крок 2. Зберегти зміст акумулятора в регістрі В
Крок 3. Завантаження в акумулятор змісту комірки пам’яті з адресою ADDR2
Крок 4. Додати зміст акумулятора і регістра В
Крок 5. Переслати зміст акумулятора в комірку пам’яті з адресою ADDR3
Програма
Адреса | Асемблерний код | Мітка | Команда | Коментарі |
ORG 800H | ||||
3A 0C 08 | LDA ADDR1 | ; Крок 1. A ß (ADDR1) | ||
MOV B,A | ; Крок 2. B ß A | |||
3A 0D 08 | LDA ADDR2 | ; Крок 3. A ß (ADDR2) | ||
ADD B | ; Крок 4. A ß A + B | |||
32 0E 08 | STA ADDR3 | ; Крок 5. (ADDR3) ß A | ||
080B | HLT | ; зупинка МП | ||
080C | ADDR1: | DB 23H | ;1-ий доданок | |
080D | ADDR2: | DB 43H | ;2-ий доданок | |
080E | ADDR3: | DB 0 | ;для результату | |
END |
Склад команд управління
Група команд управління складається із набору команд роботи із стеком, введення – виведення інформації, управління МП.