Chapter_08 (1110560), страница 3

Файл №1110560 Chapter_08 (Книга с сайта Баулы по главам) 3 страницаChapter_08 (1110560) страница 32019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

Вообще говоря, допускается, что на этом этапевыполнение нашей процедуры-обработчика может быть прервано другим сигналом прерывания.2Закончив полную обработку сигнала прерывания, процедура-обработчик должна вернуть управление программе, прерванной последним сигналом прерывания.3 Для этого сначала необходимо изконтекста прерванной программы восстановить значение всех её регистров (кроме регистров FLAGS,CS и IP). Заметим, что после восстановления значений регистров SS и SP мы восстановили и состояние стека программы, которое этот стек имел после завершения аппаратной реакции на прерывание. После этого надо произвести возврат на следующую команду прерванной программы, для чего в нашем компьютере можно использовать специальную команду языка машины – команду выходаиз прерыванияiretЭта команда без параметров является ещё одним видом команд безусловного перехода и выполняется по схеме:Изстека(IP); Изстека(CS); Изстека(FLAGS)Напомним, что из области сохранения уже восстановлены регистры SS и SP прерванной программы,т.е.

из её стека можно читать данные.1Точнее контекстом процесса, процессы студенты факультета вычислительной математики и кибернетики МГУ изучают в курсе третьего семестра "Системное программное обеспечение". Заметим, что в контекстекаждого вычислительного процесса постоянно хранится и другая информация, связанная с процессом (объёмзанимаемой памяти, приоритет, описание открытых файлов, так называемые переменные окружения и т.п.).2В частности, сигналом с таким же номером N, при этом произойдёт повторный вход в начало этой жесамой процедуры-обработчика. Те программы, которые допускают такой "принудительный" повторный вход всвоё начало (не путать это с рекурсивным вызовом!), называются повторно-входимыми или "по-иностранному"реентерабельными.

Для реентерабельных программ при каждом входе в их начало должна резервироватьсяновая область памяти под хранение контекста этой программы при её прерывании. Программы обработки прерываний для младших моделей нашего семейства могли и не быть реентерабельными, что порождало определённые проблемы, которые мы здесь обсуждать не будем.3Если прерванных (готовых к продолжению своего счёта) программ больше одной, то часто может понадобиться произвести возврат не в последнюю по времени прерванную программу, а в какую-нибудь другую изэтих программ. Поэтому после окончания своей работы процедура-обработчик прерывания обычно передаётуправление специальной системной программе – диспетчеру, и уже программа-диспетчер определяет, котораяиз прерванных программ должна быть продолжена. Обычно каждой выполняемой программе присваиваетсячисловой приоритет, и диспетчер продолжает выполнение готовой к счёту программы с наибольшим приоритетом.6Из рассмотренной выше схемы механизма обработки прерываний можно сделать один важныйвывод.

Для "обычной" программы прерывание проходит незамеченным, если только эта программаспециально не следит за показанием встроенных в компьютер часов (в последнем случае она можетзаметить, что физическое время её счёта "почему-то" увеличилось). Иногда для подчёркивания этогофакта говорят, что механизм прерываний прозрачен для выполняемой программы обычного пользователя.В Таблице 8.1 изображено начало вектора прерываний для компьютера младшей модели изучаемой нами архитектуры.Таблица 8.1. Начало вектора прерыванийНомерN=0N=1N=2N=3N=4N=5N=6. . .Описание событияОшибка в команде деленияУстановлен флаг TF=1Немаскируемое внешнее прерываниеВыполнена команда intВыполнена команда into и OF=1...Команда с плохим кодом операцииПродолжим теперь изучение переходов, вызванных специальными командами прерываний, выполнение каждой такой команды в нашей архитектуре всегда вызывает прерывание (исключениемявляется команда into , которая вызывает прерывание не всегда, эту команду мы рассмотрим далее).

