Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.23 Mб
Скачать

2. 6. С умова адреси - умовний виклик підпрограми.

Якщо УМОВА, тоді СТЕК<-РС, РС<-АДРЕСА.

Якщо умова істинна, тоді виконуються дії, аналогічні команді CALL. У протилежному випадку - продовжується виконання основної програми. Як умови використовуються прапорці Z, CY, P, S. Із врахуванням умов можливі вісім таких команд умовного виклику підпрограми:

  1. CZ - виклик, якщо Z=l (нуль);

  2. CNZ - виклик, якщо Z=0 (не нуль);

  3. СС - виклик, якщо С=1 (перенос);

  4. CNC - виклик, якщо СY=0 (нема переносу);

  5. СРО - виклик, якщо Р=0 (непарність);

  6. СРЕ - виклик, якщо Р=1 (парність);

  7. СР - виклик, якщо S=0 (плюс);

  8. CM - виклик, якщо S=1 (мінус). Приклад: 0415 CNZ 10A2 Н

Інакше PC<- 0418.

2. 7. RET - безумовне повернення з підпрограми.

PC<-CТЕК SP<-SP+2

Адреса повернення в основну програму вибирається із стека і

заноситься в лічильник команд, а вміст вказівника стека SP збільшуєт я на 2. Вважається, що адреса повернення попередню була занесена у стек командою CALL, або іншим шляхом.

2. 8. R умова - умовне повернення з підпрограми.

Якщо УМОВА, тоді РС<-СТЕК.

Якщо умова виконується, тоді виконуються дії, аналогічні команді RET, у протилежному випадку наступна команда. Як умови перевірки використовуються прапорці Z, CY, P і S. З врахуванням умов можливі вісім таких команд умовного повернення з підпрограми:

  • RZ - повернення, якщо Z=1 (нуль);

  • RNZ - повернення, якщо Z=0 (не нуль);

  • RC - повернення, якщо С=1 (перенос);

  • RNC - повернення, якщо CY=0 (нема переносу)

  • RPO - поаернення, якщо Р=0 непарність);

2. 9. RSTn - повторний запуск. СТЕК<-РС; SP<-SP-2; PC<-8n; п=0, 1,..., 7.

Вміст лічильника команд запам'ятовується у стеку. При цьому, вказівник стека зменшується на 2. У лічильник команд заноситься адреса, яка визначається як добуток n на 8, за яким буде вибиратися подальша команда. Ця однобайтова команда аналогічна трибайтовій команді виклику підпрограми CALL, але має 8 фіксованих адрес переходу на підпрограми:

RST0 - 00Н; RST1 - 08Н; RST2 - 10Н; RST3 - 18Н; RST4 - 20Н;

RST5 28Н; RST6 - ЗОН; RST7 - 38Н.

Приклад: RST4; Викликати підпрограму з адресою 20Н.

2. 10. Організація підпрограм.

Виклик підпрограми порушує природний порядок виконання команд. З точки виклику, керування передається першій команді підпрограми, потім звичайно послідовно виконуються команди підпрограми, а по її завершенні керування передається на команду, яка є наступною після команди виклику підпрограми.

На практиці часто одна викликана підпрограма викликає другу, а друга третю і т. д. Для правильної роботи такого механізму вкладень ("гніздування") підпрограм необхідно забезпечити достатню область пам'яті під стек.

Правильно складені підпрограми не повинні міняти вміст регістрів мікропроцесора, крім регістрів, які використовуються для початкових даних і результату. Для цього на початку підпрограми вміст регістрів, які додатково використовуються, запам'ятовуються у стеку, а в кінці підпрограми відновлюються.

Якщо, наприклад, деяка підпрограма MOVE використовує регістри А, В і С, тоді їх запам'ятовування і відновлення здійснюється так:

MOVE: PUSH PSW; запам'ятовування регістрів А і F

PUSH В ; запам'ятовування регістрів В і С

POP В ; відновлення регістрів В і С

POP PSW ; відновлення регістрів А і F

RET ; повернення з підпрограми

Порядок витягування даних із стека зворотний до порядку їх занесення у стек. Враховуючи, що адреса повернення підпрограми

MOV А, В; передати В в А для аналізу ANI 80Н ; встановити ознаку Z

JNZ MINUS JMP PLUS MINUS:

PLUS:

Варіант 2. (з аналізом ознаки S). MOV А, В

ANA А; встановити ознаку S JP PLUS

MINUS:

PLUS:

Варіант 3. (З аналізом ознаки CY). MOV А, В

RLC; встановити ознаку CY JNC PLUS

Адреса

Дані

Коментар

Hex

Bin

Hex

Dec

Bin

200h

0000

0010

89

137

10001001

1-е дане

0000

0000

201h

0000

0010

88

136

10001000

2-е дане

0000

0001

202h

0000

0010

87

135

10000111

3-е дане

0000

0010

203h

0000

0010

86

134

100001100

4-е дане

0000

0011

204h

0000

0010

85

133

10000101

5-е дане

0000

0100

205h

0000

0010

84

132

10000100

6-е дане

0000

0101