Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Команды перехода и вызова подпрограмм



 

Команды этой группы позволяют изменять последовательность выполнения команд программы. Существуют два способа изменения этой последовательности. Первый из них называется безусловным. Согласно этому способу последовательность выполнения программы подвергается изменению всякий раз, когда реализуется определенная команда. В соответствие со вторым способом последовательность выполнения команд программы определяется некоторыми условиями, т.е. изменяется только в том случае, когда значение указанного условия совпадает с заданным.

Команды перехода и вызова подпрограмм являются одной из составных частей процесса принятия решений. В результате выполнения команд арифметической и логической обработки данных вырабатываются значения признаков в регистре состояния. Команды перехода и вызова подпрограмм проверяют значения разрядов регистра состояния и определяют последующий ход выполнения программ в зависимости от результата проверки

Команды перехода, называемые также командами ветвления, позволяют организовать в программах циклы и разветвления.

Команды вызова подпрограмм дают возможность сократить объем разрабатываемых программ за счет повторного использования подпрограмм. Наличие в МП стека с указателем стека делает возможным возврат в главную программу после выполнения подпрограммы.

 

Команды переходов

Эти команды занимают в оперативной памяти 3 байта и выполняются за 3 машинных цикла (10 тактов). Во всех этих командах применяется прямая адресация.

При выполнении команды перехода изменяется содержимое счетчика команд PC. Содержимое второго и третьего байтов команды перехода пересылается автоматически в счетчик команд во время фазы выполнения. Тогда при очередном цикле выборки МП извлекает команду из области памяти, на которую указывает 2-й и 3-й байты команды перехода. Таким образом, происходит переход в другую точку программы. Теперь выполняются одна за другой команды новой последовательности. Это продолжается до тех пор, пока не будет опять выполнена команда перехода.

 

а) Переход безусловный

JMP Адрес (PC) < B3> < B2> B1
  B2 Мл. байт адреса
  B3 Ст. байт адреса
    7 0

 

После этой команды выполнение программы продолжается с новой исходной точки, т.е. с адреса, содержащегося в байтах В2 и ВЗ команды перехода.

б) Переходы условные

(PC) < B3> < B2>, если проверяемое условие выполняется; в противном случае PC (PC )+3, т.е. выполняется следующая команда после команды условного перехода B1 ССС
B2 Мл. байт адреса
B3 Ст. байт адреса
    7 0

 

Значение разрядов ССС команда выбирается в зависимости от проверяемого условия. В МП К580 имеется возможность делать переходы в зависимости от результата проверки следующих условий:

 

Команда перехода Проверяемое условие Значение ССС
JNZ Адрес (Tz) = 0
JZ Адрес (Tz) = 1
JNC Адрес (Tc) = 0
JC Адрес (Tc) = 1
JPO Адрес (Tp) = 0
JPE Адрес (Tp) = 1
JP Адрес (Ts) = 0
JM Адрес (Ts) = 1

 


Примеры:

0806) JMP beep

beep: 0A76

Адрес/ регистр Код до выполнения операции Код после выполнения операции
C3 C3
0A 0A
PC 0A76
FL

0A58) JMP beep

beep: 0B43

Адрес/регистр Код до выполнения операции Код после выполнения операции
0A58 C3 C3
0A59
0A5A 0B 0B
PC 0A58 0B43
FL

 

0921) JNZ L0

L0: 0A42

Адрес/регистр Код до выполнения операции Код после выполнения операции
C2 C2
0A 0A
PC 0A42
FL 02 (TZ=0)

 


0800) JNZ L0

L0: 09FE

Адрес/ регистр Код до выполнения операции Код после выполнения операции
C2 C2
FE FE
PC
FL 42 (TZ=1)

 

0921) JC L0

L0: 0A42

Адрес/ регистр Код до выполнения операции Код после выполнения операции
DA DA
0A 0A
PC 0A42
FL 03 (TC=1)

 

0921) JC L0

L0: 0A42

Адрес/регистр Код до выполнения операции Код после выполнения операции
DA DA
0A 0A
PC
FL 02 (TC=0)

 

Команды вызова подпрограмм и возврата из подпрограмм

С помощью команд переходов последовательность выполнения команд программы может быть изменена путем перехода к новой последовательности. Однако команда перехода сама по себе не позволяет вернуться в то место главной программы, откуда был осуществлен переход. Это можнолегко сделать с помощью команды вызова подпрограммы. Подпрограмма представляет собой фрагмент программы, обращение к которой может иметь место в любой точке главной программы. Когда происходит вызов подпрограммы, то в начале своего выполнения она реализует действия по запоминанию текущего содержимого счетчика команд (точка возврата) Когда выполнение подпрограммы заканчивается, то с помощью команды возврата микропроцессору указывается, что исходное содержимое счетчика команд должно быть извлечено из памяти. Этой информации микропроцессору достаточно, чтобы осуществить возврат в прерванную последовательность команд главной программы. Для запоминания точки возврата используется стек, куда записывается адрес команды, следующей за командой вызова подпрограммы.

Команды данной группы не изменяют содержимого регистра признаков.

 

а) Вызов подпрограммы безусловный

