Скачать 121.26 Kb.
|
НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ИМ. Р.Е. АЛЕКСЕЕВА Дисциплина «Системное программное обеспечение» Курсовая работа Тема: Справочно-обучающая программа «Аппаратно-программные средства ввода с клавиатуры» Выполнила: Студентка группы 10-В-2 Соловьева Екатерина Проверил: Кочешков А.А. Нижний Новгород 2013 г. Содержание
Приложение 1……………………………………………………………............13 Список литературы……………………………………………………………...16
Разработать обучающую программу, выдающую структурированную и наглядную информацию о работе клавиатуры, буфера клавиатуры, обработчиков прерываний BIOS. Отобразить в реальном времени состояние буфера и действия, выполняемые при нажатии клавиш.
2.1 Этапы решения задачи:
В данный момент наиболее популярными форматами справочных систем являются:
Основываясь на этих данных справочная система будет состоять из нескольких HTML, но без компиляции в chm, так как html поддерживается всеми браузерами. Справочная система должна включать в себя следующие разделы:
Разрабатываемая программа должна быть основана на данных, приведенных в справочной системе и поддерживать следующие функции:
Итоговой тест должен содержать вопросы, основанные на теоретическом материале, изложенном в справочной системе.
После запуска программы, на экране отображаются адреса буфера клавиатуры и указатели «головы» и «хвоста». Ожидается ввод с клавиатуры. Как только клавиша нажата, производится чтение символа с помощью нулевой функции int 16h. Далее идет анализ введенного символа, если это «q», то производиться выход из программы, в противном случае введенный символ отображается вместе с адресом и указателем. Как только буфер заполняется (количество введенных символов достигает 16) то происходи возврат к началу буфера и при вводе символов процесс заполнения отображается снова.
Основным файлом справочной системы является index.html (.../Курсовая/СПРАВКА/index.html). Данный файл можно открыть любым из установленных браузеров, в частности IE, Opera, Google Chrome. Первая страница представляет собой приветствие пользователя. Слева в колонке отображены основные разделы справочной системы. В левом вернем углу, изображен логотип справочной системы, который одновременно является ссылкой на страницу приветствия. Кнопка «Далее>>» предназначена для перехода на следующую страницу. Следующая страница является главной. В ней идет краткое описание остальных разделов справочной системы. В разделе «Клавиатура» подробно описана как работа клавиатуры, с представленной схемой взаимодействия с системой, так и работа обработчика прерываний BIOS int 09h, помимо этого так же приведена схема скэн-кодов клавиш. В данном разделе появляется возможность возвращения к предыдущему разделу, с помощью кнопки «<<Назад» В разделе «Буфер клавиатуры» подробно рассказано о работе и устройстве буфера, так же приведена схема его работы. В разделе «Расширенные коды ASCII» дается описание данного термина и приведены таблицы этих кодов. В разделе «Код» пользователю предлагается ознакомиться с разработанной программой и ее кодом. В разделе «Тест» предоставляется возможность проверить и закрепить полученные знания, для прохождения итогового теста нужно нажать кнопку «Начать тест». После чего открывается заглавная страница теста. Для перехода к первому вопросу нужно нажать кнопку «Далее», чтобы завершить тестирование нажать кнопку «Закончить». Слева представлен список вопросов. В каждом тестовом вопросе возможен только один вариант ответа. Оказавшись на последнем вопросе, нужно выбрать вариант ответа и нажать кнопку «Закончить». После чего будут выданы результаты тестирования. Для возврата к справочной системе нужно нажать кнопку браузера «Обновить».
Исходным модулем программы является buf.asm, текст которого приведен в приложении 1. Для трансляции программы необходимы tasm и tlink. Программа предназначена для компоновки в формат EXE, поэтому компилировать и компоновать программу нужно следующим образом: tasm buf.asm tlink buf.obj Процедура display_buf предназначена для отображения на экран адресов буфера клавиатуры, а процедура set_pointer для отображения указателей. Для очисти буфера клавиатуры идет прямое считывание с порта. Основные моменты в тексте кода разъясняются комментариями.
Для работы программы необходим MS DOS версии 4.0 и выше или Windows 95 и выше. Запустить buf.exe Вводить символы с клавиатуры. Для очистки содержимого буфера клавиатуры нажать Enter. Для выхода из программы нажать крестик и завершить программу. Приложение 1 .model small .data p_beg dw 0 ;адрес головы буфера p_end dw 0 ;адрес хвоста si_beg dw 0 ;ячейки видео памяти si_end dw 0 buffer dw 16 dup (?) ; для буфера клавиатуры buf1 db 'seg :offset' ; текст для вывода. buf2 db '001E00200022002400260028002A002C002E00300032003400360038003A003C' .stack 100h .code start: mov ax,@data ; инициализируеся ds mov ds,ax mov ah,0 mov al,3 int 10h ; 3й видео режим call display_addr ; вывод текста, для наглядности m5: call display_buf ; отображения содержимого буфера call set_pointer ; отображение указателей головы/хвоста mov ah,1 int 16h ; чтение любой клавиши jmp m5 exit: mov ax,4c00h int 21h set_pointer proc mov ax,@data mov ds,ax mov ax,040h ; в es заносим сегмент буфера клавиатуры mov es,ax mov ax,es:[001ah] ; читаем указатели mov p_beg,ax mov ax,es:[001ch] mov p_end,ax in al,60h ; читаем содержимое порта cmp al,1ch ; если нажат Enter jne ok ; очищаем mov si,es:[001ah] ;буфер mov es:[001ch],si ; клавиатуры ok: mov ax,0b800h ; меняем сегмент на видеопамять mov es,ax mov si,si_beg ; старое место указателя очищаем mov ax,0 mov es:[si],ax ; рисуем новые mov si,172*2 mov ax,001eh m6: cmp p_beg,ax ; если адрес совпал - в этом месте рисуем стрелку 10h je setbeg inc ax inc ax add si,80*2 jmp m6 setbeg: mov al,10h mov ah,01h mov es:[si],ax mov si_beg,si mov si,si_end ; аналогично для второго указателя mov ax,0 mov es:[si],ax mov si,178*2 mov ax,001eh m7: cmp p_end,ax je setend inc ax inc ax add si,80*2 jmp m7 setend: mov al,11h mov ah,01h mov es:[si],ax mov si_end,si ret endp display_buf proc mov ax,@data ; сегмент данных в es mov es,ax mov ax,40h mov ds,ax ; в ds сегмент буфера клавиатуры mov si,001eh ; начало буфера mov cx,10h ; 10h элементов mov di,offset buffer ; читаем в сегмент данных m: mov ax,[si] ; из буфера mov es:[di],ax ; клавиатуры inc si inc si inc di inc di loop m mov ax,0b800h ; в ds ставим видеопамять mov ds,ax mov si,174*2 ; и выводим буфер в столбик с начиная с 3й строки mov di,offset buffer mov cx,10h m4: mov al,byte ptr es:[di] mov [si],al inc si mov byte ptr [si], 01h inc si inc di mov al,byte ptr es:[di] mov [si],al inc si mov byte ptr [si], 01h inc si inc di add si,78*2 loop m4 ret endp display_addr proc ; push es ; сохраним в стеке сегменты push ds mov ax,0b800h; в еs видеопамять mov es,ax xor si,si mov cx,0bh mov ah,01h mov di,offset buf1 ; вывод текста из первого буфера m1: mov al,[di] mov es:[si],ax inc si inc si inc di loop m1 mov si,80*2 mov cx,10h mov di,offset buf2 ; вывод текста из второго буфера push si m2: ; сначала пишем 0040: pop si add si,160d ;переход на след строку push si mov al,30h mov es:[si],ax inc si inc si mov al,30h mov es:[si],ax inc si inc si mov al,34h mov es:[si],ax inc si inc si mov al,30h mov es:[si],ax inc si inc si mov al,3Ah mov es:[si],ax inc si inc si push cx mov cx,0004h m3: mov al,[di] ; потом 4 символа из буфера mov es:[si],ax inc si inc si inc di loop m3 pop cx loop m2 mov ax,0040h mov ds,ax mov di,001eh pop si pop ds ;возвращаем сегментные регисты pop es ret endp end start Список литературы П.И. Рудаков, К.Г. Финогенов «Язык ассемблера: уроки программирования» 2001 г. С.В. Зубков «Assembler для DOS, Windows и Unix» 2000 г. |