Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Відповіді на залік по Ігнату(lg).doc
Скачиваний:
3
Добавлен:
14.09.2019
Размер:
3.87 Mб
Скачать

10. Команди розгалуження, виклику підпрограм, повернення та рестарту.

В цю групу команд входять команди переходів, виклику підпрограм та повернення до основної програми, а також команда рестарту.

Команди переходів є засобом зміни вмісту лічильника команд PC і, отже, зміни нормального послідовного виконання програми. Ці команди розділені на дві підгрупи: безумовного та умовного переходу.

Команди обох підгруп є 3-х байтовими, коли першим байтом є КОП, а другий та третій байти вміщують в собі молодшу (LAD) та старшу (HAD) півадреси точки переходу (тобто адреси, де розміщена наступна команда програми і яка не є послідовно виконуємою командою). Мнемонічним (т.т. асемблерним) записом команди безумовного переходу є JMP [Address] (т.т. JMP [<B3><B2>]), а команд умовного переходу J<Condition>[Address]. Останні здійснюють передачу керування (т.т. виконання програми) в залежності від стану одного з відповідних розрядів регістру флагів, тобто стану одного з чотирьох флагів (Z, S, P і CY). Ці флаги встановлюються по результату виконання команди (тобто вмісту аккумулятора А), яка задає ту чи іншу операцію, і мають такі значення (таблиця 1.8).

Таблиця 1.8.

п.п.

Позначення

флага

Значення

флага

Результат виконання Команди (операції)

1.

2.

Z (zero)

0

1

Якщо результат операції не дорівнює 0.

Якщо результат операції дорівнює 0.

3.

4.

S (sing)

0

1

Якщо старший біт результату (А7) операції дорів-

нює 0.

Якщо старший біт результату(А7) операції дорів-

нює 1.

5.

6.

P (parity)

0

1

Якщо результат операції налічує непарне число 1.

Якщо результат операції налічує парне число 1

7.

8.

CY (carry)

0

1

Якщо є перенос до старшого розряду(при додаванні)

або позичка з старшого розряда (при відніманні

або порівнюванні).

В протилежному випадку.

Оскільки умова переходу пов’язана зі значенням того чи іншого флага, а таких можливих значень є вісім, то для їх кодування в КОП використовуються три розряди, а поле коду умови при запису самої команди та її формату позначається як ССС. Мнемонічним позначенням команд умовного переходу є J (тобто від JMP) з відповідним позначенням однієї з умов.

Мають місце наступні умови переходу і відповідні їм значення поля ССС (таблиця 1.9).

Таблиця 1.9.

п.п.

Мнемонічне

позначення

умови

Значення

флага

Зміст значення флага

1.

2.

NZ

Z

Z=0

Z=1

Не нуль

Нуль

3.

4.

NC

C

CY=0

CY=1

Немає переносу

Є перенос

5.

6.

PO

PE

P=0 P=1

Непарний результат

Парний результат

7.

8.

P

M

S=0

S=1

Плюс (додатний)

Мінус (від’ємний)

Якщо задана полем ССС умова виконується, що перевіряється по значенню відповідного розряду регістра флагів, то керування передається команді, адреса якої визначається другим та третім байтами команди умовного переходу, тобто вміст другого та третього байтів команди заноситься в лічильник команд РС.

У разі, якщо задана полем ССС умова не виконується, то ЦП переходить до виконання наступної по порядку команди, для чого вміст лічильника команд просто збільшується на три одиниці.

Команди виклику, які можуть бути як безумовними (CALL), так і умовними (CALL IF), застосовуються для звернення до підпрограм, що розміщені поза робочої області основної пам’яті. Мнемонічне позначення команди умовного виклику створюється об’єднанням символу С (від імені CALL) з одним із мнемонічних позначень умов, які наведені в таблиці 1.9.

На відміну від команд умовного та безумовного переходу команди виклику завжди передбачають можливість повернення до перерваної основної програми. Для цього будь-яка команда виклику перед передачею керування підпрограмі заносить до стеку адресу повернення до основної програми. Тому вміст старшої половини програмного лічильника PCH заноситься до стеку за адресою (SP)-1, а молодша півадреса PCL-до стеку за адресою (SP)-2, де (SP)- вміст показника стеку. Сам вміст показника стеку при цьому зменшується на дві одиниці.

Будь яка підпрограма завжди повинна закінчуватися командою безумовного повернення RET(RETURN), або командою повернення по умові (RETURN IF). Мнемонічне позначення команди умовного повернення створюється об’єднанням символу R (від RETURN) тобто “повернення” з мнемонічним позначенням однієї з ознак умов, які наведені в таблиці 1.9.