CALL Адрес [SP-1] [SP-2] (PC) < B1>
  SP (SP) -2 < B2> Мл. байт адреса
  PC < B3> < B2> < B3> Ст. байт адреса
    7 0

 

При выполнении этой команды никаких проверок не производится, т.е. вызов подпрограммы производится в любом случае. Команда занимает три байта и выполняется за 5 машинных циклов (17 тактов).

 

б) Условный вызов подпрограммы

Переход к подпрограмме происходит только в том случае, если выполняется проверяемое условие. При этом:

[SP-1] [SP-2] (PC); SP (SP) –2; PC < B3> < B2>

В этом случае команда выполняется за 5 циклов (17 тактов).

Если проверяемое условие не выполняется, то переход к подпрограмме не происходит и выполняется следующая команда программы с адресом PC = (PC) +3. В этом случае команда выполняется за 3 цикла (11 тактов).


 

Формат команды условного вызова B1 ССС
B2 Мл. байт адреса
B3 Ст. байт адреса
    7 0

 

Значение разрядов ССС выбирается в зависимости от проверяемого условия:

 

Команда вызова Проверяемое условие Значение ССС
СNZ Адрес (Tz) = 0
СZ Адрес (Tz) = 1
СNC Адрес (Tc) = 0
СC Адрес (Tc) = 1
СPO Адрес (Tp) = 0
СPE Адрес (Tp) = 1
СP Адрес (Ts) = 0
СM Адрес (Ts) = 1

 

в) Возврат из подпрограммы безусловный

RET PC [SP] [SP+1]; SP (SP) + 2 < B1>
    7 0

 

Команда выполняется за три машинных цикла (10 тактов).

г) Возврат из подпрограммы условный

 

Команда условного возврата из подпрограммы < B1> CCC
 
         

 

Если проверяемое условие выполняется, тоPC [SP] [SP-1]; SP (SP) + 2 и происходит выход из подпрограммы в точку, адрес которой записан в стеке. В этом случае команда выполняется за три машинных цикла (11 тактов). Если это условие не выполняется, то возврата не происходит и выполняется следующая команда подпрограммы, т.е.

PC = (PC) + 1

В этом случае команда выполняется в течение одного машин­ного цикла (5 тактов).

Значение разрядов ССС команды определяется проверяемым условием:

 

Команда возврата Проверяемое условие Значение ССС
RNZ (Tz) = 0
RZ (Tz) = 1
RNC (Tc) = 0
RC (Tc) = 1
RPO (Tp) = 0
RPE (Tp) = 1
RP (Ts) = 0
RM (Ts) = 1

 

При выполнении команд возврата в) и г) МП извлекает из стека значение программного счетчика, при котором произошел переход из программы предыдущего уровня и загружает это значение в счетчик команд. Команде «возврат из подпрограммы» ничего не сообщается относительно того, какого уровня вложения выполняется подпрограмма и сколько раз происходил вызов этой подпрограммы. Выполняя эту команду, МП просто возвращается к тому значению программного счетчика, которое было последним загружено в стек.

 

Примеры:

0AF3) CALL BEEP

BEEP: 0BC0)

Адрес/ регистр Код до выполнения операции Код после выполнения операции
0AF3 CD CD
0AF4 C0 C0
0AF5 0B 0B
PC 0AF3 0BC0
SP 0BB0 0BAE
0BAE F6
0BAF 0A
FL

0BD4) RET

Адрес/ регистр Код до выполнения операции Код после выполнения операции
0BD4 C9 C9
SP 0BAE 0BB0
0BAE F6 F6
0BAF 0A 0A
PC 0BD4 0AF6
FL

0A12) CPO L1

L1: 0AFE)

Адрес/ регистр Код до выполнения операции Код после выполнения операции
0A12 E4 E4
0A13 FE FE
0A14 0A 0A
SP 0BAE 0BAC
0BAD
0BAC 0A
PC 0A12 0AFE
FL 02 (TP=0)

 

0800) CP L1

L1: 0C54)

Адрес/ регистр Код до выполнения операции Код после выполнения операции
F4 F4
0C 0C
SP 0BAC 0BAC
PC
FL 82 (TS=1)

 

3456) CC M0

M0: 0807)

Адрес/регистр Код до выполнения операции Код после выполнения операции
DC DC
SP 0BB0 OBAE
0BAF
0BAE
PC
FL 03 (TC=1)

 

Команды ввода – вывода

 

Эти команды обеспечивают передачу данных между аккумулятором МП и внешним устройством, 8-ми разрядный адрес которого приводится во втором байте команды. Таким образом, с помощью команд ввода-вывода можно передавать данные к 256=28 портам вывода и принимать данные от 256 портов ввода.

После того, как команда будет выбрана полностью, адрес внешнего устройства передается из МП на ША по восьми младшим линиям и таким образом обеспечивает передачу данных между МП и адресуемым внешним устройством. Следует иметь в виду, что 8-раз­рядный адрес внешнего устройства дублируется и передается также по восьми старшим линиям ША.

Команды выполняются за три машинных цикла (10 тактов). При выполнении команд значения триггеров признаков не изменяется.


 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-03-22; Просмотров: 2393; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.029 с.)
Главная | Случайная страница | Обратная связь