Каждая команда прерывания реализует дальний прямой двойной косвенный переход (какуже упоминалось ранее, косвенный переход двойной, так как в самой команде указывается не адреспамяти, где хранится место перехода, а только заданный по умолчанию номер в векторе прерываний,и указанный адрес памяти вычисляется по этому номеру).Сначала рассмотрим команды прерывания, о которых упоминается в Таблице 8.1. Команда intявляется самой короткой (длиной в один байт) командой, которая всегда вызывает прерывание с номером N=3. В основном эта команда используется при работе отладчика – специальной программы,облегчающей программисту разработку новых программ. Отладчик, в частности, может ставить впрограммный код отлаживаемой программы так называемые контрольные точки – это те места, вкоторых отлаживаемая программа должна передать управление программе-отладчику.

Для такой передачи хорошо подходит короткая команда int , если программа-отладчик реализована в виде обработчика прерывания с номером N=3 (так как эта команда самая короткая по длине, то её можновременно подставить на место любой машинной команды в отлаживаемой программе).Команда into реализует условное прерывание: при выполнении этой команды прерываниепроисходит только в том случае, если флаг OF=1, иначе продолжается последовательное выполнение программы.

Основное назначение команды into – эффективно реализовать надёжное программирование при обработке целых знаковых чисел. Как мы знаем, при выполнении операцийсложения и вычитания со знаковыми числами возможна ошибка, при этом флаг переполнения OF устанавливается в единицу, но выполнение программы продолжается. Кроме того, вспомним, что флагпереполнения устанавливается в единицу и при операциях умножения, если значащие биты результата попадают в старшую часть произведения.При надёжном программировании проверку флага переполнения необходимо ставить после каждой такой команды. Для такой проверки хорошо подходит команда into , так как это самая короткая (однобайтная) команда условного перехода по значению OF=1.

При этом, правда, обработкуаварийной ситуации должна производить процедура-обработчик прерывания с номером N=4.Рассмотрим в качестве примера простейшую реализацию такой процедуры-обработчика прерывания от команды into . Для простоты эта процедура-обработчик будет фрагментом нашей программы и располагаться в её сегменте кода. При возникновении ошибки будет просто выдаватьсяаварийная диагностика, и продолжаться выполнение нашей программы (естественно, с неверным результатом). Заметим, что наш обработчик прерывания не является процедурой в смысле языка Ассемблер, и тем более не выполняет стандартных соглашений о связях.

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

Так мы и сделали в приведённой ниже программе.include io.asmdata segmentAdw?Olddw?; для сохранения адреса старойdw?; процедуры-обработчика intoDiagn db'Ошибка – большое значение!$'data endsstack segment stackdw32 dup (?)stack endscode segmentassume cs:code, ds:data, ss:stackstart:movax,datamovds,ax; инициализация процедуры-обработчика intomovax,0moves,ax; es - на вектор прерыванийAddr_into equ word ptr es:[4*4]; сохранения адреса старой процедуры intomovax,Addr_intomovOld,axmovax,Addr_into+2movOld+2,ax;; занесение нового адреса процедуры intocli; Закрыть внешние прерыванияmovAddr_into,offset Error; Начало проmovAddr_into+2,code; цедуры-обработчикаsti; Открыть прерывания; собственно начало программыinint Amovax,Aaddax,A; Возможно переполнениеintoimul A; Возможны значащие биты в DXintomovA,axoutint X; восстановление старого адреса обработчика intoVoz: cli; Закрыть прерыванияmovax,OldmovAddr_into,axmovax,Old+2movAddr_into+2,axsti; Открыть прерыванияfinish; Наша процедуры-обработчикаError:; --- Минимальная программная реакция --push ds; Сохранение нужных регистровpush dxsti; Открыть прерывания; --- Полная программная реакция --movdx,datamovds,dx8movdx,offset Diagnoutstrnewlinepopdx; Восстановление регистровpopdsiret ; Возврат из прерыванияcode endsend startПриведённая программа снабжена достаточным количеством комментариев, так что Вы должныпонять логику её работы.

