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

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

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

Команды переходов без возврата делятся на две группы:

команды безусловных переходов; команды условных переходов.

В обозначениях этих команд используются слова Branch (ветвление) и Jump (прыжок).

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

Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий. В качестве таких условий обычно выступают значения флагов в регистре состояния процессора (PSW). То есть условием перехода является результат предыдущей операции, меняющей значения флагов. Всего таких условий перехода может быть от 4 до 16. Несколько примеров команд условных переходов:

переход, если равно нулю; переход, если не равно нулю; переход, если есть переполнение; переход, если нет переполнения; переход, если больше нуля; переход, если меньше или равно нулю.

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

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

Совместное использование нескольких команд условных и безусловных переходов позволяет процессору выполнять разветвленные алгоритмы любой сложности. Для примера на рис. 3.13 показано разветвление программы на две ветки с последующим соединением, а на рис. 3.14 — разветвление на три ветки с последующим соединением.

Команды переходов с дальнейшим возвратом в точку, из которой был произведен переход, применяются для выполнения подпрограмм, то есть вспомогательных программ. Эти команды называются также командами вызова подпрограмм (распространенное название — CALL). Использование подпрограмм позволяет упростить структуру основной программы, сделать ее более логичной, гибкой, легкой для написания и отладки. В то же время надо учитывать, что широкое использование подпрограмм, как правило, увеличивает время выполнения программы.

Рис. 3.13. Реализация разветвления на две ветки.

Рис. 3.14. Реализация разветвления на три ветки.

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

Для обратного возврата в точку вызова подпрограммы (точку перехода) используется специальная команда возврата (RET или RTS). Эта команда извлекает из стека значение адреса команды перехода и записывает его в регистр-счетчик команд.

Особое место среди команд перехода с возвратом занимают команды прерываний (распространенное название — INT). Эти команды в качестве входного операнда требуют номер прерывания (адрес вектора). Обслуживание таких переходов осуществляется точно так же, как и аппаратных прерываний. То есть для выполнения данного перехода процессор обращается к таблице векторов прерываний и получает из нее по номеру прерывания адрес памяти, в который ему необходимо перейти. Адрес вызова прерывания и содержимое регистра состояния процессора (PSW) сохраняются в стеке. Сохранение PSW — важное отличие команд прерывания от команд переходов с возвратом.

39

Управление источником звука в ЭВМ (через ППИ)

В ПЭВМ ППИ использован для реализации портов ввода/вывода (LPT порты), а так же для управления источником звука в системном блоке ПЭВМ. Динамик имеет не один, а два входа для генерации звука. На рис.5. показано, что, кроме микросхемы таймера, сигнал на динамик посылает также микросхема интерфейса с периферией 8255. Частота импульсов каждой микросхемы может быть изменена, поэтому, комбинируя воздействия этих двух источников, можно получать специальные звуковые эффекты.

К аждый из трех каналов микросхемы таймера 8253 (8254 для АТ) состоит из шестнадцатиразрядных регистров (отечественные аналоги 580ВИ53 и 1810ВИ54). Доступ к ним осуществляется через порты с номерами 40Н, 41Н и 42Н, которые соответствуют каналам К0, К1, К2. Когда производится программирование канала, через порт посылается 2-байтовое значение, сначала младший байт. Это число передается в 16-битовый регистр счетчика. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов поступает на тактовый вход канала (ТИ). Когда значение этого числа достигает нуля, канал выдает выходной сигнал и затем новая копия содержимого регистра задвижки передвигается в регистр счетчика, после чего процесс повторяется. Чем меньше число в регистре счетчика, тем больше выходная частота канала. Все три канала независимы от работы процессора и могут быть запрограммированы на один из 6-и режимов. Текущее значение любого из регистров счетчика может быть прочитано в любой момент времени, что не влияет на счет. Каждый канал имеет два входных (ТИ - тактовые импульсы и Р - разрешение работы канала) и один выходной сигнал.

Канал 0 используется в ПЭВМ системными часами времени суток. Он устанавливается, BIOS при старте таким образом, что выдает импульсы приблизительно 18,2 раза в секунду. 4-байтовый счетчик этих импульсов хранится в памяти по адресу 0040:006С (младший байт хранится первым). Каждый импульс инициирует прерывание таймера (INT 8) и именно это прерывание увеличивает показание счетчика. Это аппаратное прерывание, поэтому оно обрабатывается всегда независимо от того, чем занят процессор, если только разрешены аппаратные прерывания. Выходная линия используется также для синхронизации некоторых дисковых операций, поэтому если вы изменили ее значение, то вам необходимо восстановить первоначальное значение перед обращением к диску.

Канал 1 управляет обновлением памяти на всех машинах, кроме РСjr, поэтому его лучше не трогать. Выходная линия этого канала связана с микросхемой прямого доступа к памяти, и ее импульс заставляет микросхему DМА обновить всю память. На PCjr канал 1 служит для преобразования входных данных с клавиатуры из последовательной в параллельную форму. В PCjr не используется контроллер прямого доступа к памяти, поэтому когда он вместо этого прогоняет данные через процессор, прерывание от таймера заблокировано. Канал 1 используется для подсчета заблокированных импульсов часов времени суток, с тем чтобы можно было обновить значение счетчика после завершения дисковых операций.

