Вопросы и ответы по ОС реального режима (DOS) Часть 2
Добавил: | DMT | ||||||||||||||||||||||||||||||
Дата создания: | 19 июня 2008, 0:25 | ||||||||||||||||||||||||||||||
Дата обновления: | 19 июня 2008, 0:29 | ||||||||||||||||||||||||||||||
Просмотров: | 10967 последний сегодня, 10:04 | ||||||||||||||||||||||||||||||
Комментариев: | 0 | ||||||||||||||||||||||||||||||
9. TSR программы: структура, порядок написания и отладки. • Вы разрабатываете TSR программу, которая непрерывно находится в памяти и к которой время от времени должны обращаться запускаемые в MS DOS приложения. Составьте блок-схему алгоритма работы модуля TSR программы, который бы отвечал интересующимся приложениям на запросы: • какой адрес буфера данных в TSR программе? • сколько времени “я” уже отработала? • есть ли для “меня” какие-либо указания?
Ответ: Алгоритм реализации : • модуль установки программы в память; • модуль предотвращения повторной установки программы в память; • модуль проверки команд (команды, их номера передаются прерыванию в регистре al ) • модуль расчёта и вывода буфера данных а регистры es : bx • модуль расчёта и вывода времени работы TSR программы в регистры ax , bx , dx , cx • модуль активизации и вывода на экран сообщения; • модуль выгрузки программы из памяти.
• Составьте блок-схему работы TSR программы MS DOS, решающей
следующую задачу: модуль находится в памяти и контролирует запуск программ. Как
только запускается программа SECRET.EXE начинается запоминание кодов всех
клавиш, нажимаемых пользователем на клавиатуре. После завершения сеанса работы
программы SEKRET.EXE, запомненные коды клавиш записываются в файл KEYBOARD.DAT.
10) Драйверы MS DOS: структура, порядок взаимодействия с MS DOS, порядок написания и отладки. 6) Напишите процедуру, которая возвращает число (int) равное количеству драйверов, загруженных в память ПЭВМ. Ответ: mov count_drv,1 mov ah, 9h ; Выводим заголовок mov dx, OFFSET msg int 21h
mov ah,52h ; Получаем адрес первого int 21h ; драйвера в цепочке add bx,22h ; es:bx - адрес первого драйвера
dr_loop: inc count_drv cmp WORD PTR es:[bx+2], 0ffffh ; последний ? jz end_of_driver_list cmp WORD PTR es:[bx], 0ffffh jz end_of_driver_list mov ax,es:[bx] ; получаем адрес следующего mov cx,es:[bx+2] ; драйвера mov bx,ax mov es,cx jmp dr_loop end_of_driver_list: mov ax, count_drv Подпрограмма передаст количество драйверов в AX . • Составьте блок-схему программного модуля, который, минуя операционную систему MS DOS, обращался бы к драйверу с именем SD00XXX и запускал его на выполнение чтения данных с устройства. Заголовок драйвера :
Приведем формат заголовка запроса:
Ответ :
• Вы пишете драйвер в MS DOS. При выполнении каждой команды, полученной от MS DOS, драйвер должен выдавать размер области данных, передаваемых драйверу операционной системой. Приведите ФРАГМЕНТ программы, выполняющей данное действие. Где в драйвере должен располагаться данный фрагмент? Ответ : mov es : word ptr [ bx ]+3,10 ; Status – наша команда 10, необязательно mov al, es:byte ptr [bx] sub al,13 mov es : byte ptr [ bx ]+5, al ; Передадим в Зарезервированную часть запроса размер области данных, передаваемых драйверу операционной системой Этот фрагмент должен располагаться в обработке прерывания драйвера, после каждой процедуры обработки команды.• Драйверы MS DOS: характеристика стандартных драйверов по управлению устройствами в MS DOS. • В MS DOS портом LPT управляет стандартный драйвер, загружаемый при старте системы из BIOS. Вы достали новый драйвер (файл HPLPT.SYS) который позволяет присоединять к ПЭВМ в MS DOS современные лазерные принтеры. Какую запись надо сделать в файле Config.sys, чтобы стандартный драйвер был заменен Вашим новым драйверм? Ответ: device=[d:][path] HPLPT.SYS
12. Клавиатура: порядок взаимодействия с MS DOS. Порядок программирования контроллера клавиатуры. 13) При работе Вашей программы надо запретить пользователю перезапуск компьютера по Ctrl+Alt+Del. Напишите фрагмент программы, реализующий этот запрет.
Ответ: int_09h: push ax push es in al ,60 h ; Скан код клавиши из PA cmp al,53h jne not_press mov ah,12h int 16h and ah,00001111b; 0b = Левый Ctrl, 1b= Левый Alt, 2b= Правый Ctrl, 3b= Правый Alt. jnz not_press pop es pop ax iret not_press: pop es in al,61h ; Ввод порта PB mov ah,al or ah ,80 h ; Установить бит подтверждения ввода out 61h,al xchg ah , al out 61 h , al ; Вывод старого значения PB mov al ,20 h ; Послать сигнал EOI out 20h,al; контроллеру прерываний pop ax iret
14) Что происходит в приведенном ниже фрагменте программы? Дайте не формальные пояснения к каждой строке: Ответ: # include < stdio . h > void main(void); void main(void) { int i; // Посылаем процессору клавиатуры // команду управления светодиодами outp(0x60,0xed); // Перед посылкой второго байта команды // выполняем небольшую задержку for(i=0; i<4000; i++); // Выводим второй байт команды, // младшие три бита которого определяют // состояние светодиодов на лицевой панели // клавиатуры. outp(0x60,7); // Ожидаем нажатия на любую клавишу. getch(); // Выключаем все светодиоды. outp(0x60,0xed); for(i=0; i<4000; i++); outp(0x60,0); exit(0); }15) Напишите на АССЕМБЛЕРЕ фрагмент программы, обеспечивающей сброс буфера клавиатуры. Ответ: a) mov ax,0c00h int 21h b) mov ax, 0000h mov es,ax mov bx, 0480h mov ax,[es:bx] mov bx, 0482h mov [es:bx],ax
16) Напишите фрагмент программы
, определяющей , нажаты ли
пользователем клавиши :
Ответ: proc Spec_keys_press near mov bx,01 mov ah,12h int 16h and al,00000010b jz shift_press jmp end_proc shift_press: and ah,00110001b; 0b = Левый Ctrl, 4b = Scroll Lock, 5b = Num Lock jz other_press jmp end_proc other_press: mov bx,1 end_proc: ret endp
; Если клавиши LeftCntrl + RightShift + ScrollLock + NumLock нажаты , то функция передаёт в bx=1.
13. CMOS память ПЭВМ. Часы реального времени ПЭВМ. Порядок программирования.
Ответ: CMOS: #include <stdio.h> # include < stdlib . h > main() { // Эта строка будет записана в КМОП-память static char password[12] = ""; int i,j; for (i=0;i<12;i++) password[i]=0; printf ("\ n *Запись в CMOS \ n \ n "); for(i=0x34,j=0; i<0x40; i++,j++) { // Задаем адрес ячейки КМОП-памяти outp(0x70,i); // Выполняем запись в эту ячейку outp(0x71,password[j]); } }
Составьте подробный алгоритм работы программы, использующей БУДИЛЬНИК SETUP-а компьютера.
• Прочитать и сохранить обработчик прерывания int 4 Ah ( int 35 h ) • Определить свой обработчик прерывания int 4 Ah ( int 25 h ) • Установить байты будильника в CMOS памяти (1- секунды, 3 – минуты, 5- часы) в BCD формате (как вижу так пишу) • Выйти и остаться в памяти int 27 h
14. Программирование таймера ПЭВМ. 10) Ваша резидентная программа (выполняющая некоторые измерительные действия) должна вызываться 1000 раз в секунду. Предложите блок-схему всех функциональных блоков реализующих эту задачу без нарушения работы MS DOS.
Ответ: Замечание: часы обновляются каждые 1193180/65536 ( 18.2) тиков в секунду. Установка счётчика часов 1000 раз/сек. Mov cx,04h Mov dx, a9h Int 1ah
11) Напишите фрагмент программы, настраивающей таймер ПЭВМ на запуск некого внешнего программного модуля, снимающего значения амплитуды исследуемого сигнала, представленного на рисунке, для последующего построения его графика:
Ответ: Установка счётчика часов 100000 раз/сек. Mov cx,0h Mov dx,0 С h Int 1ah . . . New_1C Proc mov ax,cs mov ds,ax mov dx,offset cs: Name_com mov es,ax mov bx,offset cs: EPB _com mov AH , 4BH mov AL , 0 int 21hjmp cs:[Old_1С] ;и перейти по адресу старого обработчика ;прерывания 2F. Old_1С DD 0 ; это место под адрес старого обработчика преры- ;вания 2F. Name_com db ‘graphic.com',0 EPB _com db 16 DUP (0) New_1 С endp
15. Программирование контроллера порта последовательной передачи данных Через СОМ порт по протоколу: скорость передачи – 16000 Кбит/с контроль на четность – Да число стоповых бит – 2 число бит данных – 8 пришли девятибитные коды: 257 303 285 154 172 219 182 укажите, какие из этих кодов приняты портом с ошибками
Ответ: Для того, чтобы узнать какие коды приняты портом с ошибками, нужно перевести девятибитные коды в двоичные: 257 = 100000001 303 = 100101111 285 = 100011101 154 = 10011010 172 = 10101100 219 = 11011011 182 = 10110110. 285 182 приняты с ошибками, т.к. количество единиц нечётное |