Отчет Лабораторная 1. Лабораторная работа 1 Драйвер экрана по дисциплине Эксплуатация и развитие компьютерных сетей и систем
Скачать 66.5 Kb.
|
Министерство образования и науки Российской Федерации ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра промышленной электроники (ПрЭ) Лабораторная работа № 1 «Драйвер экрана»по дисциплинеЭксплуатация и развитие компьютерных сетей и систем.Выполнил: Студент ФДО Специальность: 210106 « » 2014г. Проверил: 2014 Цель работы: Требуется произвести написание и отладку программ драйвера экрана. В результате отладки главная программа (имитатор прикладной программы) должна выполнить с помощью драйвера экрана вывод строки символов, состоящей из нескольких слов и управляющих символов "Перевод строки" и "Возврат каретки". Выполнение работы Принцип работы программы драйвера экрана основан на работе с ASCII символами в текстовом режиме. В качестве входных данных программы выступает массив символов, точнее кодов символов, взятых из стандартной таблицы ASCII. Программа драйвер может воспринимать коды символов как соответствующие команды и в соответствии с этими командами выполнять те или иные действия. В нашем случае таких действия будет два: - Перевод строки на новую строку; - Возврат каретки (возврат к первому символу в строке). Общепринятые коды для этих операций 10 (для перевода строки) и 13(для возврата каретки). Таким образом принцип работы нашей программы заключается в том, что программа анализирует каждый входной байт-код и если он не равен 10 или 13, то выводит символ, соответствующий этому коду, на экран. Если во входном потоке символов встретится байт-код 10, то программа переведет курсор на новую строку и продолжит вывод символов с новой строки. Если встретится код 13, то программа переведет курсор на начало строки и продолжит вывод символов с начала строки. Листинг 1 – Драйвер экрана Program DisplayDriver; var Symbols:array [1..20] of byte; {Массив входных символов} i,Length1,Length2:byte; {Строки данных} message1,message2: string; Begin message1:= 'Display'; {Определим выводные строки} message2:= 'Video Driver'; Length1:= length(message1); {Длина строк} Length2:= length(message2); for i:=1 to Length1 do Symbols[i] := ord(message1[i]); {ACSII коды символов строк} for i:=Length1+3 to Length1+Length2+3 do Symbols[i] := ord(message2[i-Length1-2]); {Запишем коды в Symbols} Symbols[Length1+1]:= 10; {Запишем код перехода на новую строку} Symbols[Length1+2]:= 13; {Запишем код возврата каретки} asm {Начало ассемблерного кода} mov ah,0h {Установка видеорежима} mov al,02h {Текстовый видеорежим 80x25} int 10h {Прерывание BIOS} mov ah,01h {Установка размера курсора} mov cx,0001h int 10h mov ah,02 {Установка позиции курсора} mov bh,00 {Номер видеостраницы в памяти} mov dx,0000h {Установка координат} int 10h mov al,255 mov i,al @Start: {Запись символов на экран} inc i mov bl,i {Номер смещения в массиве} mov al,[bx+offset+Symbols] {в регистр al запишем номер символа, которого будем выводить на экран } cmp al,10 {если это НЕ символ перевода строки, то перейдем на проверку возврата каретки} jne @next {Выполнение перевода курсора на новую строку } mov ah,02 {Установку курсора} mov bh,00 inc dh {Инкремент номера строки} int 10h cmp i,23 {Если еще есть символ в массиве } jne @Start {Переходим к началу цикла @Start } @next: cmp al,13 {если это не код возврата каретки, то идем к выполнению @OUT} jne @OUT {Установка возврата каретки} mov ah,02h {Установка курсора} mov bh,00h mov dl,00h {Установка курсора в нулевой столбец} int 10h cmp i,23 {Если еще есть символ в массиве} jne @Start {Переходим к началу цикла @Start } @OUT: {если код не переводом строки и не возвратом каретки} mov ah,02 {Установка курсора} mov bh,00 int 10h mov ah,09h {Вывод символа на экран} mov bh,0h mov bl,0ch {Установка атрибутов символа} mov cx,01h int 10h inc dl cmp i,23 {Если есть еще символы в массиве } jne @Start {Повторяем} mov ah,00h int 16h end; {конец ассемблерного кода} end. Рисунок 1 – результат запуска программы-драйвера Заключение В ходе выполнения работы разработана программа драйвер экрана, анализирующая входной массив символов. Если программа встречает специальный код 10 или 13, то она переводит курсор на новую строку либо в начало строки. |