Обратите внимание, что при выполнении некоторых групп команд работунашей программы нельзя прерывать, иначе, например, может возникнуть ситуация, когда в векторпрерывания не занесётся полностью вся необходимая информация (одно машинное слово вместодвух), а уже произойдёт переключение на другую программу по пришедшему сигналу прерывания. Впрограммировании такие группы команд называются критическими секциями программы, в показанной выше программе критические секции заключены в рамки. Мы позаботились о том, чтобы привыполнении каждой критической секции работа не была прервана. Для этого в начале каждой критической секции стоит команда запрета прерывания от внешних устройств cli , а в конце секции –команда открытия таких прерываний sti .

Разумеется, внутри критических секций не должно бытькоманд, которые могут сами вызвать прерывания программы.После выдачи диагностики об ошибке наша процедура-обработчик могла бы не продолжать выполнение программы, а, например, завершать выполнение этой программы. Для этого вместо предложенияiret ; Возврат из прерываниянадо поставить два предложенияadd SP,3*2; Очистка стека от IP, CS и FLAGSjmp VozИ, наконец, рассмотрим команду языка нашей машины, которая всегда вызывает прерывание сномером N, заданным в качестве её операнда:int op1Здесь op1=N имеет формат i8. По своей сути это команда дальнего абсолютного двойного косвенного перехода, которая выполняется почти так же, как команда дальнего безусловного переходаjmp dword ptr [4*N] . Пожалуй, единственным отличием здесь является то, что команде intдля доступа к памяти не требуется сегментный регистр данных, так как она всегда обращается вфиксированный сегмент (вектор прерывания), расположенный в самом начале оперативной памяти.Заметим, что с помощью команды int можно вызвать прерывание с любым номером, напримерпрерывание, соответствующее делению на ноль или плохому коду операции.

Более того, прерыванияс номерами, большими 3110, в нашей архитектуре можно вызвать, только выполняя командуint N с соответствующим параметром-номером прерывания. Используя эти команды, легко отлаживать процедуры-обработчики прерываний, но основное назначение таких команд другое.Дело в том, что в большинстве программ необходимо выполнять некоторые широко распространённые действия (обмен данными с внешними устройствами, выполнение определённых стандартных операций и многое другое). Естественно желание реализовать такие широко распространённыедля большинства программ действия в виде некоторого общедоступного набора процедур, чтобы нереализовывать эти действия в каждой программе, а просто вызывать для этого необходимые стандартные процедуры.

Обычно процедуры, реализующие эти действия, оформляются в виде библиотеки стандартных процедур и всегда находятся в оперативной памяти компьютера. Так как адреса этихпроцедур могут меняться (например, при их модификации), то лучше всего присвоить каждой такойпроцедуре свой номер N и оформлять такие процедуры в виде обработчиков прерываний с этим номером. Это освобождает остальные программы от необходимости знать конкретное месторасположение таких процедур в памяти, достаточно знать только их номера. В этом случае вызов конкретной процедуры с номером N следует производить командой int N .Исходя из описанного выше, такие команды прерывания (а часто и соответствующие им процедуры) часто называют системными вызовами (системными функциями операционной системы), асоответствующую библиотеку стандартных процедур – Базовой системой процедур ввода/вывода9(английское сокращение BIOS – Base Input/Output System).

Параметры для таких процедур обычнопередаются на регистрах, т.е. для системных вызовов не выполняются стандартные соглашения освязях.1В качестве примера рассмотрим системный вызов int 21h , который в нашей архитектуререализует многие операции ввода/вывода. Так, для вывода строки текста на экран в качестве параметров следует передать номер конкретного действия (код операции) на регистре ah (для выводастроки ah=9) и физический адрес начала выводимой строки на регистрах <DS:DX> (выводимаястрока должна кончаться служебным символом '$', который является признаком конца строки и самне выводится).

Характеристики

Тип файла
PDF-файл
Размер
377,66 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее