Команды микропроцессорной техники

DATAY ENDS


            Здесь два сегмента DATAX и DATAY имеют тип класса 'DATA', следовательно, оба копируются в выполняемый файл перед сегментом ТЕХТ1.

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

            Замечание.

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

Директива GROUP.

Группа - это множество программируемых областей, объединенных так, что они используют общую базу. Группа представляет собой "объединение объединений", так как группа состоит из отдельных областей, каждая из которых построена из отдельных логических сегментов. Информация ассемблеру для объединения в группу нескольких областей содержится в директиве GROUP , имеющей формат:

            Имя группы   GROUP                      Имя сегмента, [Имя сегмента]…..

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

Указанное имя сегмента должно представлять собой имя какого-либо сегмента, определенного с помощью директивы SEGMENT или выражения SEG .

            Директива GROUP не влияет на порядок загрузки сегментов той или иной группы. Порядок зависит от класса каждого из сегментов или о того порядка, в котором объектные модули заданы компоновщику.


            Сегменты в группе не обязательно должны быть непрерывными. Не принадлежащие к определенной группе сегменты могут быть загружены между сегментами, принадлежащими группе. Единственное ограничение - смещение от первого байта в группе не более 64К.

            Имена групп можно использовать с директивой ASSUME и в качестве префикса операнда с оператором переопределения сегмента (:).



            В любом исходном файле имя группы не должно использоваться более чеи в одной директиве GROUP. Если в пределах отдельного исходного файла к одной группе принадлежат несколько сегментов, то имена всех этих сегментов должны быть заданы в одной и той же директиве GROUP. Например:

            DGROUP        GROUP                      ASEG, BSEG

                                   ASSUME        DS:DGROUP

            ASEG              SEGMENT     BYTE  PUBLIC  'DATA1'

            SUM_A:

            ASEG              ENDS

            BSEG              SEGMENT     BYTE  PUBLIC  'DATA2'

            SUM_B:

            BSEG              ENDS

            CSEG              SEGMENT     BYTE  PUBLIC  'DATA3'

            SUM_C:

            CSEG              ENDS

Порядок, в котором компоновщик LINK выполняет  загрузку этих сегментов показан на рисунке ниже.



Рис. Порядок загрузки компоновщиком сегментов

            Первым LINK  загружает ASEG, т.к. он стоит первым в исходном файле, Затем - CSEG т.к. он имеет тот же тип класса, что и ASEG. Последним компоновщик загружает BSEG. В тоже время ASEG и  BSEG объявлены как часть одной группы, несмотря на их размещение в памяти. Это означает, что смещение для символьных имен SUM_A и SUM_B отсчитывается от начала этой группы. Оно же является началом для сегмента ASEG. Смещение для имени SUM_C отсчитывается о начала сегмента CSEG.

Основы микропроцессорной техники

 

1.3.                    Интерфейс ввода-вывода



1.3.1.      Общие сведения: синхронный и асинхронный обмен, ввод-вывод с квитированием

Различают два варианта - синхронный и асинхронный обмен данными.

Синхронный обмен данными.

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

На рисунке ниже приведена типичная схема портов ввода и вывода. Портам присвоен 8-разрядный адрес, по которому МП может отличить их от других портов. Хотя порт ввода и порт вывода имеют один и тот же адрес, однако они отличаются сигналами "Ввод" и "Вывод" на ШУ. При выполнении команд ввода - вывода на 8 младших разрядов ША подается адрес порта, указанный во втором байте команды. Специальная схема, реализующая операцию И (&), распознает адрес данного порта. Входы этой схемы подключены к 8 младшим линиям ША.

Синхронный ввод.

Порт ввода  имеет 8-разрядный регистр, на который поступает информация от внешнего устройства. Выводы этого регистра подключены к ШД через 8 тристабильных формирователей. Сигналом разрешения чтения этих формирователей является результат логического умножения сигналов "Выборка" и управляющего сигнала "Ввод".

1.На шину адреса поступает адрес порта ввода. На выходе дешифратора (на рис. схема И) появляется активный сигнал ‘Выборка’(S).

2.На шине управления появляется активный сигнал ‘Ввод’.