Канал 2 связан с громкоговорителем компьютера. Он формирует прямоугольные импульсы для генерации звука. Программисты имеют возможность управлять вторым каналом. Простые звуки могут генерироваться одновременно с другими программными операциями, а более сложные звуковые эффекты могут быть достигнуты за счет использования процессора. Канал 2 может быть отсоединен от громкоговорителя. Наконец, выходная линия канала 2 связана с динамиком компьютера. Однако динамик не будет генерировать звук до определенных установок микросхемы интерфейса с периферией 8255 (отечественные аналоги 580ВВ55 и 1810ВВ55).

Две входные линии для каждого канала состоят из линии часов, передающей сигнал от микросхемы системных часов и линии, называемой разрешения, которая включает и выключает сигнал от часов. Сигналы разрешения всегда открыты для сигналов часов по каналам 0 и 1. Но может быть закрытым для канала 2. Что позволяет производить некоторые специальные манипуляции со звуком. Сигнал разрешения формируется установкой младшего бита порта В с адресом 61Н, который является регистром порта В микросхемы 8255; сброс этого бита снова переводит сигнал разрешения в состояние можно каналу работать. Отметим, что, как и выход канала 2, бит В1 порта 61Н связан с динамиком и также может использоваться для генерации звука.

Для включения режима управления динамиком от ППИ, необходимо вит В0 порта 61Н ППИ установить в 0. После этого, управляя битом В1, возможны воздействия на динамик через ППИ.

40

Управление источником звука в ЭВМ (через ПТ)

К аждый из трех каналов микросхемы таймера 8253 (8254 для АТ) состоит из шестнадцатиразрядных регистров (отечественные аналоги 580ВИ53 и 1810ВИ54). Доступ к ним осуществляется через один порт; номера портов 40Н, 41Н и 42Н соответствуют каналам К0, К1, К2. Порт связан с 8-битовым регистром ввода/вывода, который посылает и принимает данные для этого канала. Когда производится программирование канала, через порт посылается 2-байтовое значение, сначала младший байт. Это число передается в 16-битовый регистр таймера счетчика. В регистре счетчика число уменьшается на единицу каждый раз, когда импульс от системных часов поступает на тактовый вход канала (ТИ). Когда значение этого числа достигает нуля, канал выдает выходной сигнал и затем новая копия содержимого регистра задвижки передвигается в регистр таймера счетчика, после чего процесс повторяется. Чем меньше число в регистре счетчика, тем больше выходная частота канала. Все три канала всегда активны, то есть их работа не зависит от поведения процессора. Текущее значение любого из регистров счетчика может быть прочитано в любой момент времени, что не влияет на счет. Каждый канал имеет две входные (ТИ - тактовые импульсы и Р - разрешение работы канала) и одну выходную линии. Выходная линия выводит импульсы канала, возникающие в результате подсчета. Назначение этих сигналов варьируется в зависимости от типа IВМ PC:

• Канал 0 используется системными часами времени суток. Он устанавливается BIOS при старте таким образом, что выдает импульсы приблизительно 18,2 раза в секунду. 4-байтовый счетчик этих импульсов хранится в памяти по адресу 0040:006С (младший байт хранится первым). Каждый импульс инициирует прерывание таймера (INT 8) и именно это прерывание увеличивает показание счетчика. Это аппаратное прерывание, поэтому оно обрабатывается всегда независимо от того, чем занят процессор, если только разрешены аппаратные прерывания. Выходная линия используется также для синхронизации некоторых дисковых операций, поэтому если вы изменили ее значение, то вам необходимо восстановить первоначальное значение перед обращением к диску.

• Канал 1 управляет обновлением памяти на всех машинах, кроме РСjr, поэтому с ним лучше не экспериментировать. Выходная линия этого канала связана с микросхемой прямого доступа к памяти, и ее импульс заставляет микросхему DМА обновить всю память. На PCjr канал 1 служит для преобразования входных данных с клавиатуры из последовательной в параллельную форму. PCjr не использует режим прямого доступа к памяти, а осуществляет обмен данными программным способом, при этом прерывания запрещены. Канал 1 используется для подсчета заблокированных импульсов часов времени суток, с тем, чтобы можно было обновить значение счетчика после завершения дисковых операций.

• Канал 2 связан с громкоговорителем компьютера. Он формирует прямоугольные импульсы для генерации звука. Программисты имеют возможность управлять вторым каналом. Простые звуки могут генерироваться одновременно с другими программными операциями, а более сложные звуковые эффекты могут быть достигнуты за счет использования процессора. Канал 2 может быть отсоединен от громкоговорителя (линия В0 порта 61Н). Однако динамик не будет генерировать звук до определенных установок микросхемы интерфейса с периферией 8255 (отечественные аналоги 580ВВ55 и 1810ВВ55).

Две входные линии для каждого канала состоят из линии часов, передающей сигнал от микросхемы системных часов и линии, называемой разрешения (Р), которая включает и выключает сигнал от часов. Сигналы разрешения всегда открыты для сигналов часов по каналам 0 и 1. Но может быть закрытым для канала 2. Что позволяет производить некоторые специальные манипуляции со звуком.

