Нижегородский Государственный Технический Университет им. Р.Е. Алексеева Лабораторная работа№2 по дисциплине «Системное программное обеспечение» Тема: Конфигурирование и командный язык ОС реального режима Выполнил: студент 10-В-1 Сидоренко О.О. Проверил: Викулова Е. Н. Нижний Новгород 2012 г. Цель работы 1. Изучить состав и свойства ОС реального режима, получить информацию о распределении оперативной памяти, резидентных программах и драйверах 2. Изучить средства эмуляции DOS с использованием виртуальных DOS-машин (VDMs, virtual DOS machines). 3. Изучить команды конфигурирования (device, files, buffers, dos=high,umb...). Рассмотреть встроенные системные файлы сonfig.nt, autoexec.nt. 4. Создать свой вариант окружения для консольного приложения. 5. Создать загружаемый системный диск (или USB flash) с собственным вариантом конфигурации : - записать на диск основные системные файлы; - выбрать и записать на диск загружаемые драйверы и утилиты командной строки, необходимые для работы; - создать файлы CONFIG.SYS и AUTOEXEC.BAT. (примерный состав файлов - см. Приложение 1) 6. С помощью программы BIOS Setup изменить параметр, определяющий первое загрузочное устройство (1st Boot Device) 7. Выполнить загрузку с системного диска. Составить отчет о конфигурации. 8. Ознакомиться с распределением памяти (команда mem) 9. Изучить общие свойства командных процессоров cmd.exe и command.com. Изучить состав команд командного процессора. Продемонстрировать выполнение внутренних и внешних команд (примеры некоторых команд см. в приложениях 2,3) 10. Изучить и опробовать команды управления переменными окружения (set, path, pushd, fc и др.) 11. Изучить и опробовать команды конфигурирования и управления процессами (systeminfo, start, tasklist, taskkill, subst, mode...) 12. Изучить возможности перенаправления ввода-вывода (process>file, process>>file, file<process, process1| process2|…| processN) 13. Выполнить обработку текстовых файлов с использованием фильтров (more, sort, find) 14. Изучить команды для командных файлов и создать командный файл (с передачей параметров %1, %2, …, использованием команд call, if, for, goto, проверкой кодов возврата errorlevel). 15. Написать резидентную программу. Программа должна перехватывать прерывание, иметь проверки, для предотвращения повторной установки, возвращать управление стандартному обработчику. 2 Ход работы 1. 3 2. DOSBox v0.72 Возможные настройки эмулятора: [sdl] # fullscreen -- Запускать DosBox в полноэкранном режиме. # fulldouble -- Использовать двойную буферизацию в полноэкранном режиме. # fullresolution -- Указывает, какое разрешение будет использоваться в полноэкранном режиме. # Может быть: original или некое фиксированное (например, 1024x768). # windowresolution -- Растягивать окно DosBox на указанный размер (ТОЛЬКО В ТОМ СЛУЧАЕ, если устройства вывода поддерживает аппаратное масштабирование). # output -- Способ вывода изображения: surface,overlay,opengl,openglnb,ddraw. # autolock -- Курсор мыши автоматически захватывается, если вы щелкните на окне DosBox. # sensitiviy -- Чувствительность мыши. # waitonerror -- Ждать, перед тем, как закрыть консоль, если DosBox вывел ошибку. # priority -- Уровни приоритета процесса DosBox: lowest,lower,normal,higher,highest,pause (только для "не в фокусе"). # mapperfile -- Файл, используемый для сохранения/загрузки параметров клавиш/событий. # usescancodes -- Избегать использования symkeys. Может не работать на некоторых операционных системах. Информация, полученная с программы 3. 4. 4 5. 6. 7. 8. 9. 10. 5 11. 12. 6 13. 7 14. Вид решения: Код решения: @echo off if "%1"=="" ( echo "hello %username%, I'm on you computer and insert you mood: /h (appy) /b (oring)" goto finish) if "%1"=="/h" goto happy if "%1"=="/b" goto boring :happy type h.sys goto finish :boring call \LINE\Lb2_start.bat Ping -n 1 192.168.1.2>Nul If "%ERRORLEVEL%"=="1" (Echo No connect in 192.168.1.2) :finish set a=0 set sum=0 echo Also I can add more numbers. But I'm lazy and that's the sum of numbers from zero to 156: for /L %%a in (0,1,156) do set /A sum=sum+%%a echo %sum% pause 15. 8 Вид решения: Код решения: CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h start: jmp hook;на перехват прерывания I_10h proc cmp ah,0Ah ;функция 0Ah? je fnc_0ah ;на метку fnc_0ah jmp dword ptr cs:[Vect_10h];прейдем на оригинальный обработчик 10h. fnc_0ah: push ds ;Сохраним регистры push dx push ax push bx push cx mov al,'G' mov cx,5 pushf call dword ptr cs:[Vect_10h] pop cx pop bx pop ax pop dx pop ds iret ;Восстановим использованные регистры ;Продолжим работу Vect_10h dd ?;оригинальный адрес обработчика 10h I_10h endp hook: mov mov int mov mov ah,35h ;номер функции, позволяет получить вектор al,10h ;номер прерывания, вектор которого нужно получить 21h ;в ES:BX адрес 10h прерывания word ptr Vect_10h,bx word ptr Vect_10h+2,es mov ax,2510h ;замена вектора mov dx,offset I_10h;DX должен указывать обработчик I_10h) int 21h mov dx,offset hook резидентной пограммы int 27h ;последний байт в памяти оставленной для CSEG ends end start Код теста: CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h Start: mov ah,0Ah mov al,'2' int 10h int 20h CSEG ends end Start 9