3.На выходе схемы ‘И’ появляется активный сигнал, который подключает выходы Q7… Q0 порта ввода к линиям D7… D0 шины данных, т.е. на шине данных появился внешний мир (в это время МП защелкивает данные в аккумулятор). На шине данных данные из внешнего мира находятся до тех пор, пока активен сигнал ‘Ввод’.

МП снимает сигнал ‘Ввод’, и связь между выходами Q7… Q0 порта ввода . и шиной данных прерывается.

Порт ввода передает данные на шину данных только во время активного сигнала ‘Ввод’.



Синхронный вывод.

1. На шину адреса поступает адрес порта вывода.

2.На выходе дешифратора (на рис. схема И) появляется активный сигнал ‘Выборка’ (S).

3.Из аккумулятора выставляется число на шину данных. Данные находятся на входе D7… D0 8-разрядного регистра-защелки.

4.На шину управления подается активный сигнал ‘Выход’, который поступает на схему ‘И’. В итоге формируется сигнал ‘Разрешение загрузки’.

Информация защелкивается и появляется на Q7… Q0 порта вывода.

Выведенные данные будут сохраняться на Q7… Q0 порта вывода, пока не будут выведены следующие данные.



Асинхронный (условный ) ввод-вывод.

Этот способ обмена применяется в том случае, когда устройство работает асинхронно по отношению к процессору. Если, например, устройство ввода - АЦП, то после запуска АЦП на его выходе появляются данные для ввода в МП, но эти данные никак не связанные с работой МП. Поэтому возникает задача согласования моментов срабатывания внешнего устройства и МП. В противном случае при вводе передача может произойти в тот момент, когда данные еще не готовы, а при выводе - когда предыдущие данные еще не были восприняты внешним устройством.

Асинхронный обмен данными между МП и внешним устройством состоит из трех операций:



Запуск устройства.

Преобразование аналогового сигнала в цифровой. Мы постоянно спрашиваем устройство - закончило оно преобразование или нет.

Все готово и мы вводим данные.

Рассмотри случаи, когда запуск осуществляется МП в моменты времени, определяемые либо программой, либо самим внешним устройством.

1) Пусть запуск устройства осуществляет программа - внешнее устройство, получив сигнал от МП, выдает очередную порцию информации в порт ввода или принимает слово из порта вывода. Через некоторое время, заранее известное программисту и достаточное для завершения действий в устройстве, программа вновь может обращаться к порту. На рис. ниже показан вариант формирования программой сигналов запуска устройств с помощью триггеров (командой OUT PORTZAP для устройства вывода и командой IN PORTZAP1 для устройства ввода)





После завершения действия устройство подает сигнал сброса соответствующего триггера.

2) Пусть действие в устройстве запускается самим устройством, а программа при этом получает информацию о завершении действия в устройстве и о готовности к очередной передаче данных.

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

Met:                IN                   portst;

ANI          maskvv            ; накладываем маску готовности

JNZ           met      ; если устройство не готово, опрашиваем его еще раз

                                   IN                   portvv; ввод данных

В реальной жизни устройство и запускается, и проверяется программой (см. на рисунках ниже).





Ввод-вывод с квитированием.

Схема обмена и соответствующая временная диаграмма приведены на рис. ниже.



При таком вводе-выводе (см. рис. выше) приемник выставляет сигнал"Запрос данных", а источник информации выдает не только данные, но и сигнал "Данные достоверны" (ДД)

Приемник, получив сигнал "Данные достоверны", читает данные и снимает сигнал "Запрос данных".

После снятия сигнала "Запрос данных" источник "понимает", что данные получены и снимает данные и сигнал "Данные достоверны".

Рассмотрим ввод данных с квитированием.

На рисунках ниже приведены более подробные схемы ввода данных с квитированием.





Упрощенная подпрограмма реализации ввода приведена ниже



MVI     A, zapros

OUT      portu

МЕТ1: IN          portst

ANI maskdd; накладывается                   ;маска

JZ МЕТ1; формируем признак ;0,переход на метку

IN     portvv

MOV С,A; убрали данные в     ;порт А

MVI    A, 0

OUT    portu

МЕТ2: IN       portst

ANI maskdd

JNZ МЕТ2

RET




1.3.2.      Ввод-вывод по прерыванию

У МП есть сигнал Запрос Прерывания (ЗПр). Это некий эквивалент бита готовности, который МП проверяет в конце каждой выполненной команды.