Микросхема таймера может применяться непосредственно для временных операций, но это редко бывает удобным. Ввод с часов производится c частотой 1,19318 МГц (даже на АТ, где системные часы идут быстрее, микросхема таймера получает сигнал с частотой 1,19 МГц). Поскольку максимальное число, которое может храниться в 16 битах, равно 65535, то обнуление счетчика таймера произойдет через 65535 периодов входной частоты канала, если такое число было записано в счетчик канала. Значит, максимальное время, формируемое одним каналом таймера, равно 65535/(1,19*106 )сек., или 18,2 Гц. Поэтому в большинстве временных операций используется счетчик времени суток BIOS. Для подсчета времени читается значение времени суток и сравнивается с некоторым ранее запомненным значением для определения числа импульсов, прошедших с того момента. Специальный способ, описанный в [1], позволяет использовать счетчик времени суток для операций в реальном времени.

Для управления динамиком от программируемого таймера программно необходимо установить биты управления порта с адресом 61Н в следующее состояние: В0 = 1, разрешить работу каналу 2 (порт 42Н) таймера; В1 = 0, снять влияние на динамик со стороны программируемого параллельного ввода/вывода.

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

1. Послать в командный регистр (порт 43Н) байт, представляющий цепочку битов, которые выбирают канал, статус чтения/записи, режим операции и форму представления чисел.

2. Для канала 2 надо разрешить сигнал от часов, установив в 1 бит В0 порта с адресом 61h. (Когда бит B1 этого регистра установлен в 1, канал 2 управляет динамиком).

3. Вычислить значение счетчика от 0 до 65535, поместить его в АХ и послать сначала младший (AL), а затем старший байт (AH) в регистр канала 2 (порт 42Н).

Каналы таймера работают постоянно. По этой причине программы всегда должны восстанавливать начальные установки регистров 8253 перед завершением опытов с таймером. В частности, если при завершении программы генерируется звук, то он будет продолжаться даже после того, как операционная система получит управление и загрузит другую программу. Имейте это в виду при написании процедуры выхода по «Ctrl-Вгеаk

Если необходимо получить какие-либо сложные звуки, то необходимо программировать микросхему таймера 580ВИ53 (1810ВИ54,8253). Канал 2 этой микросхемы прямо связан с динамиком компьютера. Когда этот канал программируется на режим 3 (симметричный мультивибратор), таймер формирует прямоугольные импульсы заданной частоты. К сожалению, микросхема 1810ВИ54 (8253) не меняет амплитуду выходного сигнала, поэтому нет возможности менять громкость звука, издаваемого динамиком.

Динамик имеет не один, а два входа для генерации звука. На рис. 1.10. показано, что, кроме микросхемы таймера, сигнал на динамик поступает также с микросхем параллельного ввода/вывода 580ВВ55( 8255). Частота импульсов каждой микросхемы может быть изменена, поэтому, комбинируя воздействия этих двух источников, можно получать специальные звуковые эффекты.

41

Программируемый контроллер прерываний.

Д ля управления аппаратными прерываниями во всех типах ПЭВМ IBM PC используется микросхема программируемого контроллера пре­рываний Intel 8259A или ее программно-совместимый аналог. Пос­кольку в каждый момент времени может поступить не один запрос, микросхема имеет схему приоритетов. Существует 8 уровней приори­тетов, максимальный приоритет соответствует уровню 0. Добавочные 8 уровней (ЗПР 8 - ЗПР 15) обрабатываются второй микрос­хемой 8259А, подключенной каскадно; этот второй набор уровней имеет приоритет между ЗПР 2 и ЗПР 3 (рис. 1.1). Запросы на прерывания по входам ЗПР 0 ÷ 7 соответствуют векторам прерывания от INT 8 до INT F. Запросы на прерывания по входам ЗПР 8 ÷ 15 обслуживаются векторами 1NT 70 - INT 77. Исключением из общего правила является аппаратное немаскируе­мое прерывание NMI, которое имеет максимальный приоритет, пос­кольку является немаскируемым прерыванием.

Микросхема 8259А имеет три однобайтовых регистра, которые управляют восемью линиями аппаратных прерываний (рис.1.2). Ре­гистр запроса на прерывание (IRR) устанавливает соответствующий бит, когда на линии прерывания уровень сигнала изменяется от низ­кого к высокому. Затем микросхема автоматически проверяет, не об­рабатывается ли другое прерывание. При этом используется информа­ция из регистра обслуживания (ISR). Дополнительная цепь отвечает за схему приоритетов. Перед вызовом прерывания проверяется ре­гистр маски прерываний (IMR), чтобы узнать, разрешено ли в данный момент прерывание данного уровня.

Если необходимые условия обработки запроса прерывания выпол­нены, то контроллер 8259А выдает процессору сигнал ЗПР (INT). Если процессору разрешено обслуживание аппаратных прерываний, последний завершает выполнение текущей команды и проверяет бит разрешения прерываний в регистре признаков (флаги).

Р ис.1.2. Программная модель контроллера 8259А

Если этот бит установлен, то процессор начинает выполнять цикл чтения кода команды с шины данных, сопровождая свои действия сигналом подтверждение прерывания ППР (INTA). По этому сигналу контроллер прерываний формирует на шине данных код команды INT, а по второму сигналу ППР – байт, определяющий номер прерывания. Его значение зависит от номера входа ЗПР у контроллера прерываний, которое в данный момент должно быть обслужено. Процессор сохраняет в стеке логический адрес прерывания (CS:IP) и состояние флагового регистра. Затем по полученной команде INT NN процессор использует этот адрес, чтобы определить точку входа в программу обработки прерываний. После её завершения необходимо командой управления OSW1/EOI (СКО1/ «КОНЕЦ ОБСЛУЖИВАНИЯ», код 20Н) в контроллере 8259А сбросить бит регистра ISR с максимальным приоритетом, в противном случае обра­ботка прерываний для уровня с текущим приоритетом и уровней с бо­лее низкими приоритетами будет блокирована.

