Курсовой проект по системному программированию: программа удаления файлов с возможностью восстановления (ассемблер, MS-DOS)

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН
Казахский Национальный Технический Университет
имени Каныша Сатпаева
Кафедра вычислительной техники
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту
по дисциплине "Системное программирование"
Тема: «Удаление файлов с возможностью восстановление их»
Руководитель: Дмитриева М. В.
“__”2002г.
Нормоконтролер
“__”2002г.
Студент Оразханов Р. А.
Специальность 3704
Группа ЗБИ-00-2
Алматы 2003
ЗАДАНИЕ
Разработать программу, удаление файлов с возможностью восстановление их.
Руководитель проекта Дмитриева М. В.
Задание принял к исполнению студент Оразханов Р. А.
Дата "__"2002г.
Дата представления готового проекта к защите "___"
Содержание
Введение . . . 4
1. Описание структуры программы5
1. 1 Вывод интерфейса, поиск файлов в текущем директории и
вывод их на экран. …. . 5
- Управление курсором. …. . 7
- Описание блок - схемы алгоритма. . . 8
- Расчет времени работы программы. 10
- Руководство пользователя. . . . 12
- Руководство программиста. . . 12
Заключение. . . 14
Список литературы…. . . . ………. ………. 15
Приложение А - листинг программы. . ……. 16
Приложение Б - блок-схема алгоритма25
Введение
Язык ассемблера фактически представляет собой машинный язык (язык процессора), где коды команд заменены именами. Человек лучше ориентируется в именах, чем в числах, поэтому язык ассемблера проще для понимания, чем машинный язык. Кроме того, сами имена могут быть говорящими, например MOV (от MOVE - перемещать), ADD (прибавлять) и т. п., что дает дополнительные удобства. Другим упрощением языка ассемблера по отношению к машинному является использование меток вместо конкретных адресов. Это значительно упрощает работу, т. к. не нужно думать, по какому адресу расположена та или иная команда или данные. Вот два основных момента, которые определяют язык ассемблера и отличают его от машинного языка.
Большинство трансляторов с языка ассемблера работают в два прохода. При первом проходе транслятор составляет таблицу всех имен, встречающихся в программе, присваивая им соответствующее числовое значение (адрес) . Во втором проходе происходит кодирование программы - замена команд на их числовые коды с учетом значений из таблицы. В результате получается объектный модуль, в котором наряду с кодами команд содержится информация о глобальных переменных, которая далее используется редактором связей.
Прерывание по своему смыслу есть временное прекращение какого-то процесса. Команды INT и CALL реализуют программные прерывания. Они выполняются, когда приходит время выполнить соответствующую команду. После их выполнения программа продолжает работать с команды, стоящей за командой вызова прерывания, которые происходят, когда наступает некоторое событие, внешнее по отношению к программе. Это может быть сигнал по прошествию определенного промежутка времени, нажатие клавиши, переход принтера в состояние готовности, наступление некоторого события в микропроцессоре (деление на нуль, переполнение и т. п. ) и т. д. Соответственно, аппаратные прерывания, происходящие от внешних устройств, будем называть внешними, а аппаратные прерывания, происходящие от события в микропроцессоре - внутренними. Есть еще немаскируемое прерывания - NMI. Это прерывание невозможно запретить командой CLI.
1. Описание структуры программы.
Данная программа выполняет удаление файлов с возможностью восстановление их.
В данной программе использовались следующие процедуры:
1 Вывод интерфейса на экран
2 Поиск файлов и директориев и вывод их экран
3 Управление курсором
4 Вывод окна на экран для удаления файла
5 Вывод окна на экран для восстановления файла
6 Очистка экрана
7 Уборка курсора с экрана
8 Процедура вывода курсора на экран
1. 2 Вывод интерфейса, поиск файлов в текущем директории и
вывод их на экран.
Сначала выводится синее окно (синий фон, белые буквы) с тремя колонками. Синий фон выводится с помощью 06h функции int 10h прерывания, цвет фона задается в bl. Затем осуществляется поиск файлов в текущем директории с помощью функции 4eh (найти первый совпадающий файл) и 4fh (найти следующий совпадающий файл) int 21h-го прерывания. Для поиска можно применять обобщающие символы (*, ?) . А если вы не указали диск и путь, то файлы ищутся в текущем директории. DOS находит имя первого файла в оглавлении, которое совпадает с заданным именем и атрибутом, и помещает найденное имя и другую информацию в DTA, и начало имени в формате ASCIIZ строки находятся в DTA по адресу es:[80h+30] .
Вывод файлов на экран осуществляется с помощью функции 02h int 21h-го прерывания. В dl заносится в цикле один за другим имя файла из DTA, пока не встретится 0.
mov ah, 4eh
lea dx, Path ; Path db ‘*. *’, 0
mov cx, 10h ; искать файлы и директории
int 21h
next: mov ah, 4fh ; продолжать поиск
lea dx, Path
mov cx, 10h
int 21h
cmp ax, 18 ; если конец директория то выход
je ret0
test byte ptr es:[80h+21], 10h ; это файл
jnz Dir
cmp vost_f, 1
je d_Y
call Output ; процедура выводящая файл или директории на экран
inc Y
cmp Y, 20
je nx_kl
jmp next
1. 2 Управление курсором
Вывод курсора и гашение его осуществляется с помощью процедуры ReadWrite. Эта процедура работает следующим образом, мы задаем координаты str_ - строка stb_ - столбец, в bl заносится атрибут курсора (atrcur) . В теле процедуры используется последовательное считывание символов (8h int 10h) один за другим и затем записывание их только с другим атрибутом (9h int 10h) . В этой же процедуре сохраняется в форме ASCIIZ строки имя удаляемого или восстанавливаемого файла. Когда курсор выведен, начинает работу процедура ReadKey. Она ожидает нажатие клавиши (00h int 16h) и ASCII (Скан) код нажатой клавише заносится в al (ah) соответственно. Он сравнивается с помощью команды CMP и если ASCII (Скан) коды равны передается управление короткой метки. Процедура ReadKey как вы уже догадались, управляет курсором и если вы нажали клавишу F8 или F7 удаляет или восстанавливает файл соответственно. А если вы нажали клавишу ESC то осуществляется выход из программы.
READWRITE PROC
MOV CX, LenCur
MOV DH, str_ ; в строку str_
MOV DL, stb_ ; в столбец stb_
MOV AH, 2 ; установить курсор
INT 10h
RW: PUSH CX
MOV CX, 1
MOV AH, 8 ; читать символ
INT 10h
MOV AH, 9 ; писать символ
INT 10h
INC DL ; переходим к следующей позиции (stb_)
MOV AH, 2 ; передвинуть курсор
INT 10h
POP CX
LOOP RW
READWRITE ENDP
Включение курсора:
MOV BL, atrcur
CALL READWRITE
Выключение курсора:
MOV BL, atrfon
CALL READWRITE
А теперь подробней рассмотрим что происходит при нажатии клавиши F8. При нажатии клавиши F8 вызывается процедура Delwin которая выводит окно на экран и выбор, на удаление или отмены удаление файла. Если вы нажали кнопку «Удалить» то вызывается процедура Remove, которая перемещает файл в каталог Korzina. А «Отмена» как вы уже догадались, отменяет удаление. Если же вы нажали клавишу F7 вызывается процедура UnereaseWin которая выводит окно на экран с кнопками «Удалить», «Восстановить», «Отмена». Если вы нажали кнопку «Удалить» то файл удаляется безвозвратно, если же была нажата кнопка «Восстановить» вызывается процедура Unerease которая восстанавливает файл в тот же директории с которого была перемещена. Кнопка же «Отмена» отменяет восстановление.
2. Описание блок-схемы алгоритма.
Блок-схема алгоритма приведенная в приложении Б полностью описывает логику программы.
- 1. Начало
- 2. Соответствует процедуре Interface которая выводит интерфейс на экран (синий фон белая рамка)
- 3. Включает в себя две процедуры SearchFile и Output которые производят поиск файлов и выводит их на экран соответственно
- 4. Ожидает нажатие клавиши (процедура ReadKey) и управляет курсором
- 5. Если, нажата клавиша F8, то передается управление блоку 6, если нет то управление передается блоку 9 (проверка нажатие клавиши F7)
- 6. Если нажата кнопка «Удаление» то управление передается блоку 8 (перемещение файла в директорий Korzina), если нет, то управление передается блоку 7 (проверка нажатие кнопки «Отмена»)
- 7. Если нажата кнопка «Отмена» то перемещение отменяется и управление передается к блоку 2 (вывод интерфейса на экран), а если нет, то управление передается блоку 6 (проверка нажатие кнопки «Удалить»)
- 8. Перемещение файла в директорию Korzina и передача управление блоку 2 (вывод интерфейса на экран)
- 9. Если нажата клавиша F7, то управление передается блоку 10 (удаление без возможности восстановить их), а если нет, то управление передается блоку 15 (проверка нажатий клавиши ESC)
- 10. Если нажата кнопка «Удалить» то управление передается блоку 13 (удаление файла безвозвратно), а если нет, то управление передается блоку 11 (проверка нажатий кнопки «Восстановить»)
- 11. Если нажата кнопка «Восстановить» то управление передается блоку 14 (восстановление файла), а если нет, то управление передается блоку 12 (проверка нажатий кнопки «Отмена»)
- 12. Если нажата кнопка «Отмена» то управление передается блоку 2 (вывод интерфейса на экран), если нет, то управление передается блоку 10 (проверка нажатий кнопки «Удаление»)
- 13. Удаление файла безвозвратно
- 14. Восстановление файла (процедура Unerease)
- 15. Если нажата клавиша ESC, то передается управление блоку 16 (конец)
- 16. Конец
Расчет времени работы программы
Скорости выполнения команд для процессоров 8086 - P5 даны в тактах (когда говорят что тактовая частота процессора 100 MHz, это означает, что за секунду проходит 100 миллионов тактов) .
Операнды обозначаются следующим образом:
- im - непосредственный операнд;
- i8, i16 - непосредственный операнд указанного размера;
- r - любой регистр;
- r8 - AH, AL, BH, BL, DH, DL, CH, CL;
- r16 - AX, BX, CX, DX, BP, SP, SI, DI;
- sr - сегментный регистр;
- m - операнд в памете.
Расчитаем времени работы программы на компьютерах сроцессором Intel 80286, для этого подсчитаем количество команд в программе с помощью таблицы в которой описано время работы каждой команды.
В программе были использованы следующие команды:
Количество команды время
47 mov r8, i8 2
24 mov r16, i16 2
15 mov r, m 5
21 mov m, im 3
8 mov m, r 3
1 mov r, sr 2
4 mov sr, r 2
1 mov sr, m 5
20 INT i8 23
21 ret 11
3 sub r, im 3
1 sub m, im 7
5 push r 3
5 push m 5
1 push cs 3
5 cmp r, m 6
11 cmp r, im 3
3 cmp m, im 6
3 cmp m, r 7
29 jcc i8 (не вып. ) 3
29 jcc i8 (вып. ) 7
25 INC r 2
2 INC m 7
7 pop r 5
6 pop m 5
1 pop ds 5
14 loop i8 (не вып. ) 4
14 loop i8 (вып. ) 8
6 jmp near i8 7
4 jmp far im 11
1 shr r, cl 5
7 xor r, r 2
6 add r, im 3
2 add m, im 7
1 add m, r 7
3 lea r, m 3
28 call im (CG) 41
1 sub m, im 7
2 dec r 2
1 shl r, 1 2
1 test m, im 6
Складываем время всех комманд используемых в программе:
T = 47*2+24*2+15*5+21*3+8*3+1*2+4*2+1*5+20*23+21*11+3*3+
+1*7+5*3+5*5+1*3+5*6+11*3+3*6+3*7+29*3+29*7+25*2+
+2*7+7*5+6*5+1*5+14*4+14*8+6*7+4*11+1*5+7*2+6*3+2* * 7+ 1 * 7+3*3+28*41+1*7+2*2+1*2+1*6=3384
Получили время T=3384
4. Руководство пользователя
Для работы с программой необходимо иметь файл: kurs. exe Для запуска программы необходимо найти на диске файл с именем kurs. ехе и запустить файл на выполнение. При загрузке программы на экране появляется имена файлов текущего директория. Управление курсором при выборе файла осуществляется при помощи следующих клавиш: «стрелка вниз», «стрелка вверх», «F8» (удаление), «F7» (восстановление), «Esc» (выход) . При нажатии клавиши «F8» - экран окрашивается в синий цвет, выводятся файлы и директории текущего директория, в нижней части экрана появляются название клавиш:
«F8» - Удалить
«F7» - Восстановить
«ESC» - Выход
При нажатии клавиши «Esc» происходит выход из программы.
5. Руководство программиста
Для поиска файлов были использованы функции 4eh и 4fh int 21h, которые возвращает найденные файлы в DTA по адресу es:[80h+30], для анализа нажатия определенной клавиши была использована функция 0 int 16h. После опроса клавиатуры содержимое регистра AL сравнивается с ASCII-кодами нажатых клавиш, либо содержимое регистра АН сравнивается со скэн-кодами нажатых клавиш.
Данная программы, не привязана к ресурсам системы и способна работать на любом компьютере, начиная с самых слабых моделей и заканчивая самыми современными персональными компьютерами.
1. Компьютер, оснащенный процессором любым процессором
2. ОЗУ-4 МБ и выше
3. Монитор-любой
4. Объем свободного пространства на жестком диске - 400 Кб
5. ОС - DOS любой версии
Заключение
Применяя теоретические знания, полученные в курсе лекций по системному программированию, была разработана программа удаление файлов с возможностью восстановление их, вывод их имён на дисплей, управление курсором. Которая проста в использовании, не занимает много место в памяти, не требовательна к системным ресурсам.
СПИСОК ЛИТЕРАТУРЫ
1. Скэнлон Л. ПЭВМ IBM PC и ХТ. Программирование на языке Ассемблера. -М. : Радио и Связь, 1989.
2. Hортон П. Персональный компьютер фирмы IBM и операционная система MS-DOS. -М. : Радио и Связь, 1991.
3. Куцый А. П. Системное программирование. Методические указания к проведению лабораторных работ по курсу "Системное программирование", часть 1. - Алматы: КазНТУ, 1998.
4. Абель П. Язык Ассемблера для IBM PC и программирование. М. : Высшая школа, 1992.
Приложение А
. model small
. 386
. code
Path db '*. *', 0
fr_del db '“¤ «Ёвм д ©«:$'
Delete db ' “¤ «Ёвм $'
Cancel db ' Ћв¬Ґ $'
X db 1
Y db 2
Y1 db ?
stY db 5
stY1 db 2
Lencur dw 12
Lencur1 dw 0
LencurO dw 0
str_ db 2
stb_ db 1
str1 db 0
stb1 db 0
strO db 0
stbO db 0
atrcur db 0001b
atrfon db 000b
ten db b
atrbut db 01b
atrwin db 0b
file_name db 13 dup(0)
vfile_name db 13 dup(0)
vost_f db 0
buf db 2 dup(0)
buf_fname db 2 dup(?)
old_dir db 100 dup(?)
Korz db 'Korzina', 0
handle dw ?
size_ dw ?
Er1 db 'Cant open file$'
Er2 db 'Cant read file$'
Er3 db 'Cant delete file$'
Er4 db 'Cant create file$'
non_show db 0
_Esc db 0
_stY db ?
;
; PROCEDURES
;
;
Interface proc
;
mov ax, 0600h
mov bh, b
mov cx, 0
mov dx, 184fh
int 10h
mov ah, 06h
mov ch, 0
mov cl, 0
mov dh, 22
mov dl, 39
mov bh, 000b
int 10h
mov ah, 2
mov bh, 0
xor dx, dx
int 10h
mov ah, 09h
lea dx, panel
int 21h
ret
Interface endp
;
Delwin proc
;
mov al, str_
mov ah, stb_
push ax
mov bx, Lencur
push bx
mov al, stY
mov _stY, al
mov str_, 6
mov stb_, 5
mov Lencur, 34
mov bl, ten
loop_: call ReadWrite
inc str_
cmp str_, 14
je win
jmp loop_
win: mov ah, 06h
mov ch, 5
mov cl, 3
mov dh, 12
mov dl, 36
mov bh, 0b
int 10h
xor si, si
rm: mov ah, 02h
mov bh, 0
mov dh, stY
mov dl, 3
int 10h
ram: cmp stY, 13
je outf
mov ah, 02h
mov dl, del_form[si]
int 21h
inc si
cmp del_form[si], '$'
je ne_str
jmp ram
ne_str: inc stY
inc si
jmp rm
outf: mov ah, 02h
mov bh, 0
mov dh, 6
mov dl, 14
int 10h
push dx
mov ah, 09h
lea dx, fr_del
int 21h
pop dx
inc dh
mov ah, 02h
int 10h
xor si, si
ne_f: mov ah, 02h
mov dl, file_name[si]
int 21h
inc si
cmp si, 13
je button
jmp ne_f
button: mov ah, 02h
mov bh, 0
mov dh, 10
mov dl, 10
int 10h
push dx
mov ah, 09h
lea dx, Delete
int 21h
pop dx
mov dl, 22
mov ah, 02h
int 10h
mov ah, 09h
lea dx, Cancel
int 21h
mov Lencur, 9
mov bl, atrbut
mov str_, 10
mov stb_, 10
call ReadWrite
call Unviz
RedBut: mov ah, 00h
int 16h
cmp ah, 'K'
je Left
cmp ah, 'M'
je Right
cmp al, 13
je Enter_
cmp al, 27
je ret3
jmp RedBut
Left: cmp stb_, 10
je RedBut
mov str_, 10
mov stb_, 22
mov Lencur, 8
mov bl, atrwin
call ReadWrite
mov Lencur, 9
mov bl, atrbut
mov str_, 10
mov stb_, 10
call ReadWrite
call Unviz
jmp RedBut
Right: cmp stb_, 22
je RedBut
mov Lencur, 9
mov str_, 10
mov stb_, 10
mov bl, atrwin
call ReadWrite
mov Lencur, 8
mov bl, atrbut
mov str_, 10
mov stb_, 22
call ReadWrite
call Unviz
jmp RedBut
Enter_: cmp stb_, 22
je ret3
cmp stb_, 10
je Remov
ret3: mov al, _stY
mov stY, al
pop bx
mov Lencur, bx
pop ax
mov str_, al
mov stb_, ah
ret
Remov: call Remove
jmp ret3
Delwin endp
;
Remove proc
;
mov ah, 19h
int 21h
add al, 'A'
mov old_dir[0], al
mov old_dir[1], ':'
mov old_dir[2], '\'
mov ah, 47h
lea si, old_dir[3]
mov dl, 0
int 21h
mov ah, 3dh ; open file
lea dx, file_name
mov al, 0
int 21h
jc err1
mov handle, ax
mov ah, 42h
mov bx, handle
xor cx, cx
xor dx, dx
mov al, 2
int 21h
mov size_, ax
mov ah, 42h
mov bx, handle
xor cx, cx
xor dx, dx
mov al, 0
int 21h
mov ah, 3fh ; read file
mov bx, handle
lea dx, buf
mov cx, size_
jc err2
int 21h
mov ah, 3eh ; close file
mov bx, handle
int 21h
mov ah, 41h ; delete file
lea dx, file_name
int 21h
jc err3
mov ah, 39h ; create dir
lea dx, Korz
int 21h
mov ah, 3bh
lea dx, Korz
int 21h
mov ah, 3ch
lea dx, file_name
mov cx, 0
int 21h
jc err4
mov handle, ax
mov ah, 3dh ; open file
lea dx, file_name
mov al, 2
int 21h
mov ah, 40h
mov bx, handle
lea dx, buf
mov cx, size_
int 21h
mov ah, 3eh ; close file
mov bx, handle
int 21h
mov ah, 3bh
lea dx, old_dir
int 21h
ret5: ret
err1: mov ah, 02h
mov bh, 0
mov dh, 2
mov dl, 45
int 10h
mov ah, 09h
lea dx, Er1
int 21h
jmp ret5
... продолжение- Информатика
- Банковское дело
- Оценка бизнеса
- Бухгалтерское дело
- Валеология
- География
- Геология, Геофизика, Геодезия
- Религия
- Общая история
- Журналистика
- Таможенное дело
- История Казахстана
- Финансы
- Законодательство и Право, Криминалистика
- Маркетинг
- Культурология
- Медицина
- Менеджмент
- Нефть, Газ
- Искуство, музыка
- Педагогика
- Психология
- Страхование
- Налоги
- Политология
- Сертификация, стандартизация
- Социология, Демография
- Статистика
- Туризм
- Физика
- Философия
- Химия
- Делопроизводсто
- Экология, Охрана природы, Природопользование
- Экономика
- Литература
- Биология
- Мясо, молочно, вино-водочные продукты
- Земельный кадастр, Недвижимость
- Математика, Геометрия
- Государственное управление
- Архивное дело
- Полиграфия
- Горное дело
- Языковедение, Филология
- Исторические личности
- Автоматизация, Техника
- Экономическая география
- Международные отношения
- ОБЖ (Основы безопасности жизнедеятельности), Защита труда
