Файл: Вводый курс цифровой электроники (К.Фрике, 2003).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 15.06.2025

Просмотров: 4529

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

16.16. Команды для подпрограммы

Для программиста задача подсчета байтов между переходом и целью перехода может оказаться чреватой ошибками. Ассемблерная программа разрешает эту задачу автоматически. Для этого задают символические адреса переходов.

В последующих ассемблерных программах используют метку (label) LOOP, которая представляет собой символический адрес

ANA

А

;

тестировалие

наксшливающего

регистра

JNZ

LOOP

;

переход, если

накапливающий

регистр

;

равен О

СМА

; дополнение накапливающего регистра

LOOP

16.16, Команды для подпрограммы

Подпрограммы вызываются командой CALL («вызов»). При выдаче команды CALL осуществляются следующие шаги:

1.При вызове подпрограммы командой CALL вначале запоми­ нается адрес обратного перехода путем размещения в стеке сначала старшего байта счетчика команд, а затем младших байтов. Ячейка ЗУ в стеке определяется в процессе вычита­ ния 1 из адреса, на который показывает указатель вершины стека. Затем младший байт счетчика команд размещается в ячейке ЗУ с адресом (SP)-2.

2.Затем показания указателя вершины стека уменьшаются на 2. В том случае, если выбрано обычное представление, при ко­ тором ячейки ЗУ с более старшими адресами вносятся вниз, стек растет вверх. Указатель вершины стека после команды CALL показывает на самую старшую занятую позицию стека (top of stack = TOS).

3.Счетчик команд загружается адресом, имеющимся в операн­ де. Теперь на этом месте будет стоять следующая подлежащая выполнению команда.

При обратном переходе в соответствии с командой RET (return) производится:

LСодержание ячейки ЗУ, на которую показывает указатель вер­ шины стека, записываемый в младшем байте счетчика команд.


Глава 16. Структура, система команд и работа микропроцессора

Содержание ячейки с адресом выше на 1 записывается в стар­ шем байте PC (PC = program counter = instruction counter =

= счетчик команд).

2.Показание указателя вершины стека возрастает на 2.

Таблица 16.13. Команды перехода.

Команда

Операнд

Воздействие, если

CALL

addr

условие выполнено

((SP) - 1) ^

(РСН)

((SP) - 2) ^

(РСН)

(SP) 4- (SP) - 2

CNZ

addr

(PC) ^ (byte3)(byte2)

N

CZ

addr

CNC

addr

((SP) - 1) ^

(РСН)

ОС

addr

1 ((SP) - 2) ^

(PCL)

СРО

addr

I (SP) ^

(SP) - 2

СРЕ

addr

(PC) ^

(byte3)(byte2)

СР

addr

1СМ

addr

/

1 RET

(PCL) ^

((SP))

(РСН) <г- ((SP) + 1)

(SP) -S- (SP) + 2

RNZ

ч

RZ

(PCL) ^ ((SP))

RNC

RC

1 (РСН) ^ ((SP) + 1)

RPO

1 (SP) ^

(SP) + 2

RPE

RP

J

RM

RST п

((SP) - 1) ^

(РСН)

п G {0..7}

((SP) - 2) ^ (PCL)

(SP) ^ (SP) - 2

(PC) ^ п X 8

Условие

В

Z

T

нет

3

5

18

Z = 0

\

Z = l

CY = 0

C Y = 1

>3

2/5

9/18

P = 0

P = 1

S = 0

S = l

J

нет

1

3

10

Z = 0

Ч

Z = 1

CY = 0

и 1/3

CY=:1

6/12

P = 0

P = l

S = 0

S = l

)

нет

1

3

12

Вызовы подпрограммы не влияют на флаги. Дальнейшее выполне­ ние подпрограммы продолжается так, как это можно видеть в та­ блице.


16.16. Команды для подпрограммы

Команда RST (restart, «перезапуск») вызывает после запомина­ ния PC новый старт программы по определенному адресу. Старто­ вый адрес является результатом умножения двоичного эквивалента операнда на 8.

Например, J\ля. RST Зю = 112 стартовым адресом является

0000000000011000.

С помощью команд PUSH и POP содержание регистров может быть размещено в ЗУ магазинного типа (то есть стеке) и выведено вновь, чтобы избежать его разрушения при операциях подпрограм­ мы. С помощью команд PUSH PSW и POP PSW можно сохранить (содержимое накапливающего регистра и флаг-регистра = proces­ sor status word, PSW, слева состояния процессора). Команда XTHL производит взаимную замену пары регистров HL и TOS (top of staса, вершина стека).

Указатель вершины стека может быть загружен в регисторную пару HL с помощью следующих команд

LXI Н,ООООН DAD SP

Указатель вершины стека должен быть инициализирован. Как пра­ вило, его устанавливают по самому старшему адресу зоны RAMH-1. Поскольку он перед первой записью уменьшает свое значение на 1, он будет при этом показывать на старший адрес. Инициализация может быть осуществлена с помощью команды LXISP.

Таблица 16.14. Команды для стека.

К о м а н да

Операнд

Воздействие, если

В

z

T

условие выполнено

PUSH

i-p

((SP) -

1)

^

(rh)

1

3

12

(rp Ф SP)

((SP) -

2)

^

(rl)

(SP) ^

(SP) - 2

PUSH

PSW

((SP) -

1)

^

(A)

1

3

12

((SP) -

2)

^

(?????????)

(SP) ^

(SP) -

2

POP

rp

(rl) <-

((SP))

1

3

10

(rp Ф SP)

(rh) ^

((SP) + 1)

(SP) <r- (SP) + 2

POP

PSW

(???????????)

4r- ((SP))

1

3

10

(A) ^

((SP) + 1)

(SP) ^

(SP) + 2


Глава 16. Структура, система команд и работа микропроцессора

В табл. 16.15 показана подпрограмма, в которой запоминаются содержания всех регистров. Это необходимо только тогда, когда они используются и в подпрограмме. Без запоминания в стеке было бы утеряно содержание, которое еще может потребоваться в вызы­ вающей программе.

Таблица 16.15. Структура подпрограммы.

Адрес

Машин,

Метка

Операц.

Операнд

Комментарии

код

код

1000

31 01 18

LXI

SP, 1801H

Инициализация стека

1003

01 ЕС OF

LXI

B, OFECH

Загрузка в ВС

1006

11 D1 80

LXI

H, ICFEH

Вызов подпрогрг1Ммы

1009

21 FE 1С

LXI

H, ICFEH

ЮОС

CD 00 12

CALL

UTPR

1200

05

UTPR

PUSH

В

Запоминание ВС

1201

D5

PUSH

D

1202

Е5

PUSH

H

1203

F5

PUSH

PSW

Запоминание (А) и

флагов

Команды подпрограммы

120F

Fl

POP

PSW

Получить

накопительный регистр

H

и флаги

1210

El

POP

Получить назад HL

1211

Dl

POP

D

1212

01

PGP

В

1213

C9

RET

Обратный переход

В табл. 16.16 показано содержание стека во время выполнения подпрограммы в табл. 16.15. В этом примере принято, что в накап­ ливающем регистре стоит ЕОН и что флаг-регистр содержит 08Н.

16.17. Команды для управления процессором

Команда HLT (half, «останов») приводит процессор в состояние ожи­ дания. Он выходит из этого состояния только при воздействии ко­ манд прерывания RESET или TRAP. Другие прерывания должны быть сначала окончены, чтобы исключить воздействие на состоя­ ние останова (halt).