Доступ к внутренним регистрам контроллеров осуществляется че­рез порты 20h, 21h для ведущего контроллера и A0h, A1h - для подчи­ненного. Порты 21h, A1h предназначены для доступа к регистрам мас­ки, формат регистров маски показан на рис.1.3. Порты 20h и A0h используются для управляющих команд, формат команд показан на рис.1.4, 1.5. Форматы внутренних регистров контроллера IRR, ISR со­ответствуют формату регистра маски. Формат регистра состояний по­казан на рис.1.6. На этапе начального пуска программой BIOS вы­полняется инициализация контроллера прерывания. В процессе иници­ализации устанавливаются значения векторов прерываний и дисциплина обслуживания приоритетных уровней.

Рис.1.3. Формат регистра маски

Рис.1.4. Формат команды управления OSW 0

В лабораторной работе используется аппаратное прерывание INT 8 от микросхемы таймера. Стандартный обработчик данного пре­рывания поддерживает системные часы операционной системы MS DOS, контролирует длительность паузы при выполнении операций с гибким диском, а также вызывает программное прерывание INT 10 предназначенное для подключения обработчиков прерываний, разработанных пользователем.

Р ис.1.5.Формат команды управления OSW1

Рис.1.6.Формат регистра состояния контроллера прерываний в режиме опроса

Векторы прерываний, используемые операционной системой, об­разуют таблицу векторов и располагаются в начальной области оперативной памяти начиная с нулевого физического адреса. Таблица векторов занимает 1К оперативной памяти и содержит 256 векторов. На каждый вектор отводится четыре байта. Вектор прерываний имеет следующий формат в оперативной памяти:

Ячейка +2

CS -- сегмент точки входа в обработчик прерываний

Ячейка +0

IP - смешение точки входа в обработчик прерываний

42

Групповое включение ПКП.

Вложенные прерывания с фиксированными приоритетами входов.

Имеются 8 входов запросов прерывания IR7....IR0. Низший приоритет имеет вход IR7,а высший у R0. Вложенность-возможность прерывания подпрограммы обслуживания запроса другой подпрограммой с более высоким приоритетом, которая, в свою очередь, также может быть прервана программой с более высоким приоритетом. Возможность вложенных прерываний обеспечивается введением команды IE(Enable Interrupt) в подпрограмме обслуживания прерываний. Прерывания с фиксированными приоритетами реализуются просто, но запросы неравноправны и при интенсивном поступлении запросов с высокими приоритетами запросы с низкими приоритетами могут вообще не получить обслуживания, т.е. возможно их оттеснение более приоритетными запросами.

Прерывания с круговым приоритетом.

В этом случае у каждого входа тоже есть свой приоритет, но после обслуживания он изменяется в круговом порядке так, что обслуживаемый вход получает низший приоритет. Такая дисциплина обслуживания характерна для ситуации с источниками, не имеющими преимуществ друг перед другом. Работа с круговым приоритетом можно иллюстрировать примером (рис.1), в котором регистр запросов вначале содержит 6 и 4 запросы, т.е. наивысший приоритет имеет 4 запрос, который и будет обслужен. После обслуживания приоритетность входов изменяется как бы вращением кольца, при чем номер 7 с низшим приоритетом становится на 4 позицию только что обслуженного запроса. Позицию низшего приоритета называют дном приоритетного кольца. В этих терминах работу с круговым приоритетом можно выразить так: после обслуживания дно приоритетного кольца устанавливается на позицию обслуженного запроса.

Рис. 1 Изменение приоритетов при работе с круговым приоритетом

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

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

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

Рис. 2 Схема подключения контроллера прерываний

в микропроцессорную систему.

43

Программируемый параллельный интерфейс.

Для реализации портов ввода/вывода параллельной информации разработаны специальные БИС. В комплекте К580 это схема, получившая широкое распространение даже в последних микропроцессорных разработках, К580ВВ55. Применение схемы К580ВВ55 оправдано, когда в системе должно быть достаточно большое количество портов ввода/вывода. В современных персональных ЭВМ подобных схем насчитывается от двух до шести. В сложных микропроцессорных системах управления потребность в количестве портов ввода/вывода может достигать нескольких десятков. Достоинством БИС К580ВВ55 является то, что в каждой схеме имеется три программируемых восьмиразрядных канала с возможностью приема или передачи информации в двух направлениях в режиме без стробирования и со стробированием.

Часто этот кристалл в инженерной практике называют программируемый параллельный интерфейс (ППИ). Это не совсем правильно, так как термин «интерфейс» подразумевает более сложные понятия. Это должно стать понятным, если проанализировать определение интерфейса.

Стандартный интерфейс – совокупность унифицированных технических, программных и конструктивных средств, необходимых для реализации различных функциональных элементов в автоматических системах обработки информации при условиях, предписанных стандартом и направленных на обеспечение информационной, электрической и конструктивной совместимости указанных элементов.

