Вопросы и ответы по ОС реального режима (DOS) Часть 3
Добавил: | DMT | ||||||||||||||||||||||||||||||||||||||||
Дата создания: | 19 июня 2008, 1:02 | ||||||||||||||||||||||||||||||||||||||||
Дата обновления: | 19 июня 2008, 1:03 | ||||||||||||||||||||||||||||||||||||||||
Просмотров: | 9389 последний сегодня, 22:23 | ||||||||||||||||||||||||||||||||||||||||
Комментариев: | 0 | ||||||||||||||||||||||||||||||||||||||||
16. Программирование контроллера порта параллельной передачи данных. Управление принтером. 15. При печати на принтере вместо русских букв печатаются какие-то “греческие” значки. Почему? И что мне делать чтобы напечатать русский текст в MS DOS? Ответ: Принтеры содержат внутри себя специальное ПЗУ, на котором, в частности, хранятся наборы шрифтов, используемые принтером при печати документов в текстовом режиме. Если ПЗУ принтера содержит наборы символов с русскими символами, то вам достаточно выбрать данный шрифт, установив переключатели принтера в определенное положение или, если принтер имеет энергонезависимую память, выбрав нужный шрифт с помощью меню. В большинстве случаев встроенные шрифты принтеров не содержат русских букв или в них используется неправильная кодировка. В этом случае вы можете использовать возможность загрузки в принтер собственных наборов шрифтов. Для этого вам не обязательно вручную программировать принтер. Достаточно использовать уже разработанные программы загрузки шрифтов. К таким программам можно отнести программу SETPR, пакеты SOLO, LOADFONT и многие другие. Кроме того вы можете распечатывать документы в графическом режиме из Microsoft Windows.
2. Составьте блок-схему фрагмента программы, проверяющего готовность принтера к печати. Ответ: Порт 379h.Порт состояния принтера, доступен только для чтения: 7 6 5 4 3 2 1 0T-T-T-T-T-T-T-¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ LT+T+T+T+T+T+-+T- ¦ ¦ ¦ ¦ ¦ L===¦= установлены в 0; ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ L======= сигнал ошибки, активный уровень - 0, ¦ ¦ ¦ ¦ контакт разъема - 15, ERROR; ¦ ¦ ¦ ¦ ¦ ¦ ¦ L========= принтер выбран, контакт 13, SLCT; ¦ ¦ ¦ ¦ ¦ L=========== конец бумаги, контакт 12, PE; ¦ ¦ ¦ L============= готовность принтера, активный уровень - 0, ¦ контакт разъема - 10, ACK; ¦ L=============== 0 - принтер занят, находится в состоянии offline или произошла ошибка, контакт 11, BUSY. Обычно редко приходится работать с принтером на уровне портов ввода/вывода, так как достаточно использовать функции BIOS или MS-DOS, предназначенные для этого. Приведенная выше информация может пригодиться вам для разработки собственного драйвера принтера или для подключения к принтерному порту какого-либо другого устройства ввода/вывода, например, аналого-цифрового преобразователя.
17. Программирование контроллера прерываний ПЭВМ.
• Напишите фрагмент программы, настраивающей контроллер прерываний ПЭВМ так, что прерывание таймера получает наименьший приоритет, а прерывание часов реального времени – максимальный приоритет.
Ответ:
Алгоритм смены приоритета: 1. Сбросить бит в ISR с наибольшим приоритетом 2. Сбросить бит в ISR для определенного уровня прерываний 3. Установить низший приоритет для определенного уровня 4. Поменять приоритеты уровней с максимальным и минимальным приоритетами 5. Поменять приоритеты уровней с заданным и минимальным приоритетами Данный приказ посылается в порт 20 h Команды обработки конца прерывания приведем в виде таблицы: Биты байта команды Описание D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 0 0 0 0 0 Обычный конец прерывания. 0 1 1 0 0 B2 B1 B0 Специальный конец прерывания, B0...B2 - двоично-десятичный код сбрасываемого разряда в регистре обслуживания прерывания ISR. 1 0 1 0 0 X X X Циклический сдвиг уровней приоритета с обычным концом прерывания. Дно приоритетного кольца устанавливается по обслуженному запросу. 1 1 1 0 0 B2 B1 B0 Циклический сдвиг уровней приоритета со специальным концом прерывания, B0...B2 - двоично-десятичный код дна приоритетного кольца. 1 0 0 0 0 X X X Разрешение вращения уровней приоритета. 0 0 0 0 0 X X X Сброс разрешения вращения уровней приоритета. 1 1 0 0 0 B2 B1 B0 Циклический сдвиг уровней приоритета без завершения прерывания, B0...B2 - двоично-десятичный код дна приоритетного кольцаКоманды третьего типа выдаются также в порты с адресами 20h и A0h. out 20h, 00100000h ; сброс бита в ISR с наибольшими приоритетами out 20h, 01100101h ; Специальный конец прерывания out 20h, 10000101h ; разрешение вращения mov cx, 8 loop1: ; возможно циклы не нужны out 20h, 11100101h ; циклический сдвиг loop loop1 out 20h, 00000101h
Mov cx,8 Loop1: Out 20h,14 Loop1
• На время выполнения фрагмента Вашей программы необходимо заблокировать ВСЕ прерывания ПЭВМ. Напишите фрагмент программы, выполняющий, а затем снимающий такую блокировку. Ответ: cli . . . sti
• Напишите фрагмент программы, перепрограммирующий контроллер прерываний ПЭВМ так, что прерывание таймера получает 3-й приоритет, а прерывание контроллера НГМД - 4-й. Ответ: Невозможно т.к. приоритеты выставляются по кольцевой схеме.
• Напишите фрагмент программы, перепрограммирующий контроллер прерываний ПЭВМ так, что прерывание таймера получает 3-й приоритет. Ответ:
out 20h, 00100000h ; сброс бита в ISR с наибольшими приоритетами out 20h, 01100101h ; Специальный конец прерывания out 20h, 10000101h ; разрешение вращения mov cx, 3 loop1: out 20h, 11100101h ; циклический сдвиг loop loop1 out 20h, 00000101h
Mov cx,3 Loop 1: Out 20 h , 14 Loop 1
19. Контроллер прямого доступа к памяти, его программирование.
Ответ: ;Hачинаем инициализацию микросхемы DMA mov al,4 A h ;Kод записи данных контроллера HГМД out 12,al out 11,al
; Вычисляем адрес буфера lea ax , buffer ;Берём смещение буфера в DS mov bx , ds ;Помещаем DS в BX mov cl,4 ;Готовим вращение старшего нибла rol bx,cl ;Вращаем младшие 4 бита mov dl,bl ;Копируем DL в BL and dl,0fh ;Чистим старший нибл в DL and bl,0f0h ;Чистим старший нибл в BX add ax,bx ;Складываем jnc nocr ;Если не было переноса, то # страницы в DL inc dl ;Увеличиваем DL, если был перенос nocr: out 4,al ;Посылаем младший байт адреса mov al,ah ;Сдвигаем старший байт out 4,al ;Посылаем младший байт адреса mov al,dl ;Засылаем номер страницы out 82h,al ;Посылаем номер страницы
;Kонец инициализации mov ax,511 ;Значение счётчика out 5,al mov al,ah out 5,al mov al,3 ;Готовим размещение канала 3 out 10,al ;DMA ожидает данные
Канал 3 - адаптер накопителя на магнитном диске (НМД). Канал 3 являются каналом 8-битовой передачи данных. Размер страницы составляет 128 килобайт, поэтому при передаче данных с спользованием DMA не должна пересекаться граница 128 килобайт. 82h - регистр страниц канала 3
20. Программирование контроллера НГМД в MS DOS. • Напишите фрагмент программы, которая перехватывает обращения других программ к портам НГМД и записывает передаваемые в них значения в свой буфер. Ответ: Невозможно перехватить обращение к портам НГМД и других. 21. Компьютерная вирусология
Ответ: Вы не заразили свой компьютер, просто при обращении к дискете, директория ROOT копируется в ОЗУ. Теперь в ОЗУ наше системы находится содержимое файлов ROOT , и если там расположен известный вашему антивирусу вирус, то он его обнаружит. Пока вы не запустите на выполнение зараженный исполняемый файл, система не заразится, поэтому нахождение в ОЗУ вируса ещё не свидетельствует о его выполнении. Унесите дискету другу.
Ответ: Вероятнее всего вирус не ставит метки на повторное заражение и заражает уже зараженный файл несколько раз. Для прекращения этого дурдома необходимо прогонят антивирус до тех пор пока на винчестере не останется ни одного зараженного файла.
Ответ: Как и предыдущий вопрос.
Ответ: Алгоритм лечения: 1) Прочитать 2 байта ( 2 и 3) зараженного файла в переменную Offset 1. 2) Перейти по смещению Offset 1+ FD (253) зараженного файла 3) Прочитать 3 байта в переменную right _ head 4) Обрезать файл по смещению Offset 1+2 5) Записать в начало файла 3 байта переменной right _ head
1) Компьютер поражен вирусом, прицепляющимся к . EXE программам. Вам представлены дампы одной из программ ДО и ПОСЛЕ заражения. Предложите алгоритм программы-лечилки для удаления вируса с компьютера.
Ответ: Будем считать, что мы проверили несколько здоровых и заражённых программ и установили, что тело вируса имеет постоянный размер. В связи с такими заключениями будем считать конец зараженного файла, как сектор заражённой программы, который у здоровой бал последним.
Алгоритм: • Перейдем на конец зараженного файла – 57б • Прочитаем 22 байта в переменную right _ head • Перейдем на 20 байт от начала и прочитаем 2 слова в 2-е переменных TruncIP и TruncCS • Запишем в начало файла right _ head • Перейдём по сегмент смещению TruncCS : TruncIP и обрежем файл.
99) Процесс загрузки операционной системыПри включении питания компьютера управление передается базовой системе ввода/вывода, BIOS.Она выполняет проверку аппаратных узлов компьютера, формирует начальную часть таблицы векторов прерываний, инициализирует устройства и начинает процесс загрузки операционной системы. Загрузка начинается с того, что BIOS делает попытку прочитать самый первый сектор дискеты, вставленной в дисковод А: (на загрузочной дискете этот сектор содержит загрузчик операционной системы). Если в дисковод вставлена системная дискета, с нее считывается загрузчик и ему передается управление. Если дискета не системная, т.е. не содержит загрузочной записи, на экран выдается сообщение с просьбой заменить дискету. Если же дискеты в дисководе А: вообще нет, то BIOS читает основную загрузочную запись диска С: (Master Boot Record). Обычно это самый первый сектор на диске. Управление передается загрузчику, который находится в этом секторе. Загрузчик анализирует содержимое таблицы разделов (она также находится в этом секторе), выбирает активный раздел и читает загрузочную запись этого раздела. Загрузочная запись активного раздела (Boot Record) аналогична загрузочной записи, находящейся в первом секторе системной дискеты. Загрузочная запись активного раздела считывает с диска файлы IO.SYS и MSDOS.SYS (именно в этом порядке). Затем считываются и загружаются резидентные драйверы. Начинается формирование связанного списка драйверов устройств. Анализируется содержимое файла CONFIG.SYS, загружаются описанные в этом файле драйверы. Сначала загружаются драйверы, описанные параметром DEVICE, затем (только в MS-DOS версии 4.х и 5.0) резидентные программы, указанные операторами INSTALL. После этого считывается командный процессор и ему передается управление. Командный процессор состоит из трех частей - резидентной, инициализирующей и транзитной. Первой загружается резидентная часть. Она обрабатывает прерывания INT 22H, INT 23H, INT 24H, управляет загрузкой транзитной части. Эта часть командного процессора обрабатывает ошибки MS-DOS и выдает запрос пользователю о действиях при обнаружении ошибок. Инициализирующая часть используется только в процессе загрузки операционной системы. Она определяет начальный адрес, по которому будет загружаться пользовательская программа и инициализирует выполнение файла AUTOEXEC.BAT. Транзитная часть командного процессора располагается в старших адресах памяти. В этой части находятся обработчики внутренних команд MS-DOS и интерпретатор командных файлов с расширением имени .BAT. Транзитная часть выдает системное приглашение (например, А:\> ), ожидает ввода команды оператора с клавиатуры или из пакетного файла и организует их выполнение. После загрузки командного процессора и выполнения начальных процедур, перечисленных в файле AUTOEXEC.BAT, подготовка системы к работе завершается. Исходный текст драйвера: .MODEL tiny.CODE ; Драйвер состоит из одного ; сегмента кода org 0 ; Эта строка может отсутствовать include sysp.inc ;======================================================== simple PROC far ; Драйвер - это FAR-процедура ;======================================================== E_O_P: ;Метка конца программы, ; Заголовок драйвера dd 0ffffffffh ;адрес следующего драйвера ;======================================================== ; Программа стратегии dev_strategy: ; Здесь запоминается адрес заголовка запроса req_seg dw ? ;======================================================== ;Обработчик прерывания dev_interrupt: ; Устанавливаем ES:BX на заголовок запроса mov ax,cs:req_seg ; Получаем код команды из заголовка запроса и умножаем mov al,es:[bx]+2 sub ah,ah ; Обнуляем AH functions LABEL WORD ; Таблица функций dw initialize ; Выход из драйвера, если функция не поддерживается check_media: or es:word ptr [bx]+3,8103h ;======================================================== quit: ;======================================================== ; Процедура выводит на экран строку dpc proc near push si dpc_loop: end_dpc: dpc endp ;======================================================== hello db 13,10,'+¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬+' ;======================================================== initialize: lea ax,E_O_P ;смещение конца программы в AX ; Стираем экран mov dh,18h xor cx,cx ; Устанавливаем курсор в левый верхний угол экрана mov bh,0 ; Выводим сообщение mov ax,cs ; Ожидаем нажатия на любую клавишу mov ax,0 jmp quit simple ENDP END simple Структура памяти ПК класса XT АТ |