Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Методическое пособие для выполнения лабораторных работ и КР

Методическое пособие для выполнения лабораторных работ и КР, страница 19

PDF-файл Методическое пособие для выполнения лабораторных работ и КР, страница 19 Системное программирование (17500): Книга - 4 семестрМетодическое пособие для выполнения лабораторных работ и КР: Системное программирование - PDF, страница 19 (17500) - СтудИзба2018-01-09СтудИзба

Описание файла

PDF-файл из архива "Методическое пособие для выполнения лабораторных работ и КР", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 19 страницы из PDF

Дляработы с буфером клавиатуры предусмотрено два указателя на начало (голову списка Head) и на конец (хвост списка - Tail). Если эти указатели равны, то список пуст.Кроме того, в системной области фиксируется информация о нажатии управляющих клавиш (таких как Alt, Ctrl и др.) Расположение специальных полей в системной области (0400Н), позволяющих работать с буфером клавиатуры (более подробно содержаниесистемной области смотрите в справочниках – General Memory Map) показано ниже:По адресу 0417h – находится информация (размером в 2 байта) о нажатии специальных управляющих клавиш (Ctrl, Alt, Shift и др.), подробнее о содержаниисмотрите в справочниках.По адресу 041Аh – находится адрес головы циклического буфера (2 байта)По адресу 041Сh – находится адрес головы циклического буфера (2 байта)По адресу 041Eh (32 - байта) – циклический буфер клавиатурыНа основе этой информации можно установить код символа, стоящего в очередь наобработку, и информацию о нажатии управляющих клавиш. Использование буфера клавиатуры возможно после вызова стандартного обработчика прерывания от клавиатуры.Работа через порт.

При использовании порта ввода/вывода можно прочитать коднажатой клавиши в порта А контроллера 8255 (60Н). Это может быть выполнено в программе собственного обработчика с помощью следующей команды:IN AL , 060H; чтение скан-кода клавишиПолученный скан-код (см. раздел - 23.5. SCAN – коды), можно использовать в программе. Для получения признака нажатия управляющих клавиш (Shift, Ins и др. см.

всправочнике) можно использовать специальное прерывание BIOS. В примере, расположенном ниже проверяется нажатие клавиши Shift совместно с клавишей ‘Q’.INAL, 60H; Взять из порта 60Н сканкод на регистр ALCMP AL , 10H; Проверка нажатия ’Q’, скан код не зависит от регистраJNEOLD; Переход на стандартный обработчик; проверка клавиши Shift (первый бит в байте состояния управляющих клавиш)MOV AH , 02HINT 016H; Получим управляющий байт на ALTEST AL , 00000010b; Проверим на 1JZ OLD; Переход на стандартный обработчик, если 0Для завершения самостоятельной обработки необходимо через порт В контроллера8255 (61Н) передать информацию о считывании скан-кода. Для этого нужно выполнитьследующие команды:IN AL, 61HOR AL, 10000000bOUT 61H, ALAND AL, 01111111bOUT 61H, AL; Считаем старое состояние; Установим 7-й бит в 1; Запишем в порт; Сбросим 7-й бит; Запишем в портДанные команды позволяют подтвердить прием скан-кода из клавиатуры.

Если далее нам не нужно обрабатывать стандартным обработчиком данное прерывание, то необходимо передать сигнал (20Н – EOI END OF INTERUPT) в порт контроллер прерываний.Это делается командами:MOV AL,20HOUT 20H,ALPOP AXIRETЕсли нужно завершить обработку с системным обработчиком прерываний, то нужно ему передать управление:OLD:POP AX862010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”STIJMPCS:SAVEINT9; Вызов старого обработчикаРабота с буфером клавиатуры. При работе с буфером клавиатуры целесообразновызвать старый обработчик предварительно. Это можно сделать так:NEWINT9:PUSHAXPUSH CSPOPDSPUSHFCALL CS:SAVEINT9; Сохранение используемых регистров; для работы с данными; Это обязательно для корректного возврата; Вызов старого обработчикаДля полноты работы с клавиатурой нужно иметь возможность получить информацию об управляющих клавишах и значение введенного кода( скан-кода, ASCII кода ирасширенного ASCII кода).