Главное – это совокупность трех средств: технических (это кристалл связи с ВНУ), программа управления обменом и конструктивная совместимость (возможность подсоединения к процессорной части схемы и к внешнему устройству при помощи стандартных разъемов). Для микропроцессорных систем управления главными следует считать кристалл и программа управления обменом. Этот аспект уже отмечался ранее: кристалл без программы никому не нужная «железка», точно также как программа обмена без кристалла никому не нужный текст. Будем называть кристалл К580ВВ55 программируемым параллельным интерфейсом (ППИ) как это делают, но помним, что понятие интерфейс значительно шире.

Структурная схема кристалла ППИ приведена на рис.1. ШД может быть соединена с одним из трех каналов А, В, С. Все каналы восьмиразрядные, направление приема или передачи по каналу программируется со стороны программ, то есть управляется программистом. Поэтому ППИ называют «программируемый» интерфейс. Программирование осуществляют перед началом обмена, эту процедуру называют инициализацией ППИ. Два канала ППИ А и В могут принимать или передавать байт данных, а канал С программно может быть запрограммирован еще и на прием или передачу информации по своим тетрадам, то есть разряды С0 – С3 – ввод, С; - С7 – вывод или наоборот. Каждый бит канала С может быть использован как стробирующий сигнал для управления обменом, то есть возможно побитное программное управление.

Рис.1. Структурная схема ППИ

ППИ может быть запрограммирован на три режима работы: Режим 0 (Р0) – режим простого обмена, когда все три канала могут быть использованы для приема или передачи информации без стробирующих сигналов между процессором и ВНУ; Режим 1 (Р1) – режим обмена информацией по каналам А и В под управлением стробирующих сигналов, формируемых по каналу С (сигналы «квитанции» – такой метод обмена еще называют квитированием информации или «рукопожатия»); Режим 2 (Р2) – режим обмена информацией по каналу А в двух направления под управлением сигналов, формируемых по каналу С (двунаправленная магистраль А). Если посмотреть стандартные схемы современных параллельных интерфейсов и протоколы обмена по ним, то можно увидеть тесную связь с конструкцией ППИ. На структурной схеме обозначено: СХ. УПРАВЛ. КАНАКОМ С – схема управления каналом С; КАНАЛ А, КАНАЛ В – восьмиразрядные неделимые каналы обмена информацией в двух направлениях; КАНАЛ С – может работать как восьмиразрядный в двух направлениях, так и с разделением направления приема или передачи информации по тетрадам с возможностью побитного программного управления; БШД – буфер шины данных предназначен для буферизации принимаемого или передаваемого байта и связан с шиной данных системы; СХ.ВЫБОРКИ КАНАЛА И УПРАВЛЕНИЯ – схема выборки канала и управления предназначена для управления обменом по сигналам поступающим из системы, по которым производится выбор нужного канала, включается установленное ранее направление передаваемого байта и формируется внутренний сигнал обмена; РУС – регистр управляющего слова, предназначен для хранения управляющего слова ППИ, в котором указано: режим работы ППИ, какой канал в каком направлении должен передавать байт информации. D0-D7 - двунаправленная магистраль данных для передачи данных , управляющих слов и информации состояния, А0-А7 - двунаправленная магистраль данных канала А, В0-В7 - двунаправленная магистраль данных канала В, С0-С7- двунаправленная магистраль данных канала С, ВК - выбор кристалла; А0, А1 - входы , необходимые для выбора одного из каналов А , В , С или регистра управляющего слова (адрес канала или РУС); ЧТ (чтение) – вход, на который подается сигнал управления чтением информации из канала, адрес которого установлен на входах А0, А1 (от ВНУ к ЦПЭ); ЗП (запись) - вход управления записью информации из процессора к ВНУ; R - вход, используемый для начальной установки схемы (сброс). При подаче сигнала на этот вход содержание всех внутренних регистров устанавливается на нуль.

Как уже отмечалось, перед началом обмена информацией необходимо запрограммировать ППИ на требуемый режим и направление приема/передачи информации по каналам.

Адресация в ППИ осуществляется по входам А0, А1:

А1

А0

Канал

0

0

Канал А

0

1

Канал В

1

0

Канал С

1

1

РУС

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

Рис.2. Формат управляющего слова ППИ

Ч то-либо в формате УС ППИ программист изменить не может, так как назначение бит УС «зашито» изготовителем ППИ на заводе. Поэтому этой информацией надо научиться пользоваться. В особых комментариях рис.2. не нуждается. Следует лишь отметить, что разряд D7 УС ППИ должен быть обязательно единицей при первом обращении к РУС, он является признаком УС и хранится в ППИ все время работы системы. Для примера рассмотрим несколько возможных вариантов включения ППИ: В режиме Р0 ППИ может быть запрограммирован для 16 видов передачи/приема информации:

Особый случай касается режима 2 (Р2), разряды D5 и D6 можно устанавливать в состояния 10 или 11. Управляющие слова будут разные, а программирование ППИ произойдет на один и тот же режим.

Обращение к адресу РУС осуществляется повторно при побитном управлении разрядами канала С. Тогда значение бита D7 должно быть обязательно нулевым, что является для ППИ признаком управления каналом С и ранее введенное УС не изменяется..