Получив сигнал ЗПр, МП завершает выполнение текущей команды и, определив номер устройства, выставившего ЗПр, передает управление подпрограмме обслуживания этого устройства. Точнее при получении сигнала ЗПр МП приостанавливает выполнение текущей программы, запоминает состояние внутренних регистров и переходит к подпрограмме, обмена информацией с запросившим устройством. Подпрограмма обслуживания обработки прерывания заканчивается командой возврата, после чего продолжается выполнение прерванной программы.

Для процессора I8080 используется команда RST n, где n принимает значения от 0 до 7.



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



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

Начальные ячейки памяти, адреса которых формируются из кодов команд RST 0-RST 7, располагаются по следующим адресам: 0000h для RST 0, 0008h для RST 1, 0010h для RST 2, 0018h для RST 3, 0020h для RST 4, 0028h для RST 5, 0030h для RST 6, 0038h для RST 7.



Временная диаграмма чтения из памяти  программного прерывания приведена на рисунке выше:

-        На ША из СК подается адрес команды RST 2

-        На ШУ подается команда "Чтение памяти"

-        Читается содержимое ячейки памяти и код RST2 (11010111) с ШД защелкивается в регистр команд.



Рассмотрим способ передачи кода команды RST 2 в регистр команд



микропроцессора по сигналу ЗПр. При готовности устройства к обмену интерфейс внешнего устройства выдает сигнал ‘Устройство готово к обмену‘ и формирует сигнал ЗПр. МП, получив этот сигнал, формирует на шине управления ШУ сигнал подтверждения прерывания ППр, по которому содержимое с ШД микропроцессор записывает в свой регистр команд (см. рис. ниже). Задача состоит в том, чтобы в этот момент на ШД оказался код команды RST 2.



Вариант формирования на шине данных кода команды RST 2 приведен на рисунке ниже



Алгоритм обслуживания прерываний приведен на рисунке ниже.



Рассмотрим теперь случай, когда несколько внешних устройств ВУ0..ВУ7 могут выставлять ЗПр0..ЗПр7. Эти запросы прерываний объединяются по схеме ИЛИ и передаются в МП (см. рис. ниже). Следовательно, процессор перейдет на подпрограмму. Далее МП в этой подпрограмме идентифицирует устройство, выставившее ЗПр, например, следующим образом.



Все внешние устройства формируют бит готовности. Опрашивая порт состояния, МП узнает, какое из устройств нужно обслуживать, используя, например, программный поллинг.


Программный поллинг (опрос)

В подпрограмме обслуживания прерывания реализуется алгоритм, которой приведен ниже.



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

Если программный поллинг не удовлетворяет, то используется векторное прерывание. Существуют 3 способа реализации векторного прерывания:

1)     аппаратный поллинг

2)     использование шифратора приоритетов

3)     выдача первой команды обслуживания прерываний.



Рассмотрим каждый способ реализации в отдельности.

Аппаратный поллинг.

При аппаратном поллинге схемы прерываний внешних устройств присоединяются к МП в виде приоритетной цепочки таким образом, что МП может осуществлять автоматический опрос с целью идентификации прерывающего устройства (см. рис. ниже). Получив сигнал ЗПр, МП формирует сигнал на линии ППр, который последовательно проходит через все устройства. При прохождении сигнала ППР по цепочке проверяется состояние триггеров готовности устройств. Если устройство не требует прерывания, то сигнал ППр проходит в следующее устройство, пока не встретится прерывающее устройство. Следовательно, приоритетность устройств определяется их близостью к МП по линии ППр. Получив сигнал ППр, прерывающее устройство передает по шине данных свой адрес (вектор), который имеет однозначное соответствие с начальным адресом подпрограммы обслуживания прерывания данного устройства.

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

Недостатки: аппаратно (т.е. жестко) закреплена приоритетность устройства. - Больший приоритет имеет устройство, расположенное ближе к МП по линии ППр. Этот недостаток можно устранить путем использования шифратора приоритетов .



Использование шифратора приоритетов.

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

При наличии нескольких ЗПр управление передается устройству с более высоким приоритетом. Номер наиболее приоритетного устройства определяется с помощью шифратора приоритетов. На его вход подаются запросы прерываний ЗПр от отдельных устройств, входы которых пронумерованы, начиная с 0. Номер входа соответствует номеру подключенного устройства.

 



ЗПр0

000

Содержание раздела