Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Организация ЭВМ и систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
называется немаскируемым, потому что оно не зависит от значения флага IF
(Interrupt Flag) и его нельзя отключить. Запросы на немаскируемое прерывание по-
ступают на вход NMI (Non-Maskable Interrupt) микропроцессора и используются для
событий, требующих немедленной реакции. Например, оно может возникнуть при
аварийном отключении питания или при обнаружении критических ошибок во вре-
мя операций с памятью и других подобных ситуациях. Запросы на немаскируемое
прерывание через вход NMI имеют более высокий приоритет, чем прерывания через
вход INTR (Interrupt Request).
Внутренние прерывания, которые могут возникнуть в микропроцессоре, обра-
батываются внутри самого процессора и могут быть инициированы различными со-
бытиями, такими как арифметические переполнения, деление на ноль и другие.
7.6.3 Внутренние прерывания инициируются самим микропроцессором. Они
распознаются и выполняются независимо от состояния флага IF (Interrupt Flag) и не
поддаются маскированию. Важной особенностью внутренних прерываний является
отсутствие формирования сигналов подтверждения прерывания. Внутренние преры-
вания имеют фиксированный тип и возникают в следующих случаях.
7.6.4 Прерывание по ошибке деления (тип 0) генерируется МП после выпол-
нения команд деления DIV и IDIV, если формат частного превышает формат полу­чателя или в случае деления на ноль.
7.6.5 При переполнении разрядной сетки в результате выполнения математи-
ческих операций флаг OF устанавливается в единицу (OF=1). При этом возникает
прерывание по переполнению (тип 4), которое генерируется по однобайтовой ко-
манде INTO.
7.6.6 Прерывание контрольной точки или точки останова (тип 3) вызывается
однобайтовой командой INT3. Контрольные точки вводятся обычно при отладке
программы с целью индикации содержимого регистров, ячеек памяти и портов
внешних устройств в критических местах программы.
7.6.7 Пошаговое прерывание типа 1 автоматически инициируется при актива-
ции флага трассировки (TF), установленного в состояние "1". Это прерывание воз-
никает после выполнения каждой инструкции или пары инструкций, в случае если
121
первая из них изменяет содержимое сегментного регистра (для микропроцессоров,
таких как МП К1810). Применяется, как правило, в ходе отладки программного
обеспечения с целью проведения детального контроля за выполнением программы
на каждом шаге.
Программа обработки пошагового прерывания, в данном случае, часто выполняет
индикацию внутренних регистров микропроцессора и содержимого определенных
ячеек памяти. Режим пошагового выполнения позволяет микропроцессору оставать-
ся чувствительным к внешним и внутренним прерываниям. Это обеспечивает воз-
можность тщательного анализа каждого шага выполнения программы и выявления
ошибок или неправильных действий в процессе выполнения программы.
7.6.8 Программные прерывания. Программные прерывания представляют со-
бой механизм инициирования прерывания, который пользователь определяет при
создании программы. Этот тип прерывания вызывается с использованием двухбай-
товой команды INT type, где тип прерывания указывается во втором байте команды.
Команда INT type выполняет вызов желаемой программы аналогично команде
CALL. Однако, в отличие от команды CALL, при выполнении команды INT type
помимо адреса возврата (CS и IP) также сохраняется состояние регистра флагов F в
стеке. Это предполагает выполнение межсегментного перехода, и адрес программы
прерывания не указывается непосредственно в команде, а определяется из специ-
ально сформированной таблицы указателей векторов прерываний.
Программные прерывания часто применяются в системах, где требуется возмож-
ность динамического перемещения программы в памяти в процессе её выполнения.
Поскольку таблица указателей векторов находится в фиксированной области памя-
ти, программы могут взаимодействовать друг с другом, вызывая соответствующие
прерывания через эту таблицу. Это обеспечивает надежное взаимодействие между
программами, которое не зависит от их конкретных адресов в памяти. При переме-
щении программы в памяти достаточно модифицировать таблицу векторов преры-
ваний, чтобы обеспечить корректное функционирование.
7.6.9 Рассмотрим процедуру обслуживания прерываний. Программы обслужи-
вания всех прерываний находятся в блоке внутренней памяти МПС. Связь между
122
кодом, определяющим тип прерывания, и адресом ячейки памяти первой команды
программы прерывания, соответствующей этому типу, устанавливается с помощью
таблицы указателей векторов прерываний (рисунок 7.8)
Рисунок 7.8 – Таблица указателей векторов прерываний
Полная таблица векторов прерываний занимает 1 Килобайт памяти, состоящей
из 256 элементов, расположенных в адресном диапазоне (0-3FF)H. Каждый элемент таблицы содержит два слова, по два байта в каждом. Более старшее слово в элемен-
те таблицы содержит базовый адрес сегмента, в то время как младшее слово содер-
жит смещение программы прерывания от начала кодового сегмента. Процессор вы-
числяет адрес нужного элемента таблицы, умножая тип прерывания на 4. При пере-
ходе на программу прерывания, смещение загружается в регистр IP, а адрес сегмен-
та - в регистр CS.
В случае перехода на программу обслуживания прерывания после сохранения
содержимого регистров CS, IF и флагового регистра F в стеке, флаги IF и TF сбра-
123
сываются. Это действие автоматически запрещает внешние прерывания по входу
INT и служит защитой начального участка программы, на котором в стеке сохраня-
ется содержимое внутренних регистров микропроцессора. Затем программа может
разрешить внешние прерывания командой STI. Кроме того, она может быть прерва-
на запросом на входе NMI и внутренними прерываниями.
В стек включается скорректированное содержимое указателя команд IP, соот-
ветствующее адресу команды, перед которой микропроцессор начал обслуживать
прерывание. Коррекция необходима, поскольку IP адресует команды с опережением
из-за существования внутренней очереди команд.
По завершении программы восстанавливается содержимое регистров, которое
было сохранено ранее. Этот участок также подлежит защите от внешних прерыва-
ний по входу INTR, сбрасывая флаг IF с помощью команды CLI. Программа должна
завершаться командой возврата из прерывания IRET, перед которой выполняется
команда STI. Перед выполнением команды IRET стек должен быть в состоянии, в
котором он находился сразу после вызова программы. Команда IRET извлекает три
верхних слова из стека и помещает их в регистры IP, CS и F, обеспечивая возврат к
следующей команде основной программы, перед выполнением которой возникло
прерывание.
7.6.10 Действия при выполнении команды прерывания.
Команда INT <тип прерывания> (тип прерывания - число от 0 до 255)
INT 21h
Последовательность действий.
1. Регистр флагов загружается в стек.
2. Обнуляет флаг трассировки TF и флаг включения/выключения прерываний
IF для исключения пошагового режима выполнения команд и блокировки других
маскируемых прерываний.
3. Помещается в стек значение регистра CS.
4. Вычисляется адрес вектора прерываний (умножением типа прерывания
(номера прерывания) на 4).
5. Загружается второе слово вектора прерываний в регистр CS.
124
6. Помещается в стек значение указателя команд IP.
7. Загружается в указатель команд IP первое слово вектора прерываний.
Состояние стека после выполнения команды прерывания показано на рисунке
7.7.
Рисунок 7.7 – Состояние стека после выполнения команды прерывания
7.7 Вопросы для закрепления материала по седьмому разделу
1. Назовите основные блоки, входящие в состав МП ВМ86.
2. Что представляет собой программная модель микропроцессора ВМ86?
3. Объясните принцип сегментной организации памяти.
4. Логическая и физическая организация памяти.
5. Как размещаются и адресуются слова в памяти? Приведите пример.
6. Как вычисляется физический адрес памяти? Приведите пример.
7. Какие вы знаете методы обмена информацией с внешними устройствами?
8. Назовите два способа организации адресного пространства ввода-вывода.
9. Какие способы адресации портов ввода-вывода вы знаете?
10. Что собой представляет система прерываний микропроцессора ВМ86.
11. Назовите возможные источники прерываний.
12. Что такое таблица векторов прерываний?
13. Перечислите последовательность действий при выполнении команды пре-
рывания.
125
8 Организация и функционирование ЭВМ на ассемблерном уровне
8.1 Изучение машинных форматов команд
Для анализа полученной информации нужно понимать, как создаются физиче-
ские адреса ячеек памяти, в которых работает ваша программа, а также форматы
машинных команд. Давайте рассмотрим структуру команд и методы формирования
исполнительных адресов.
Машинные команды на персональном компьютере (ПК) имеют размер от 1 до
6 байтов. Код операции (КОП) занимает один или два первых байта команды. На ПК
существует большое количество различных операций, и для них не хватает 256 раз-
личных КОПов, которые могли бы быть представлены в одном байте. Поэтому не-
которые операции объединяются в группы, и им присваивается один и тот же КОП.
Во втором байте команды указывается дополнительная информация для этого КО-
Па. Кроме того, во втором байте указываются типы и методы адресации операндов.
Остальные байты команды содержат информацию об операндах [14-15].
Команды могут содержать от 0 до 3 операндов, и у большинства команд есть
один или два операнда. Размер операндов может быть байтом или словом (редко
двойным словом). Операнд может быть включен непосредственно в команду (это
называется непосредственным операндом), или он может находиться в одном из ре-
гистров ПК, в этом случае в команде указывается номер этого регистра. Операнд
также может находиться в ячейке памяти, и в этом случае в команде указывается
адрес этой ячейки. Некоторые команды требуют, чтобы операнд находился в опре-
деленном месте (например, в регистре AX), и в этом случае операнд не указывается
явно в команде. Результат выполнения команды сохраняется в регистре или ячейке
памяти, из которого, как правило, берется первый операнд. Например, большинство
команд с двумя операндами выполняют операцию
op1 := op1 * op2, где op1 – регистр или ячейка; op2 – непосредственный операнд, регистр или ячейка;
126
* – операция, заданная КОП.
Изменение адреса операнда разрешено с использованием одного или двух ре-
гистров-модификаторов. В первом случае, вы можете использовать только регистры BX, BP, SI или DI в качестве регистра-модификатора, и никакие другие регистры не допускаются. Во втором случае, один из модификаторов обязательно должен быть регистром BX или BP, а другой - регистром SI или DI. Однако одновременная мо­дификация по BX и BP или SI и DI не разрешена.
Обычно регистры BX и BP используются для хранения базового адреса опре-
деленного участка памяти, например, массива, и поэтому они называются базовыми
регистрами. Регистры SI и DI, с другой стороны, часто содержат индексы элементов
массива, и поэтому они называются индексными регистрами. Однако важно отме-
тить, что такое распределение ролей не является обязательным, и, например, регистр
SI может содержать базовый адрес массива, в то время как BX может содержать ин-
декс элемента массива.
В MASM адреса в командах записываются в виде одной из следующих кон-
струкций:
1) A;
2) A[M];
3) A[M1][M2], где A – адрес, M – регистр BX, BP, SI или DI, M1 – регистр BX или BP, M2 – регистр SI или DI.
Во втором и третьем варианте A может отсутствовать, в этом случае считает-
ся, что A=0.
При выполнении команды, процессор в первую очередь вычисляет так назы-
ваемый исполнительный (эффективный) адрес. Этот адрес получается путем сложе-
ния адреса, указанного в команде, и текущих значений указанных регистров-
модификаторов. Важно отметить, что все эти значения рассматриваются как неот-
рицательные:
127
1) A : Aисп = A;
2) A[M] : Aисп = A+[M];
3) A[M1][M2]: Aисп = A+[M1]+[M2].
Итак, полученный 16-разрядный адрес определяет смещение, то есть адрес,
измеряемый от начала определенного сегмента (области) памяти. Прежде чем обра-
титься к памяти, процессор добавляет начальный адрес этого сегмента (который
хранится в соответствующем сегментном регистре) к смещению. В результате этой
операции получается окончательный 20-разрядный адрес, по которому происходит
фактическое обращение к памяти. Способы формирования физического адреса по-
казаны на рисунке 8.1.
Рисунок 8.1 – Формирование физического адреса
128
8.2 Машинные форматы команд
D
W
Передача или операция
0
0
Байт из регистра в память или регистр
0
1
Слово из регистра в память или регистр
1
0
Байт в регистр из памяти или регистра
1
1
Слово в регистр из памяти или регистра
В компьютерах (ПК) существует разнообразие форматов машинных команд.
Давайте рассмотрим основные форматы команд с двумя операндами в качестве
примера. Самый распространенный формат двухоперандной команды представлен
на рисунке 8.2, где штриховыми линиями обозначены необязательные байты коман-
ды [16].
Рисунок 8.2 – Двухоперандная команда (второй операнд – регистр)
Первый байт команды содержит код операции (КОП). Поле «d» определяет
направление передачи данных: если «d» равно 1, то данные направляются в память
(из регистра в память), а если «d» равно 0, то данные передаются из памяти в ре-
гистр. Это направление относится ко второму операнду, который определяется по-
лем «reg» во втором байте команды. Этот второй байт называется постбайтом (или
просто байтом) режима адресации. Поле «w» идентифицирует тип (размер) операн-
да: если «w» равно 1, то команда оперирует словом, а если «w» равно 0, то байтом.
Таким образом, в зависимости от значений полей «d» и «w» существует четыре воз-
можных варианта, как показано в таблице 8.1.
Таблица 8.1 – Возможные значения d и w и их состояния
Участвующие в операции регистры, а также регистр и ячейку памяти, иденти-
фицируются с помощью постбайта, который состоит из трех полей: мод-режим
129
(mod), регистр (reg), и регистр/память (r/m). Поле «reg» определяет второй операнд,
который обязательно находится в регистре. Способ кодирования внутренних реги-
стров МП в поле «reg» представлен в таблице 8.2.
Таблица 8.2 – Способ кодирования внутренних регистров МП
Из таблицы видно, что регистры данных АХ-DX, а также указательные и ин-
дексные регистры SP, BP, SI, DI адресуются одинаковым образом. Это подчеркивает
законность объединения всех этих регистров в группу общих регистров.
Поле «mod» определяет используемый режим адресации и, в частности, ука-
зывает, как интерпретируется поле «r/m» для нахождения первого операнда. Если
«mod» равно 11, то операнд находится в регистре, а в остальных случаях первый
операнд находится в памяти.
Когда поле «mod» содержит 11 (регистровая адресация), поле «r/m» определя-
ет 8- или 16-битный регистр в соответствии с таблицей 8.1.
В остальных случаях адресуется память, и поле «mod» определяет, как ис-
пользуется (необязательное) смещение «disp», находящееся во втором и третьем
байтах команды.
00, disp=0 - смещение отсутствует;
mod= 01, disp=dispL – команда содержит 8-бит смещение, которое расширяется со
знаком до 16 бит;
10, disp=dispH, dispL - команда содержит два байта смещения.
Приведенные правила имеют только одно исключение: если mod=00 и
r/m=110, то ЕА=dispH, dispL. Здесь в команде содержится абсолютный адрес памя-
ти.
130
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]