Особенность канала С - возможность установки и сброса любого из его разрядов программным способом. Такая возможность есть для всех режимов кроме режима 0. Управление битами канала С в режимах Р1 и Р2 осуществляется программно выполнением команд установки и сброса (команды OUT РУС). Только формат управляющего слова отличается от ранее описанного. Формат управляющего слова битами канала С ППИ в режимах Р1 и Р2 показан на рис.3. Побитное управление каналом С возможно только после инициализации ППИ. Если инициализация проведена, то для формирования строб-импульса, например, в разряде С3 (при инициализации С0 – С3 запрограммированы на вывод) необходимо установить этот бит в единичное состояние, выдержать паузу и сбросить бит С3 в нулевое состояние. Делается это следующим образом: по рис.3. выбираем управляющий байт установки в единицу разряда С3 – это 00000111 (D4-D6 выбраны нулевыми), в шестнадцатиричном формате 07Н; управляющий байт сброса разряда С3 – 00000110 или 06Н.

Р ис.3. Формат байта управления битами канала С

Для формирования строб-импульса минимальной длительности достаточно выполнить следующую программу

MOV AL, 07H

;загрузить в АL управляющий байт 07Н

OUT РУС, AL

;вывести этот байт в адрес РУС ППИ

MOV AL, 06H

; загрузить в АL управляющий байт 06Н

OUT РУС,AL

; вывести этот байт в адрес РУС ППИ

Длительность строб-импульса будет определяться временем выполнения последних двух команд программы, так как установка в единичное состояние разряда С3 произойдет по первой команде OUT РУС,AL, а сброс по второй.

Для увеличения длительности формируемого программно строб-импульса используют команду NOP (пустая операция), вставляя одну или несколько команд NOP в программу после команды установки разряда С3 в единичное состояние.

При организации обмена с ВНУ по квитированию (обмен по сигналам-квитанциям) программа управления битом (квитанцией) разрядом канала С изменяется. Теперь, после установки разряда канала С в единичное состояние, требуется дождаться ответного сигнала-квитанции от устройства, с которым ведется обмен информацией. Допустим, что сигнал-квитанция от ЦПЭ формируется по разряду С1, а ответный сигнал-квитанция ожидается по разряду С7. Канал С должен быть проинициализирован на: С0 – С3 – вывод, С4 – С7 – ввод. Один из возможных вариантов программы управления приведен на рис.4.

При выполнении обмена информацией могут использоваться и более сложные алгоритмы с применением нескольких сигналов, назначение которых понятно по их названию: ГИ – готовность источника; ГП – готовность приемника; СТР- стробирование; ЗПР – запрос на прерывание.

M1:

MOV AL, 03H

;загрузить в АL управляющий байт 03Н

OUT РУС,AL

;вывести этот байт в адрес РУС

M:

IN AL,(канал С)

;ввод байта из канала С

AND AL,80H

;маскирование разряда С7

JZ M

;если результат 0, то ждем ответную ;квитанцию

;Далее выполняются команды, связанные с требуемым обменом

MOV AL, 02H

;загрузить в АL управляющий байт 02Н

OUT РУС,AL

; вывести этот байт в адрес РУС

;Подготовка к новому обмену; проверка

;на окончание обмена; если обмен закончен, то выход ;из подпрограммы обмена;

;иначе продолжить

JMP M1

;переход на начало

Рис.4. Программа управления обменом по квитированию

44

Программирование ПКП.

ПКП может работать при индивидуальном и групповом включении, программирование его должно проводиться не одинаково. Общим для обоих режимов включения является способ задания адреса: формирование адресной части команды CALL в управляющем слове можно запрограммировать с шагом 4 или 8 байт. Это значит, что при реализации обслуживания восьми внешних устройств начальные адреса подпрограмм обслуживания могут отстоять друг от друга либо на 4, либо на 8 байт. Для программирования индивидуального режима включения достаточно двух слов команд инициализации (СКИ1 и СКИ2). Формат этих команд представлен на рис.1.2. В СКИ1 указывается сколько ПКП в системе находится, задается шаг изменения адреса команды CALL и разряды А5, А6, А7 младшего байта адреса подпрограммы обслуживания запросов на прерывание. В СКИ2 задается только старший байт адреса, который будет формировать ПКП при обслуживании внешних устройств.

Например, требуется запрограммировать ПКП, который работает в МПС один, а подпрограммы обслуживания находятся после адреса 23С0Н, задействованы входы ПКП З.Пр.3 и З.Пр.7., адреса подпрограмм обслуживания расположены через 8 байт (предполагаем, что подпрограммы короткие и 8 байт для их размещения достаточно).

При этом получим:

СКИ1 = 11010010, то есть СКИ1=D2Н.

СКИ2 = 00100011, то есть СКИ2=23Н

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

00100011 11NNN000

З.Пр.3 = 011

З.Пр.7 = 111

2 3 D 8 Н

2 3 F 8 Н

Рис.1.2. Формат слов команд инициализации ПКП

Если в системе больше чем один ПКП (групповое включение), то для ведущего и ведомых схем требуется третье слово команды инициализации (СКИ3). При помощи СКИ3 сообщается: ведущему ПКП - к какому из его входов З.Пр. подключен выход З.Пр.(INT) ведомого ПКП; ведомому ПКП - к какому входу З.Пр. ведущего ПКП подключен его выход З.Пр. (INT). Формат СКИ3 представлен на рис.1.3.

Рис.1.3. Формат СКИ3 для ведущего и ведомого ПКП

45

Многоуровневые прерывания.

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

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

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

Р ис. 1.1. Прерывание программ

Каждое событие, требующее прерывания, сопровождается сигналом, оповещающим ЭВМ. Назовем эти сигналы запросами прерывания. Программу, затребованную запросом прерывания, назовем прерывающей программой, противопоставляя ее прерываемой программе, выполнявшейся машиной до появления запроса.

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

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

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

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

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

