Приклад 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  

 

Склад команд управління

Група команд управління складається із набору команд роботи із стеком, введення – виведення інформації, управління МП.