spo2_lab2x

advertisement
Нижегородский Государственный Технический Университет
им. Р.Е. Алексеева
Лабораторная работа№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
Download