Основными функциями системы прерывания являются:

- запоминание состояния прерываемой программы и осуществление перехода к прерывающей программе;

- восстановление состояния прерванной программы и возврат к ней.

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

Характеристики системы прерывания. Для оценки эффективности систем прерывания могут быть использованы следующие характеристики.

Общее количество запросов прерывания (входов в систему прерывания).

Время реакции — время между появлением запроса прерывания и началом выполнения прерывающей программы.

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

Р ис. 1.2. Упрощенная временная диаграмма процесса прерывания

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

Затраты времени на переключение программ (издержки прерывания) равны суммарному расходу времени на запоминание и восстановление состояния программы:

Глубина прерывания — максимальное число программ, которые могут прерывать друг друга. Если после перехода к прерывающей программе и вплоть до ее окончания прием других запросов запрещается, то говорят, что система имеет глубину прерывания, равную 1. Глубина равна п, если допускается последовательное прерывание до я программ. Глубина прерывания обычно совпадает с числом уровней приоритета в системе прерываний. На рис. 9.8 показано прерывание в системах с различной глубиной прерывания (предполагается, что приоритет каждого следующего запроса выше предыдущего). Системы с большим значением глубины прерывания обеспечивают более быструю реакцию на срочные запросы.

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

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

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

Имеются ситуации, в которых желательно немедленное прерывание. Если, например, аппаратура контроля обнаружила ошибку, то целесообразно сразу же прервать операцию, пока ошибка не оказала влияние на следующие такты работы машины.

Число классов (уровней) прерывания. В ЭВМ число различных запросов (причин) прерывания может достигать нескольких десятков или сотен. В таких случаях часто запросы разделяют на отдельные классы или уровни.

Совокупность запросов, инициирующих одну и ту же прерывающую программу, образует класс или уровень прерывания (рис. 1.3).

Запросы всех источников прерывания поступают на регистр запросов прерывания РгЗП, устанавливая соответствующие его разряды (флажки) в состояние 1, указывающее на наличие за­проса прерывания определенного источника. Запросы классов прерывания ЗПК1 - ЗПКk формируются элементами ИЛИ, объединяющими разряды РгЗП, относящиеся к соответствующим классам (уровням). Еще одна схема ИЛИ формирует общий сигнал прерывания ОСП, поступающий в устройство управления процессора. Значение сигнала ОСП определяется выражением .

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

Рис 1.3. Разделение запросов на классы прерывания

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

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

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

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

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

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

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

Процедура прерывания с опросом источников (флажков) прерывания. При указанном способе задания приоритета между запросами каждому источнику запросов соответствует разряд (флажок) в регистре запросов прерывания (регистре флажков).

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

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

Р ис. 1.4.а. Программный опрос. Схема циклического опроса запросов (источников) прерываний (рис. 1.4,6). Опрос k линии запросов прерывания (или разрядов регистра запросов прерывания) производится последовательно (циклически) с помощью n-разрядного счетчика () на который с некоторой частотой поступают импульсы от генератора. Поиск приоритетного запроса прерывания начинается со сброса счетчика и одновременно триггера Т в нулевое состояние, при этом импульсы генератора начинают поступать на вход счетчика. При помощи дешифратора и элементов И в каждом такте поиска проверяется наличие запроса прерывания, номер которого совпадает с кодом счетчика. Если на дан­ном входе нет запроса прерывания, то после прибавления 1 к счетчику проверяется следующий по

Р ис. 1.4.б. Циклический (многотактный) опрос.

порядку вход. Если имеется запрос, триггер Г перебрасывается в 1, при этом в процессор посылается общий сигнал прерывания ОСП и прекращается поступление импульсов на вход счетчика, т. е. завер­шается цикл просмотра входов системы прерывания. Содержимое счетчика — код номера старшего по приоритету выставленного запроса — используется для формирования начального адреса прерывающей программы. После передачи управления прерывающей программе, счетчик (и триггер 7) сбрасывается в 0, и процедура опроса запросов возобновляется, начиная с первого входа.

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

Цепочечная однотактная схема определения приоритетного запроса («дейзи-цепочка») представлена на рис. 1.4, в. Как и в предыдущих случаях, приоритет запросов прерывания возра­жает с уменьшением их номера.

Р ис. 1.4.в. цепочечный однотактный опрос («дейзи - цепочка»)

Процедура определения приоритетного запроса инициируется сигналом Приоритет, поступающим на цепочку последовательно включенных схем И. При отсутствии запросов этот сигнал пройдет через цепочку и сигнал общего запроса прерывания не сформируется. Если среди выставленных запросов прерывания наибольший приоритет имеет i-й запрос (ЗПi = 1, ), то распространение сигнала Приоритет правее схемы И с номером i блокируется. На i-м выходе цепочечной схемы будет сигнал yi = 1, на всех других 0. В процессор поступит общий сигнал прерывания, при этом шифратор по сигналу yi = 1 сформирует код номера i-го запроса, принятого к обслуживанию. По сигналу процессора Подтверждение прерывания (на рис. 1.4 не показан) этот код передается в процессор и используется для формирования начального адреса прерывающей программы.

Схемы, представленные на рис. 1.4,6 и в, производят поиск крайней левой единицы в наборе сигналов прерывания и формируют код номера i запроса, удовлетворяющего условию .

