Методическое пособие для выполнения лабораторных работ и КР (1075934), страница 15
Текст из файла (страница 15)
Команды: AAA , CBW и CWDКоманда AAA используется для десятичной коррекции для специального представления чисел в неупакованной десятичной форме. В этой форме каждый байт используется для хранения одной десятичной цифры.; Команда AAAMOV AX , 0ChAAAДо выполнения команды AAA на регистре AX мы имеем 000Сh, а после выполнения получим 0102h.Команды CBW и CWD используются для преобразования форматов представлениячисел с учетом знака (байта в слово и слова в двойное слово). Для пояснения команд нампотребуется переменная типа двойного слова (result).result DD…0Пример команды CBW:; Команда CBWMOV AH,7MOV AL, 5CBW;байт в словоДо выполнения команды на регистре AX мы имеем 0705h, а после выполнения командыполучим 0005h.
Для отрицательных чисел знаки и представление чисел тоже сохраняется:; Команда CBWMOV AH,7MOV AL, -5CBW;байт в словоДо выполнения команды на регистре AX мы имеем 07FBh, а после выполнения командыполучим FFFBh.В команде CWD используется дополнительно к AX и регистр DX. Поэтому дляфрагмента программы, показанного ниже:; Команда CWDMOV DX,7MOV AX, -5CWDMOVWORD PTR result[2], DXMOVWORD PTR result[0], AXв регистре AX получим FFFBh, в регистре DX FFFFh, а значение переменной будет таким:result,d -516.6. Команды: ADC и SBBКоманды ADC и SBB используются для сложения и вычитания с учетом флага переноса от предыдущей операции. Для сложения (ADC) добавляется перенос, если он был,а для вычитания (SBB) вычитается. Ниже приводятся примеры для сложения и вычитаниячетырех-байтовых чисел.Сложение:long1 DDlong2 DDresult DD…10000600000; Команда ADCMOVAX, WORD PTR long1[0]; AX = low word, long1682010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOVDX, WORD PTR long1[2]; DX = high word, long1ADDAX, WORD PTR long2[0]; Add low word, long2ADCDX, WORD PTR long2[2]; Add high word, long2MOVWORD PTR result[2], DXMOVWORD PTR result[0], AXПолучим:result,d 70000Вычитание:long1 DDlong2 DDresult DD…40000100000; Команда SBBMOVAX, WORD PTR long3[0]MOVDX, WORD PTR long3[2]SUBAX, WORD PTR long4[0]SBBDX, WORD PTR long4[2]MOVWORD PTR result[2], DXMOVWORD PTR result[0], AX;;;;AX = low word, long1DX = high word, long1Add low word, long2Add high word, long2Получим:result,d 3000016.7.
Команды: LOOP/LOOPE/LOOPNEКоманды организации циклов позволяют повторить фрагмент программы заданноечисло раз. Это число задается на регистре CX. На каждом шаге цикла значение CXуменьшается на 1 и проверяется на нуль. При достижении нуля цикл заканчивается.Фрагмент программы с циклом:; Команда LOOPCLDLEA DI, StrdMOV CX,10MOV AL, '*'MLOOP:STOSBLOOP MLOOP; конец циклаMOV AL, 0STOSBВ результате получим:&Strd,s ”**********”Другие команды циклов проверяют дополнительно значение флага нуля (ZF), который устанавливается арифметическими командами.
Должны быть выполнены одновременно два условия. Следующий цикл выполняется всего один раз:; Команда LOOPE LOOPZCLDLEA DI, StrdMOV CX,10MOV AX,0MLOOPE:STOSBADD AX, 1LOOPE MLOOPEПосле команды ADD флаг нуля устанавливается в 1 (не равно нулю) и цикл завершается.Аналогично для обратной команды LOOPNE цикл выполнится один раз:; Команда LOOPNE LOOPNZCLDLEA DI, Strd2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOV CX,10MOV AX,0MLOOPNE:STOSBADD AX, 0LOOPNZ MLOOPNE69так как после добавления в AX нуля флаг нуля будет сброшен в 0. Проверьте также работукоманд циклов: LOOPZ и LOOPNZ.Практика.1.
Выполните в режиме отладки фрагменты программ для команды XLAT.2. Примените команду XLAT при разработке программы 4-й ЛР.3. Выполните в режиме отладки фрагменты программ для команды MOVSB.4. Примените команду MOVSB при разработке программы 8-й ЛР.5.
Выполните в режиме отладки фрагменты программ для команд DIV и MUL.6. Выполните в режиме отладки фрагменты программ для команд TEST и AND.7. Выполните в режиме отладки фрагменты программ для команд CBW и CWD.8. Выполните в режиме отладки фрагменты программ для команд ADC и SBB.9. Выполните в режиме отладки фрагменты программ для команд LOOP иLOOPE/LOOPNZ.2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”7018.
Построение резидентных программ18.1. Курсовая работа по СПВ следующем семестре (5-м) студенты выполняют курсовую работу, связанную сразработкой резидентной программы (драйвера) и оформлением комплекта документациина программный продукт. Требования к КР и варианты КР размещены на сайте преподавателя. В этом семестре в рамках планового домашнего задания студенты должны разработать техническое задание (ТЗ) на основе требований к разработке документации такжепредставленных на сайте. В данном разделе дается дополнительная полезная информациядля разработки о реализации курсовой работы.18.2.
Резидентные программыРезидентные программы (TSR – “Terminate and Stay Resident”) – это программы,которые остаются в оперативной памяти (ОП) после их специального завершения. Этипрограммы могут работать параллельно с другими программами ДОС (псевдопараллельно).
Обращение к этим программам выполняется через механизм прерываний (программные или аппаратные прерывания).TSRОПВызов по адресу,взятому из векторапрерывания - ВП.(Например INT 2Fh)Для правильной работы резидентной программы (TSR) необходимо выполнитьследующие действия и процедуры:−−−−−−Проверить повторную загрузку данного нового резидента.Загрузить резидентную программу в оперативную память.Выдать сообщение о корректной загрузке резидента в память.Записать в вектор прерываний (см.
ниже) адрес резидента.Прочитать и правильно использовать параметры запуска резидента.Обеспечить вызов старого обработчика прерываний по данному адресу, еслитакое необходимо.− Правильно отработать в процедуре резидента заданные функции.− Обеспечить связь с резидентной программой с помощью клавиатеры, программно или другим способом.− Обеспечить, при необходимости корректную выгрузку резидентной программы и освобождение занимаемой резидентом памяти.− Корректно восстановить работу старых обработчиков данного прерывания,восстановить адреса старых обработчиков в векторе прерываний.− Выдать сообщение о завершении работы резидентной программы.В данном разделе мы рассмотрим основные действия и процедуры, необходимыедля построения резидентной программы и ее корректной работы.2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”7118.3. Вектор прерыванийВектор прерываний (ВП) – этот область оперативной памяти, содержащей адресаобработчиков прерываний.
Каждый адрес занимает 4 байта (far адрес обработчика, включая адрес сегмента – 2б и адрес смещения – 2б). Область ВП имеет размер 1024 байта (1Кб), поэтому максимально можно записать 256 адресов, т.е возможно обрабатывать 256различных прерываний. Вектор прерываний находится в начале ОП (для реального режима) по адресам 0000:0000 – 0000:03FF (см. рисунок ниже).<far адрес обработчика>………<far адрес обработчика или блока><far адрес обработчика><системные области ><области п/п ДОС и BIOS>Пользовательскиерезидентныепрограммы и драйверыПользовательские программы……Видеобуфер<системные области ><Буферы экрана для разных режимов><системные области >…Идентификационный № ЭВМ (2б)HMA – High Memory Area0000:0000 – начало области ВПКаждый адрес - 4 байта…Å ОБЛАСТЬ ВЕКТОРА ПРЕРЫВАНИЙ0000:03FF – 1024б=4*256 – конец области ВП0000:0400 – буферы, данные ОС и т.дB800:0000 – буфер дисплея (видеопамять)F000:FFFУE – IBM Computer TypeFFFF:FFF0 – конец области HMAВычисление адреса конкретного обработчика в векторе прерываний выполняетсяумножением его номера (прерывания) на четыре: например, для прерывания 09Н мы получим – 0000:0024Н (или десятичное смещение 36).
Доступ к адресам обработчиков прерываний может быть прямым (вычисляем адрес) или с помощью системных функций (25hи 35h прерывания ДОС 021h). Эти возможности рассмотрены ниже.Все остальные детали распределения ОП вы можете посмотреть в справочникахДОС – General Memory Map, которые расположены на сайте или в литературе (ЛР № 1).18.4. Структура резидентной программы (2-е части)Обычно резидентная программа (далее мы будем также пользоваться термином резидент) первоначально состоит из двух частей. Они показаны на рисунке ниже.Резидентная частьпрограммыВременнаячастьпрограммы, используемая при инициализации резидента- ЧАСТЬ 1 находится постоянно в памяти и вызывается толькопосредством прерываний программных и аппаратных.- ЧАСТЬ 2 работает только при запуске резидента или проверке повторного его запуска или при выполнении процедуры выгрузки резидента.2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”72При завершении установки резидента оперативная память под временную частьобычно освобождается, поэтому команды и данные из этой части нельзя использовать впроцедурах резидентной части.
В состоянии проверки повторности загрузки резидентнойпрограммы в ОП может находиться одновременно две части резидентной, так как программа запускается повторно.18.5. Понятие прерывания и их назначениеПрерывания – это специальный механизм, позволяющий операционной системевыполнять свои функции (управление ресурсами). Они обеспечивают связь аппаратнойчасти компьютера и обрабатывающих программ.
Кроме того, механизм прерываний обеспечивает выполнение множества стандартных функций для управления программами иустройствами.Прерывания – это автоматически инициируемый программный процесс, временнопереключающий микропроцессор на выполнение другой программы. После обработкипрерывания прерванный процесс автоматически будет продолжен.В момент возникновения прерывания в стеке запоминается точка возврата (следующая после прерывания команда) и содержание регистра флагов. После завершения обработки прерывания из стека восстанавливается регистр флагов (Flags) и прерванная программа переключается на выполнение следующей команды.Прерывания подразделяются на программные и аппаратные. Данная классификация основана на причине инициирования прерывания. В случае программных прерыванийони возникают после выполнения специальной команды (INT – interrupt - прерывание),которая выполняется в самой прерываемой программе.