Текст программы (КП - мониторинг файлов)
Описание файла
Файл "Текст программы" внутри архива находится в следующих папках: КП - мониторинг файлов, anka, documentation. Документ из архива "КП - мониторинг файлов", который расположен в категории "". Всё это находится в предмете "системное программирование" из 5 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "системное программирование" в общих файлах.
Онлайн просмотр документа "Текст программы"
Текст из документа "Текст программы"
16
Московский Государственный Технический Университет имени Н.Э. Баумана.
УТВЕРЖДАЮ
"___"__________2006 г.
_____________________
(Виноградова М.В.)
Программа "Регистратор открытия/закрытия файлов"
Текст программы
(тип документа)
Бумага формата А4
(вид носителя)
16
(количество листов)
ИСПОЛНИТЕЛЬ
" " 2006 г.
_____________________
(Зелинская А.Д.)
Москва – 2006
СОДЕРЖАНИЕ
1. opcl.lst 3
2. UNLDTSR.lst 15
1. opcl.lst
Turbo Assembler Version 4.1 24/12/06 12:26:45 Page 1
OPCL.asm
1 0000 text segment 'code'
2 assume CS:text, DS:text
3 org 100h
4 0100 main proc far ;Главная процедура
5 0100 E9 01E5 jmp init
6 ;----------------------------------------------------------------
7 ;//////////Резидентный модуль////////////////////////////////////
8 ;-----------------------------------------------------------------
9 ;Поля для резидентной части программы
10 0103 00000000 old_2Dh dd 0
11 0107 00000000 old_21h dd 0
12 010B 0A 0D 00 MesCRLF db 10,13,0
13 010E 0A 0D 41 74 74 65 6E+ MesNew db 10, 13, 'Attention! File was opened: ',0
14 74 69 6F 6E 21 20 46+
15 69 6C 65 20 77 61 73+
16 20 6F 70 65 6E 65 64+
17 3A 20 00
18 =001F mesNewln equ $-MesNew
19 012D 0A 0D 41 74 74 65 6E+ MesCl db 10, 13, 'Attention! The file was closed: ',0
20 74 69 6F 6E 21 20 54+
21 68 65 20 66 69 6C 65+
22 20 77 61 73 20 63 6C+
23 6F 73 65 64 3A 20 00
24 =0023 MesClln equ $-MesCl
25 0150 0A 0D 45 72 72 6F 72+ MesError db 10, 13, 'Error! Impossible to open file log.txt',0
26 21 20 49 6D 70 6F 73+
27 73 69 62 6C 65 20 74+
28 6F 20 6F 70 65 6E 20+
29 66 69 6C 65 20 6C 6F+
30 67 2E 74 78 74 00
31
32 ;Резидентная секция программы
33 ;---------------------------------------------------------
34 ; Процедура обработчика мультиплексорного прерывания
35 ;----------------------------------------------------------
36 0179 new_2Dh proc far ;Обработчик мультиплексного прерывания
37 0179 9C pushf
38 017A 1E push DS
39 017B 06 push ES
40
41 017C 0E push CS ;DS:=CS
42 017D 1F pop DS
43
44 017E 80 FC C8 cmp AH,0C8h ;Наша фукция прерывания 2Dh?
45 0181 75 10 jne out_2Dh
46 0183 3C 00 cmp AL,00h ;Подфунция проверки на повторную установку
47 0185 74 06 je insert
48 0187 3C 01 cmp AL,01h ;Подфункция выгрузки
49 0189 74 0F je uninstall
50 018B EB 06 jmp short out_2Dh ;Неизвестна подфункция.На выход.
51 018D insert:
52 018D B0 FF mov AL,0FFh ;Программа уже установлена
53 018F 07 pop ES
54 0190 1F pop DS
55 0191 9D popf
56 0192 CF iret
57 0193 out_2Dh:
Turbo Assembler Version 4.1 28/12/06 12:26:45 Page 2
OPCL.asm
58 0193 07 pop ES
59 0194 1F pop DS
60 0195 9D popf
61 0196 FF 2E 0103r jmp old_2Dh
62 019A uninstall: ;Выгрузим программу
63
64 ;Восстановим вектор мультиплексного прерывания 2Dh
65 019A B4 25 mov AH,25h ;Функция заполнения вектора
66 019C B0 2D mov AL,2Dh ;Номер вектора
67 019E 2E: C5 16 0103r lds DX,CS:old_2Dh
68 01A3 CD 21 int 21h
69 ;Восстановим вектор прерывания DOS
70 01A5 B4 25 mov AH,25h ;Функция заполнения вектора
71 01A7 B0 21 mov AL,21h ;Номер вектора
72 01A9 2E: C5 16 0107r lds DX,CS:old_21h
73 01AE CD 21 int 21h
74
75 ;Получим из PSP адрес собственного окружения и восстановим его
76 01B0 2E: 8E 06 002C mov ES,CS:2Ch ;в ES адрес окружения из PSP
77 01B5 B4 49 mov AH,49h ;Фукция освобождения памяти
78 01B7 CD 21 int 21h
79 ;Выгрузим саму программу
80 01B9 0E push CS
81 01BA 07 pop ES
82 01BB B4 49 mov AH,49h ;Фукция освобождения памяти
83 01BD CD 21 int 21h
84 01BF B0 99 mov AL,99h ;Код успешной выгрузки
85 01C1 07 pop ES
86 01C2 1F pop DS
87 01C3 9D popf
88 01C4 CF iret
89 01C5 new_2Dh endp
90 ;-------------------------------------------------------------
91 ; обработчик прерывания 21h
92 ;-------------------------------------------------------------
93 01C5 new_21h proc far ;Обработчик прерывания DOS
94 ;Адрес строки имени файла в DS:DX. Она завршена 0
95 01C5 9C pushf
96 01C6 1E push DS
97 01C7 50 push AX
98 01C8 06 push ES
99 01C9 52 push DX
100
101 01CA 1E push DS ;ES:=старый DS
102 01CB 07 pop ES
103
104 01CC 0E push CS ;DS:=CS
105 01CD 1F pop DS
106
107 01CE 80 FC 3D cmp AH, 3Dh ;Открытие файла
108 01D1 74 10 je New_3Dh
109 01D3 80 FC 3E cmp AH, 3eh ;Закрытие файла
110 01D6 74 10 je New_3eh
111
112
113 01D8 Finally:
114 01D8 5A pop DX
Turbo Assembler Version 4.1 28/12/06 12:26:45 Page 3
OPCL.asm
115 01D9 07 pop ES
116 01DA 58 pop AX
117 01DB 1F pop DS
118 01DC 9D popf
119 01DD 2E: FF 2E 0107r jmp dword ptr cs:old_21H
120 01E2 CF iret
121 01E3 New_3Dh: ;Функция открытия файла
122 01E3 E8 0007 call OpenFile
123 01E6 EB F0 jmp Finally
124 01E8 New_3eh:
125 01E8 E8 006F Call CloseFile ; Функция закрытия файла (описателя)
126 01EB EB EB jmp Finally
127
128
129 01ED new_21h endp
130 ;---------------------------------------------------------
131 ; Процедура сообщения об открытии файла
132 ;----------------------------------------------------------
133 01ED OpenFile proc ;Процедура сообщения о создании файла
134 ;Адрес строки имени файла в DS:DX. Она завршена 0
135 01ED 50 push AX
136 01EE 52 push DX
137 01EF 53 push BX
138
139 01F0 06 push ES ;DS:=старый DS
140 01F1 1F pop DS
141 01F2 89 16 05D8r mov opclfile, DX
142
143 01F6 0E push CS
144 01F7 1F pop DS
145
146 01F8 B4 3D mov AH, 3Dh ;функция открытия файла
147 01FA B0 01 mov AL, 1 ;режим доступа - запись
148 01FC BA 05D0r mov DX, offset newfile ;адрес спецификации файла
149 01FF 9C pushf
150 0200 2E: FF 1E 0107r call CS:old_21h
151 0205 A3 05CCr mov handle, AX ;запоминаем дескриптор
152 0208 73 09 jnc nex
153 020A BB 0150r lea BX, MesError
154 020D E8 00B3 call PrintStr
155 0210 E9 00AC jmp ExitCloseFile
156
157
158 0213 nex:
159 0213 B4 42 mov AH, 42h ; Функция установки указателя
160 0215 B0 02 mov AL, 02 ; От конца файла
161 0217 8B 1E 05CCr mov BX, handle
162 021B B9 0000 mov CX, 0 ;Старшая половина указателя
163 021E BA 0000 mov DX, 0 ;Младшая половина указателя
164 0221 CD 21 int 21h
165 ;Допишем новую строку
166 0223 B4 40 mov AH, 40h
167 0225 8B 1E 05CCr mov BX, handle
168 0229 B9 001F mov CX, mesnewln
169 022C BA 010Er lea DX, mesnew
170 022F 9C pushf
171 0230 2E: FF 1E 0107r call CS:old_21h
Turbo Assembler Version 4.1 28/12/06 12:26:45 Page 4
OPCL.asm
172 0235 B4 40 mov AH, 40h
173 0237 8B 1E 05CCr mov BX, handle
174 023B B9 000A mov CX, 10 ;длина имени файла
175 023E 06 push ES
176 023F 1F pop DS
177 0240 8B 16 05D8r mov DX, opclfile
178 0244 9C pushf
179 0245 2E: FF 1E 0107r call CS:old_21h
180 ;Закрытие файла
181 024A B4 3E mov AH, 3Eh
182 024C 8B 1E 05CCr mov BX, handle
183 0250 9C pushf
184 0251 2E: FF 1E 0107r call CS:old_21h
185 0256 ExitOpenFile:
186 0256 5B pop BX
187 0257 5A pop DX
188 0258 58 pop AX
189 0259 C3 ret
190 025A OpenFile endp
191 ;---------------------------------------------------------
192 ; Процедура сообщения о закрытии файла
193 ;---------------------------------------------------------
194 025A CloseFile proc
195 ;Адрес строки имени файла в DS:DX. Она +
196 завершена 0
197 025A 50 push AX
198 025B 52 push DX
199 025C 53 push BX
200
201 025D 06 push ES ;DS:=старый DS
202 025E 1F pop DS
203
204 025F 0E push CS
205 0260 1F pop DS
206
207 0261 B4 3D mov AH, 3Dh ;функция открытия файла
208 0263 B0 01 mov AL, 1 ;режим доступа - запись
209 0265 BA 05D0r mov DX, offset newfile ;адрес спецификации файла
210 0268 9C pushf
211 0269 2E: FF 1E 0107r call CS:old_21h
212 026E A3 05CCr mov handle, AX ;запоминаем дескриптор или код ошибки
213 0271 73 09 jnc nex1
214 0273 BB 0150r lea BX, MesError
215 0276 E8 004A call PrintStr
216 0279 EB 44 90 jmp ExitCloseFile
217
218
219 027C nex1:
220 027C B4 42 mov AH, 42h ; Функция установки указателя
221 027E B0 02 mov AL, 02 ; От конца файла
222 0280 8B 1E 05CCr mov BX, handle
223 0284 B9 0000 mov CX, 0 ;Старшая половина указателя
224 0287 BA 0000 mov DX, 0 ;Младшая половина указателя
225 028A CD 21 int 21h
226 ;Допишем новую строку
227 028C B4 40 mov AH, 40h
228 028E 8B 1E 05CCr mov BX, handle
Turbo Assembler Version 4.1 28/12/06 12:26:45 Page 5
OPCL.asm
229 0292 B9 0023 mov CX, mesClln
230 0295 BA 012Dr lea DX, mesCl
231 0298 9C pushf
232 0299 2E: FF 1E 0107r call CS:old_21h
233 029E B4 40 mov AH, 40h
234 02A0 8B 1E 05CCr mov BX, handle
235 02A4 B9 000A mov CX, 10 ;длина имени файла
236 02A7 06 push ES
237 02A8 1F pop DS
238 02A9 8B 16 05D8r mov DX, opclfile
239 02AD 9C pushf
240 02AE 2E: FF 1E 0107r call CS:old_21h
241 ;Закрытие файла
242 02B3 B4 3E mov AH, 3Eh
243 02B5 8B 1E 05CCr mov BX, handle
244 02B9 9C pushf
245 02BA 2E: FF 1E 0107r call CS:old_21h
246
247 02BF ExitCloseFile:
248 02BF 5B pop BX
249 02C0 5A pop DX
250 02C1 58 pop AX
251 02C2 C3 ret
252 02C3 CloseFile endp
253 ;--------------------------------------------------------------
254 ; Печать строки через функции BIOS
255 ;--------------------------------------------------------------
256 02C3 PrintStr proc ;Процедура печати строки через BIOS
257 ;Вход: смещение строки в BX
258 02C3 50 push AX
259 02C4 57 push DI
260 02C5 53 push BX
261 02C6 B4 0E mov AH,0Eh ;Функция вывода символа
262 02C8 cycl:
263 02C8 80 3F 00 cmp [BX],byte ptr 0 ;Сравним с 0
264 02CB 74 0E je exit
265 02CD 8A 07 mov AL,[BX] ;Символ
266 02CF 8B FB mov DI, BX ;Сохраняем адрес строки в DI
267 02D1 B9 0001 mov CX,1
268 02D4 CD 10 int 10h
269 02D6 8B DF mov BX, DI ;Восстанавливаем адрес строки из DI
270 02D8 43 inc BX
271 02D9 EB ED jmp cycl
272 02DB exit:
273 02DB 5B pop BX
274 02DC 5F pop DI
275 02DD 58 pop AX
276 02DE C3 ret
277 02DF PrintStr endp
278 ;--------------------------------------------------------------
279 ; Перевод строки
280 ;--------------------------------------------------------------
281 02DF CRLF proc ;Процедура перевода строки
282 02DF 53 push BX
283 02E0 BB 010Br lea BX, MesCRLF
284 02E3 E8 FFDD call PrintStr
285 02E6 5B pop BX
Turbo Assembler Version 4.1 28/12/06 12:26:45 Page 6
OPCL.asm
286 02E7 C3 ret
287 02E8 CRLF endp
288 02E8 main endp
289
290 =01E8 ressize=$-main ;Размер в байтах резидентной части
291 ;---------------------------------------------------------------
292 ; процедура инициализации
293 ;---------------------------------------------------------------
294 02E8 init proc
295 02E8 E8 00A8 call CmdLine ;вызов процедуры обработки параметров
296 ;Проверим установлена ли данная программа
297 02EB B4 C8 mov AH,0C8h ;Наша функция прерывания 2Fh
298 02ED B0 00 mov AL,00 ;Подфункция проверки установки
299 02EF CD 2D int 2Dh
300 02F1 3C FF cmp Al,0FFh
301 02F3 75 03 jne NotInstalled ;Программа не установлена.
302 02F5 EB 1C 90 jmp Installed ;Программа установлена.
303 ;При наличии флага ее можно выгрузить
304
305 02F8 NotInstalled:
306 02F8 80 3E 0407r 01 cmp UnloadFlag, 1 ;Если вызвана с параметрами - неверно
307 02FD 75 00 jne Loaded