46

Программируемый контроллер прямого доступа к памяти (ПКПДП).

Микросхема КР580ВТ57 – четырехнаканальный программируемый контроллер прямого доступа к памяти (ПД), предназначен для высокоскоростного обмена данными между памятью системы и периферийными устройствами путем генерации массива последовательных адресов памяти по требованию периферийного устройства.

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

К аждый из четырех каналов микросхемы обеспечивает адресацию (путем инкрементирования выработанного адреса) внешней памяти массивами объемом до 16 К байт с возможностью задания любого из 64 К начальных адресов.

У словное графическое обозначение и назначение выводов, Структурная схема КР580ВТ57:

47

Правила подготовки исходной программы для .ЕХЕ модуля.

При составлении исходной программы необходимо помнить, что правила составления ее для получения исполняемой типа .ЕХЕ и типа. СОМ несколько различны. Для написания исходного текста можно пользоваться любым текстовым редактором, установленным на ПЭВМ. Удобнее пользоваться, в нашем случае, редактором NE.COM (см. каталог NORTON).

Эти правила достаточно формальны и связаны с операционной системой установленной на данном конкретном вычислителе.

Для .ЕХЕ программ эти правила следующие:

1.В начале задается директива Ассемблеру о формате страницы листинга и имени исходной программы

PAGE 60,132

TITLE <имя программы>.(ЕХЕ)<Составление лабораторного варианта>

2. Резервирование стековой памяти . Резервируется не менее 32 слов

STACKSG SEGMENT PARA STACK 'Stack'

DW 32 DUP(?)

STACKSG ENDS

3. Определение данных (если это требуется проектируемой программой) выполняется так:

DATASG SEGMENT PARA 'Data'

FLDA DW 250 ;переменной FLDA присваивать слово 250

FLDB DW 125 ;переменной FLDB присваивать слово 125

FLDC DW ? ;переменной FLDC резервировать память под слово

DATASG ENDS

Поле FLDA определяет слово, содержащее десятичное значение 250, которое Ассемблер транслирует в шестнадцатиричное 00FA. Поле FLDB определяет слово с десятичным значением 125. Поле FLDC определяет слово с неизвестным значением, обозначенным знаком (?).

4. Сегмент кода имеет имя CODESG. Особенности: директива ASSUME (установить для Ассемблера связь между сегментами и сегментными регистрами CS, DS, ES, SS) указывает на определение DATASG через регистр DS,- STACKSG через регистр SS, - дополнительный сегментный регистр не задействован ES

CODESG SEGMENT PARA 'Code'

BEGIN PROC FAR ;начало процедуры begin,пересылки длинные

ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:NOTH

Процедура FAR переводит Ассемблер в режим формирования адресов посылок ДЛИННЫЙ (межсегментный).

Далее идет обязательная процедура по организации стека

PUSH DS

SUB AX,AX

PUSH AX

Затем две команды, обеспечивающие адресацию сегмента данных

MOV AX, DATASG

MOV DS, AX

Далее идет текст исходной программы в мнемокодах.

Завершается кодовый сегмент следующим образом:

BEGIN ENDP ;конец процедуры BEGIN

CODESG ENDS ;конец сегмента кодового

END BEGIN

При работе LINK автоматически генерируется особый формат для .ЕХЕ файлов, в котором присутствует специальный начальный блок (заголовок) размером не менее 512 байт.

Для выполнения программ можно создавать .СОМ файлы. Программа EXE2BIN.EXE в операционной системе DOS преобразует .ЕХЕ файлы в формат BIN. Для получения исполняемого файла .СОМ BIN файл средствами DOS необходимо переименовать в СОМ. Формат команды преобразования в бинарный:

EXE2BIN.EXE < имя преобразуемого файла >

При работе EXE2BIN, в случае обнаружения ошибки, выдается сообщение о невозможности преобразования .ЕХЕ модуля в формат .BIN без указания конкретной причины. (EXE2BIN - преобразователь из .ЕХЕ в BIN (двоичный) формат (EXE-to-BIN)).

Программа .СОМ ограничена размером одного сегмента (64К). Стек в .СОМ программах генерируется автоматически. Размер .СОМ файла всегда меньше .ЕХЕ. Формат исходной программы для .COM типа исполняемой программы несколько отличается от исходной программы для типа .EXE

48

Правила подготовки исходной программы для .СОМ модуля.

Пример исходной программы для исполняемой .СОМ

page 60,132

title имя программы (.COM)

codesg segment para 'code'

assume cs:codesg,ds:codesg,ss:codesg,es:codesg

;-----------------------------

org 100h ;обязательный атрибут исходной программы

;-----------------------------

begin: jmp main

;-----------------------------

flda dw 250

fldb dw 125

fldc dw ?

main proc near ; near - короткая передача

mov ax,flda

add ax,fldb

mov fldc,ax

ret

main endp

codesg ends

end begin

Для .СОМ файлов DOS автоматически определяет стек и устанавливает одинаковый сегментный адрес во всех четырех сегментных регистрах.

Если опущен ORG 100H, то на данные в префиксе программного сегмента будут установлены неправильные ссылки с непредсказуемым результатом при выполнении.

ПОПЫТКА ВЫПОЛОНИТЬ .EXE МОДУЛЬ, НАПИСАННЫЙ ДЛЯ .COM ФОРМАТА, УСПЕХА НЕ ИМЕЕТ.