Для проверки нажатия управляющих клавиш можно прочитать специальный байт по адресу 0417 из системной области. Это можно сделать так:; проверка левого шифтаMOV AX , 40H; сегментный адрес системной областиMOV ES , AXMOV AL , ES:17H; смещение для управляющего байта состояния клавишTEST AL , 00000010b ; проверка второго битаJZ PROD; переход если левый шифт не нажатТакие действия можно выполнить и по-другому, основываясь на прерывании BIOS02H – 16H:MOV AH , 02HINT16H; BIOS прерывание для получения управляющего байтаTEST AL , 00000010b ; проверка второго битаJZ PROD; переход если левый шифт не нажатЕсли символ прочитанный с клавиатуры не должен появляется на экране (например, в окне COMMAND.COM) необходимо обнулить буфер клавиатуры.

Это можно сделать, установив одинаковые значения указателей циклического буфера. Например, так:MOV AX , 40HMOV ES , AXMOV BX , ES:1AHMOV ES:1CH , BXПосле такой операции введенный символ не будет выводиться на экран командногопроцессора. Это можно сделать и так:MOV AH , 00HINT16H; код команды чтения символа и выборки из буфера; BIOS прерывание для получения управляющего байтаЕсли буфер клавиатуры пуст, то программа будет ожидать нажатия клавиши. Избуфера клавиатуры можно прочитать коды нажатой клавиши или их комбинации напрямую.

Это может быть сделано так:MOVMOVMOVMOVAX ,ES ,BX ,AX,40HAXES:1AHES:[BX]После такой операции на регистрах AH и AL заносится комбинация кодов, на основе которых можно выделить следующее: ASCII символ, скан-код или расширенныйASCII код. Это можно сделать и так:MOV AH , 01HINT16H; код команды чтения символа и без выборки из буфера; BIOS прерывание для получения управляющего байтаЕсли регистр AL содержит 0, то это значит, что в регистр АН занесен расширенныйASCII код, который можно анализировать. В противном случае регистр AL содержитASCII введенного символа, а регистр AH содержит скан-код нажатой клавиши.Предварительно необходимо вызвать системный обработчик прерываний.

Анализвведенного кода для проверки нажатой клавиши может быть проведен так:MOV AX , 40HMOV ES , AXMOV BX , ES:1AH872010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”MOV AX, ES:[BX] ; на АХ 2 байта их буфера клавиатуры; Проверка расширенного кодаCMP AL , 0; проверка отсутствия ASCIIJE PRINT_EXT; переход, если расширенный кодCMP AL ,61H ; Проверка символа ’a’JNE EXITCMP AH, 1EH; Проверка нужного скан-кода для клавиши ’A’JNE EXIT…PRINT:…; Проверка комбинации расширенного кодаPRINT_EXT:CMP AH , 5ЕH; Ctrl + F1JNE EXIT; Переход если не наша комбинация…JMP PRINTВ данном примере сначала на AX из буфера клавиатуры получаем два байта.

Затемпроверяем AL на 0. Нулевое значение свидетельствует о наличии расширенного кодаASCII и мы переходим на метку для его анализа (PRINT_EXT). Там мы проверяем кодкомбинации Ctrl + F1( код - 5E). Если код ASCII (AL != 0), то проверяем нужный код в регистре AL (у нас 61Н – код строчной буквы ‘а’). Для иллюстрации наличия скан-кода клавиши ‘А’ делаем дополнительную проверку регистра AH, куда помещен скан-код этойклавиши – 1ЕН. Если код не соответствует, то уходим на выход из процедуры.Практике программирования и в курсовой работе по СП Вы можете выбрать любойиз вариантов для обработки прерываний от клавиатуры.18.21.

Освобождение памяти внешнее из отдельной программыОсвобождение памяти под резидент и восстановление векторов прерываний старыхобработчиков прерываний. Вы можете выполнить и вне резидента, в отдельной программе. Для этого нужно вычислить адрес начала резидентной программы и PSP, а затем выполнить действия по восстановлению старых векторов прерываний и освобождению оперативной памяти. Трудности может составить получение адресов сохраненных старых адресов вектора прерываний. Если разместить переменную для сохранения старого адресаобработчика непосредственно перед точкой входа в процедуру обработки прерываний, тополучить этот адрес несложно, вычитая из этого адреса четыре.SAVEINT9 DD ?; Сохранение старого обработчика;Новый обработчик прерывания 09НNEWINT9:PUSHAX; Сохранение используемых регистровНачальная точка расположения резидентной программы и адрес ее PSP могут бытьполучены аналогично.18.22.