При виконанні команди повернення вміст чарунки пам’яті, адреса якої в поточний момент часу є в показнику стека SP, переписується до молодшої половини лічильника команд РС, тобто PCL. Після цього вміст чарунки пам’яті, адреса якої на одиницю більше поточного вмісту показчика стеку SP, переписується до старшої половини РС тобто РСН, що призводить до формування в РС адреси повернення з останньої виконаної підпрограми. При цьому вміст показника стеку збільшується на дві одиниці.

Команда RST (RESTART) здійснює повторний запуск МП і використовується в операціях з вектором (тобто двійковим кодом) переривань NNN, де N=0/1. Таким чином RST є командою програмних переривань, число яких дорівнює восьми. Для виконання такої команди необхідно вказати початкову адресу підпрограми обробки переривань даного типу. Цю адресу формує на підставі, коду NNN сама одно байтова команда RST n, де n-номер рестарту (n=0-7), і є аргументом команди.

При виконанні команди RST вміст РС пересилається до стеку, коли старша півадреса РСН переноситься до стеку за адресою (SP)-1, а молодша півадреса PCL-до стекової області пам’яті за адресою (SP)-2. При цьому вміст показника стека зменшується на дві одиниці. Всі ці дії забезпечують повернення до основної програми після завершення роботи програми по обробці даного переривання. При виконанні команди RST вміст програмного лічильника РС формується як шіснадцятирозрядна адреса, що має в собі поле NNN у такому вигляді: (РС)<-8*NNN

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

0

0

0

0

0

0

0

0

0

0

N

N

N

0

0

0

т.т. адреса дорівнює коду NNN, помноженому на 8. Ця адреса і є начальною адресою програми обслуговування переривань даного типу. Перелік команд цієї групи наведений в таблиці 1.10.

Таблиця 1.10

п.п.

Мнемонічне

позначення

Умовний

запис

Формат

команди

Код

Опис,

призначення

Флаги,

цикли,

такти

1.

JMP[Addr]

(Jump)

(PC)<-(<B3>)(<B2>)

C 3

C3

Перехід (або

розгалуження)

Адресація:

безпосередня

Ні,

3МЦ

10Т

2.

J<Condition>

[Addr]

(Conditio-

nal jump)

(PC)<-(<B3>)(<B2>)

Q P

QP

Умовне роз-

галуження.

Адресація:

безпосередня

Ні,

3МЦ

10Т

3.

СALL[Addr]

(Call)

((SP)-1)<-(PCH)

((SP)-2)<-(PCL)

(SP)<-(SP)-2

(PC)<-(<B3>)(<B2>)

С D

CD

Виклик. Адре-

сація: безпо-

середня, сте-

кова.

Ні,

5МЦ

17Т

4.

С<Condition>

[Addr]

(Сonditio-

nal call)

If(CCC)=.T.,then

((SP)-1)<-(PCH)

((SP)-2)<-(PCL)

(SP)<-(<B3>)(<B2>)

Іf(CCC)=.F.,then

(PC)<-(PC)+3

Q Р

QP

Умовний вик-

лик. Адресація

пряма, стекова

Ні,

3/5МЦ

11/17Т

5.

RET

(Return)

(PCL)<-((SP))

(PCH)<-((SP)+1)

(SP)<-(SP)+2

C 9

C9

Повернення.

Адресація:

стекова

Ні,

3МЦ

10Т

6.

R<Condition>

(Сonditio-

nal return)

If(CCC)=.T.,then

(PCL)<-((SP))

(PCH)<-((SP)+1)

(SP)<-(SP)+2

Іf(CCC)=.F.,then

(PC)<-(PC)+3

Q P

QP

Умовне повер-

нення.

Адресація:

посередньо-

регістрова

(стекова)

Ні,

1/3МЦ

5/11Т

7.

RST n

(Restart)

(n=0-7)

((SP)-1)<-(PCH)

((SP)-2)<-(PCL)

(SP)<-(SP)-2

Q P

QP

Повторний за-

пуск(рестарт)

Адресація:

посередньо-

регістрова

Ні,

3МЦ

11Т

8.

PCHL

(Jump H and

L indirect-

(мove H and L

to PC)

(PCH)<-(H)

(PCL)<-(L)

E 9

E9

Перейти до Н та

L посередньо

(передати Н та

L в РС). Адре-

сація: регіст-

рова

Ні,

1МЦ