Курсовая работа: КП - мониторинг файлов
Описание
Характеристики курсовой работы
Список файлов
- КП - мониторинг файлов
- anka
- 6sem-1.asm 12,51 Kb
- 6sem-2.asm 12,28 Kb
- FOP.LST 3,3 Kb
- FOP2.LST 3,32 Kb
- LAS.LST 30,92 Kb
- LAST.LST 30,64 Kb
- LOG.TXT 132 b
- LOG1.TXT 84 b
- LOG1W.TXT 88 b
- LOGW.TXT 134 b
- MYFIL.TXT 15 b
- NEW.LST 30,23 Kb
- NEW1.LST 33,66 Kb
- NEW2.LST 31,56 Kb
- OP.ASM 10,6 Kb
- OP.LST 27,86 Kb
- OPCL.ASM 11,22 Kb
- OPCL.LST 27,3 Kb
- OPEN.ASM 10,57 Kb
- OPEN.LST 27,82 Kb
- UNLDTSR.LST 3,18 Kb
- UNLDTSR.asm 1,29 Kb
- code
- opcl.asm 12,21 Kb
- documentation
- Блок схема.vsd 229,5 Kb
- Модульная структура.vsd 126 Kb
- Описание применения.doc 45 Kb
- Программа_и_Методика_Испытаний.doc 53,5 Kb
- Схема взаимодействия с аппаратурой.vsd 122 Kb
- Текст программы.doc 159 Kb
- Техническое Описание.doc 82,5 Kb
- руководство пользователя.doc 31 Kb
- руководство системного программиста.doc 41 Kb
- техническое задание.doc 49,5 Kb
- fop.asm 1,06 Kb
- fop2.asm 1,06 Kb
- fop2.txt 1,06 Kb
- kurs.asm 10,57 Kb
- kurs1.asm 11,22 Kb
- las.asm 12,5 Kb
- last.asm 12,45 Kb
- new.asm 12,28 Kb
- new1.asm 13,47 Kb
- new2.asm 12,85 Kb
- new2.txt 12,69 Kb
- new3.asm 12,29 Kb
- tmp
›››‡
ഊ›‡ T
ഊ‡ ഊ‡ T
›››‡
Я люблю жизнь
cr=13
lf=10
code segment
assume CS:code, DS:code
org 100h
start:
;mov DX, offset newfile; Адрес имени нового файла
;call newf; Вызов функции создания нового файла
mov AH, 3Dh
mov AL, 2
mov DX, offset newfile
int 21h
mov handle, AX
mov AH, 42h; Функция установки указателя
mov AL, 02; От конца файла
mov BX, handle
mov CX, 0;Старшая половина указателя
mov DX, 0;Младшая половина указателя
int 21h
;Допишем новую строку
mov AH, 40h
mov BX, handle
mov CX, stringln
mov DX, offset string
int 21h
;Закрытие файла
mov AH, 3Eh
mov BX, handle
int 21h
;------------------------------
; Процедура создания файла, адрес имени файла в DX
;------------------------------
newf proc near
mov AH, 3ch; Функция создания файла
mov CX, 0; Без атрибутов
int 21h
ret
newf endp
;--------------------------------------- -
; DATA
;------------------------------
newfile db 'MYFIL.TXT',0
handledw?
stringdb'Я люблю жизнь',cr,lf
stringln equ$-string
;----exit----
mov AX, 4c00h
int 21h
code ends
end start
textsegment'code'
assumeCS:text, DS:text
org100h
main proc far ;Главная процедура
jmpinit
;--------------------------------------- -------------------------
;//////////Резидентный модуль////////////////////////////////// //
;--------------------------------------- --------------------------
;Поля для резидентной части программы
old_2Dhdd0
old_21hdd0
MesCRLFdb10,13,0
MesNew db 10, 13, 'Attentionnnnn! File was opened: ',0
mesNewlnequ$-MesNew
MesCl db 'Attention! The file was closed: ',0
MesCllnequ$-MesCl
;Резидентная секция программы
;--------------------------------------- ------------------
; Процедура обработчика мультиплексорного прерывания
;--------------------------------------- -------------------
new_2Dhprocfar;Обработчик мультиплексного прерывания
pushf
pushDS
pushES
pushCS;DS:=CS
popDS
cmpAH,0C8h;Наша фукция прерывания 2Dh?
jneout_2Dh
cmpAL,00h;Подфунция проверки на повторную установку
jeinsert
cmpAL,01h;Подфункция выгрузки
jeuninstall
jmpshort out_2Dh;Неизвестна подфункция.На выход.
insert:
movAL,0FFh;Программа уже установлена
popES
popDS
popf
iret
out_2Dh:
popES
popDS
popf
jmpold_2Dh
uninstall:;Выгрузим программу
;Восстановим вектор мультиплексного прерывания 2Fh
movAH,25h;Функция заполнения вектора
movAL,2Dh;Номер вектора
ldsDX,CS:old_2Dh
int21h
;Восстановим вектор прерывания DOS
movAH,25h;Функция заполнения вектора
movAL,21h;Номер вектора
ldsDX,CS:old_21h
int21h
;Получим из PSP адрес собственного окружения и восстановим его
movES,CS:2Ch;в ES адрес окружения из PSP
movAH,49h;Фукция освобождения памяти
int21h
;Выгрузим саму программу
pushCS
popES
movAH,49h;Фукция освобождения памяти
int21h
movAL,99h;Код успешной выгрузки
popES
popDS
popf
iret
new_2Dhendp
;--------------------------------------- ----------------------
; обработчик прерывания 21h
;--------------------------------------- ----------------------
new_21hprocfar;Обработчик прерывания DOS
;Адрес строки имени файла в DS:DX. Она завршена 0
pushf
pushDS
pushAX
pushES
pushDX
pushDS;ES:=старый DS
popES
pushCS;DS:=CS
popDS
sti;Разрешение более приоритетных прерываний
cmpAH, 3Dh;Открытие файла
jeNew_3Dh
cmpAH, 3eh;Закрытие файла
jeNew_3eh
Finally:
popDX
popES
popAX
popDS
popf
jmpdword ptr cs:old_21H
iret
New_3Dh:;Функция открытия файла
callCreateFile
jmpFinally
New_3eh:
Call DeleteFile ; Функция закрытия файла (описателя)
jmpFinally
New_6Ch:
movDX, SI;Имя файла в SI
callCreateFile
popDX
jmpFinally
new_21hendp
;--------------------------------------- ------------------
; Процедура сообщения об открытии файла
;--------------------------------------- -------------------
CreateFileproc;Процедура сообщения о создании файла
;Адрес строки имени файла в DS:DX. Она завршена 0
pushAX
pushDX
pushBX
pushES;DS:=старый DS
popDS
mov opclfile, DX
push CS
pop DS
cmp fhandle, 1;проверяем флаг открытого файла
je nex
mov fhandle, 1;устанавливаем флаг открытого файла
mov AH, 3Dh
mov AL, 2
mov DX, offset newfile
int 21h
mov handle, AX
nex:
mov AH, 42h; Функция установки указателя
mov AL, 02; От конца файла
mov BX, handle
mov CX, 0;Старшая половина указателя
mov DX, 0;Младшая половина указателя
int 21h
;Допишем новую строку
mov AH, 40h
mov BX, handle
mov CX, mesnewln
lea DX, mesnew
int 21h
mov AH, 40h
mov BX, handle
mov CX, 10;длина имени файла
push ES
pop DS
mov DX, opclfile
int 21h
;Закрытие файла
;mov AH, 3Eh
;mov BX, handle
;mov fhandle, 0
;int 21h
popBX
popDX
popAX
ret
CreateFileendp
;--------------------------------------- ------------------
; Процедура сообщения о закрытии файла
;--------------------------------------- ------------------
DeleteFileproc
;Адрес строки имени файла в DS:DX. Она завершена 0
pushAX
pushDX
pushBX
pushES;DS:=старый DS
popDS
mov opclfile, DX
push CS
pop DS
mov AH, 42h; Функция установки указателя
mov AL, 02; От конца файла
mov BX, handle
mov CX, 0;Старшая половина указателя
mov DX, 0;Младшая половина указателя
int 21h
;Допишем новую строку
mov AH, 40h
mov BX, handle
mov CX, mesClln
lea DX, mesCl
int 21h
mov AH, 40h
mov BX, handle
mov CX, 10;длина имени файла
push ES
pop DS
mov DX, opclfile
int 21h
cmp fhandle, 0
je nex1
;Закрытие файла
mov AH, 3Eh
mov BX, handle
mov fhandle, 0
int 21h
nex1:
popBX
popDX
popAX
ret
DeleteFileendp
;--------------------------------------- -----------------------
; Печать строки через функции BIOS
;--------------------------------------- -----------------------
PrintStrproc;Процедура печати строки через BIOS
;Вход: смещение строки в BX
pushAX
pushDI
pushBX
movAH,0Eh;Функция вывода символа
cycl:
cmp[BX],byte ptr 0;Сравним с 0
jeexit
movAL,[BX];Символ
movDI, BX;Сохраняем адрес строки в DI
movCX,1
int10h
movBX, DI;Восстанавливаем адрес строки из DI
incBX
jmpcycl
exit:
popBX
popDI
popAX
ret
PrintStrendp
;--------------------------------------- -----------------------
; Перевод строки
;--------------------------------------- -----------------------
CRLFproc;Процедура перевода строки
pushBX
leaBX, MesCRLF
callPrintStr
popBX
ret
CRLFendp
mainendp
ressize=$-main;Размер в байтах резидентной части
;--------------------------------------- ------------------------
; процедура инициализации
;--------------------------------------- ------------------------
initproc
callCmdLine;вызов процедуры обработки параметров
;Проверим установлена ли данная программа
movAH,0C8h;Наша функция прерывания 2Fh
movAL,00;Подфункция проверки установки
int2Dh
cmpAl,0FFh
jneNotInstalled;Программа не установлена.
jmpInstalled;Программа установлена.
;При наличии флага ее можно выгрузить
NotInstalled:
cmpUnloadFlag, 1;Если вызвана с параметрами - неверно
jneLoaded
Loaded:
;Действия по установке программы в памяти
callSaveOldVectors
callSetNewVectors
leaBX, MesLoaded
callPrintStr
;Оставим программу резидентной
movDX,(ressize+10Fh)/16;Размер в параграфах
movAX, 3100h;функция завершить и оставить в памяти
int21h
installed:
cmpUnloadFlag,1;Запрос на выгузку установлен?
jeunload;Да, не выгрузку
mov ax,4c01h ;Завешим программу обычным образом
int 21h;код завершения = 1
unload:
callCheckOther
;Прервем резидентную копию программы
movAH,0C8h;Наша функция прерывания 2Fh
movAL,01h;Подфункция прерывания
int2Dh
leaBX,MesUnloaded
callPrintStr
;Первая копия программы выгружена. Завершим и эту.
mov ax,4c00h;Завешим программу обычным образом
int 21h;код завершения = 0
initendp
;--------------------------------------- ---------------------
;
;--------------------------------------- ---------------------
CheckOtherproc
;Сохраним вектор мультиплексного прерывания 2Dh
movAH,35h;Функция получения вектора
movAL,2Dh;Номер вектора
int21h
movword ptr temp_2Dh,BX ;Сохраним старое IP
Начать зарабатывать