Завершение основной программы при проверке повторной загрузкиПри проверке повторности загрузки в части инициализации, программа завершается обычным образом, если она не остается резидентной. Аналогичное завершение должнобыть при выдаче справке о программе. Завершение основной программы в этих случаяхможет быть выполнена так:Либо:MOV AX , 4C00HINT 21HНа AL задается код возврата программы (ERRORLEVEL).882010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”Либо:MOV AX , 0000HINT 20H18.23.

Проверка загрузки и выгрузки с помощью утилитыmem.exeДля контроля наличия резидента в ОП нужно использовать утилиту ОСMEM.EXE. Эта утилита используется несколько раз: с ее помощью уточняется объемсвободной памяти до запуска резидента; проверяется наличие резидента в ОП и проверяется освобождение ОП под модули резидента после его выгрузки. Для этого необходимосначала уточнить параметры ее запуска, так как для Разных ОС они могут отличаться. Поэтому ее нужно запустить в режиме справки ( MEM.EXE /?). Размер свободной памяти дозагрузки резидента должен полностью соответствовать размеру свободной памяти послеего выгрузки. Запуск в режиме справки для XP:C:\work>mem /?Справка на экране:Вывод сведений об используемой и свободной памяти.MEM [/PROGRAM | /DEBUG | /CLASSIFY]/PROGRAM or /P/DEBUG or /D/CLASSIFY or /CВывод статуса программ, загруженных в память.Вывод статуса программ, внутренних драйверов и другойдополнительной информации.Классификация программ по использованию памяти.Вывод сведений о размерах программ, использовании памятии максимальном свободном блоке памяти.Если предварительно загрузить резидент (TSRKBD.COM) и проверить распределение памяти командой:C:\work>mem /pМы получим на экране следующую информацию:…Адрес------000000000400000500000700000A70002210Имя--------IOMSDOSIOРазмер-----0004000001000002000003700017A0002280Тип-----Вектор прерыванияОбласть обмена ПЗУ (ROM)Область обмена DOSСистемные данныеСистемные данныеСистемные данные0044A000500000508000567000DE2000E34000EEA000F3A000F8C000FA3000FF50027440…0D4310COMMANDMSDOSCOMMANDDOSXCOMMANDCOMMANDCOMMANDTSRKBDTSRKBDMEMMEMMSDOS000B500000700005E00087A0000510000B500004F00005100001600005100174E0078BA0Программа- Свободно ОкружениеПрограммаДанныеПрограммаОкружениеОкружениеПрограммаОкружениеПрограмма- Свободно -MSDOS00BCE0- Свободно -655360 байт - всего обычной памяти655360 байт - доступно для MS-DOS892010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”589968 максимальный размер исполняемой программы1048576 байт - всего непрерывной дополнительной памяти0 байт - доступно непрерывной дополнительной памяти941056 байт - доступной памяти XMSрезидентная часть MS-DOS загружена в сегмент HMAНа этом примере видно, что под область резидентной программы выделяется двафрагмента ОП, которые необходимо освобождать (программа и окружение).

Количествосвободной памяти в этом режиме определяется строкой: “589968 максимальный размерисполняемой программы”.18.24. Описание данных и процедур резидентаОписание данных и процедур, используемых в резидентной части, нужно размещать только в области самого резидента.BEGIN: …JMP INIT; Описания данных…; обработчики прерываний и процедуры…; Описания процедур резидентаMY_PROC PROC…MY_PROC ENDP…; Описания данных…MSG DB …INIT: …Если данные для резидента случайно описать в области части инициализации, онине будут доступны и программа резидента не сможет работать правильно.18.25. Русификация сообщений резидентаДля того чтобы резидент мог выдавать сообщения на русском языке необходимовыполнить следующие условия:− Загрузить перед запуском резидента русификатор (например, RKM – см.выше) и− Сообщения резидента закодировать в коде ASCII, для чего их необходимоввести в текстовом редакторе DOC при включенном русификаторе.

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