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

Команды передачи управления

Команды передач управления, или переходы, составляют очень важный класс в системе команд любого компьютера. Они служат для изменения нормальной последовательности выполнения команд или безусловно, или в результате анализа определенных условий. В микропроцессорах обычно бывает много команд такого типа. Ти­пичным представителем можно считать команду «переход при ненуле­вом переносе» (JCN).

Поскольку это трехбайтовая команда, фаза выполнения может быть начата на третьем синхроимпульсе третьего машинного цикла. По этому синхроимпульсу БУС опрашивает состояние триггера пере­носа С. Если состояние С удовлетворяет заданному условию, т. е. если С=1, то, как показано на рис.4.10, содержимое регистра адреса дан­ных передается на программный счетчик.

Таким образом, второй и третий байты команды становятся адре­сом команды, которая будет выбираться следующей. Если же, на­против, состояние триггера С не удовлетворяет условию, т. е. С=0, то программный счетчик сохраняет то значение, которое он получил в фазе выборки-дешифрации. Поэтому JCN не окажет влияния на по­рядок выборки команд.

Переходы описанного типа называются условными передачами уп­равления или условными переходами, поскольку программный счетчик изменяется только при выполнении некоторых условий. Другими примерами команд такого типа могут служить «переход при нулевом аккумуляторе» (JAZ), «переход при отрицательном аккумуляторе» (JAM) и др.

Рис. 4.10 Информационные потоки в фазе выполнения команды JCN при С=1, При С=0 перехода не происходит

Рис. 4.11 Взаимодействие между главной прог­раммой и

подпрограммой

Рис. 4.12 (а) Команды обращения к подпрограммам. Информационные потоки в фазе выполнения команды JMS

Рис. 4.12 (б) Команды обращения к подпрограммам. Информационные потоки в фазе выполнения команды RET

К другому типу переходов относятся команды безусловной передачи управления. По этим командам программный счетчик изменяется всег­да, что вызывает переход. В нашем микропроцессоре безусловный пе­реход можно выполнить по прямому адресу (JMP) или по косвен­ному (JHL).

В некоторых микропроцессорах можно встретить команды обхода, или пропуска (skip instructions): если заданное условие выполнено, следующая команда пропускается; в противном случае она выполняется. Одно из преимуществ команд пропуска в том, что в них не ука­зан адрес перехода, и, следовательно, они представляются меньшим числом байтов.

Команды обращения к подпрограммам

Очень часто одну и ту же процедуру нужно выполнить в несколь­ких точках программы. Вместо того чтобы повторно записывать команды этой процедуры в каждой точке, удобнее и эффективнее офор­мить ее в виде подпрограммы. На рис.4.11 показано взаимодействие главной программы и подпрограммы.

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

Общий подход к решению этой проблемы состоит в том, чтобы пре­дусмотреть специальные команды, с помощью которых можно было бы запомнить исходную точку, а затем вернуться к ней. В нашем иллю­стративном микропроцессоре эти функции выполняют две команды: «переход на подпрограмму» (JMS) и «возврат из подпрограммы» (RET). Информационные потоки для этих команд приведены на рис 4.12.

Сначала рассмотрим команду JMS. По третьему синхроимпульсу третьего машинного цикла содержимое регистра адреса данных, рав­ное адресу входа в подпрограмму, поступает на программный счет­чики, тем самым осуществляется переход. Одновременно старое со­держимое программного счетчика, которое уже было продвинуто и указывало на следующую за JMS команду, помещается в стек. После завершения подпрограммы команда RET позволяет вернуться в глав­ную программу. При ее выполнении стек поднимается, и на програм­мном счетчике восстанавливается адрес команды в главной программе на которую следует вернуться.

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

Поскольку подпрограмма — это тоже программа. то ей нужны дан­ные, над которыми производятся вычисления. Вообще говоря, эти данные, называемые параметрами или аргументами подпрограммы зависят от той точки, откуда было сделано обращение к подпро­грамме. Один из простейших способов передачи параметров — это загрузка их в общие регистры непосредственно перед выполнением команды JMS. При таком подходе подпрограммы составляются в предположении, что необходимые параметры будут находиться в об­щих регистрах, откуда их можно будет легко выбрать. Аналогично подпрограмма может оставить в общих регистрах вычисленные ею результаты для передачи их главной программе. Более детально ор­ганизацию подпрограмм мы рассмотрим в следующей главе.