Текст_Программы (1071473)
Текст из файла
Московский государственный технический университет им. Н.Э. Баумана
Утверждаю:
Большаков С.А. "__"_____________2002 г.
Курсовая работа по системному программированию
“Регистратор событий по прерыванию на экран”
Текст программы
(вид документа)
писчая бумага
(вид носителя)
12
(количество листов)
Исполнитель:
студент группы ИУ5-54
Терентьев Д.Б.
____________________
"__"___________2002 г.
Москва - 2002
Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 1
log.asm
1 0000 text segment 'code'
2 assume CS:text, DS:text
3 org 100h
4 0100 main proc far ;Главная процедура
5 0100 E9 0192 jmp init
6 INCLUDE Resident.asm
1 7 ;Резидентный модуль
1 8 ;Поля для резидентонй части программы
1 9 0103 00000000 old_2Dh dd 0
1 10 0107 00000000 old_21h dd 0
1 11 010B 0A 0D 00 MesCRLF db 10,13,0
1 12 010E 82 AD A8 AC A0 AD A8+ MesNew db 'Внимание!Был создан новый файл: ',0
13 A5 21 81 EB AB 20 E1+
14 AE A7 A4 A0 AD 20 AD+
15 AE A2 EB A9 20 E4 A0+
16 A9 AB 3A 20 00
1 17 012F 81 EB AB 20 E1 AE A7+ MesTemp db 'Был создан временный файл в каталоге: ',0
18 A4 A0 AD 20 A2 E0 A5+
19 AC A5 AD AD EB A9 20+
20 E4 A0 A9 AB 20 A2 20+
21 AA A0 E2 A0 AB AE A3+
22 A5 3A 20 00
1 23 0156 82 AD A8 AC A0 AD A8+ MesDel db 'Внимание!Был удален файл: ',0
24 A5 21 81 EB AB 20 E3+
25 A4 A0 AB A5 AD 20 E4+
26 A0 A9 AB 3A 20 00
1 27
1 28 ;Резидентная секция программы
1 29
1 30 0171 new_2Dh proc far ;Обработчик мультиплексного прерывания
1 31 0171 9C pushf
1 32 0172 1E push DS
1 33 0173 06 push ES
1 34
1 35 0174 0E push CS ;DS:=CS
1 36 0175 1F pop DS
1 37
1 38 0176 80 FC C8 cmp AH,0C8h ;Наша фукция прерывания 2Fh?
1 39 0179 75 10 jne out_2Dh
1 40 017B 3C 00 cmp AL,00h ;Подфунция проверки на повторную установку
1 41 017D 74 06 je insert
1 42 017F 3C 01 cmp AL,01h ;Подфункция выгрузки
1 43 0181 74 0F je uninstall
1 44 0183 EB 06 jmp short out_2Dh ;Неизвестна подфункция.На выход.
1 45 0185 insert:
1 46 0185 B0 FF mov AL,0FFh ;Программа уже установлена
1 47 0187 07 pop ES
1 48 0188 1F pop DS
1 49 0189 9D popf
1 50 018A CF iret
1 51 018B out_2Dh:
1 52 018B 07 pop ES
1 53 018C 1F pop DS
1 54 018D 9D popf
1 55 018E FF 2E 0103r jmp old_2Dh
1 56 0192 uninstall: ;Выгрузим программу
1 57
_Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 2
log.asm
1 58 ;Восстановим вектор мультиплексного прерывания 2Fh
1 59 0192 B4 25 mov AH,25h ;Функция заполнения вектора
1 60 0194 B0 2D mov AL,2Dh ;Номер вектора
1 61 0196 2E: C5 16 0103r lds DX,CS:old_2Dh
1 62 019B CD 21 int 21h
1 63 ;Восстановим вектор прерывания DOS
1 64 019D B4 25 mov AH,25h ;Функция заполнения вектора
1 65 019F B0 21 mov AL,21h ;Номер вектора
1 66 01A1 2E: C5 16 0107r lds DX,CS:old_21h
1 67 01A6 CD 21 int 21h
1 68
1 69 ;Получим из PSP адрес собственного окружения и восстановим его
1 70 01A8 2E: 8E 06 002C mov ES,CS:2Ch ;в ES адрес окружения из PSP
1 71 01AD B4 49 mov AH,49h ;Фукция освобождения памяти
1 72 01AF CD 21 int 21h
1 73 ;Выгрузим саму программу
1 74 01B1 0E push CS
1 75 01B2 07 pop ES
1 76 01B3 B4 49 mov AH,49h ;Фукция освобождения памяти
1 77 01B5 CD 21 int 21h
1 78 01B7 B0 99 mov AL,99h ;Код успешной выгрузки
1 79 01B9 07 pop ES
1 80 01BA 1F pop DS
1 81 01BB 9D popf
1 82 01BC CF iret
1 83 01BD new_2Dh endp
1 84
1 85 01BD new_21h proc far ;Обработчик прерывания DOS
1 86 ;Адрес строки имени файла в DS:DX. Она завршена 0
1 87 01BD 9C pushf
1 88 01BE 1E push DS
1 89 01BF 50 push AX
1 90 01C0 06 push ES
1 91 01C1 52 push DX
1 92
1 93 01C2 1E push DS ;ES:=старый DS
1 94 01C3 07 pop ES
1 95
1 96 01C4 0E push CS ;DS:=CS
1 97 01C5 1F pop DS
1 98
1 99 01C6 FB sti ;Разрешение более преоритетных прерываний
1 100
1 101 01C7 80 FC 3C cmp AH, 3Ch ;Создание нового файла с усечением существующего
1 102 01CA 74 3D je New_3Ch
1 103 01CC 80 FC 5B cmp AH, 5Bh ;Создание нового файла с сохранением существующего
1 104 01CF 74 3D je New_5Bh
1 105 01D1 80 FC 5A cmp AH, 5Ah ;Создание временнго файла
1 106 01D4 74 3D je New_5Ah
1 107
1 108 01D6 80 FC 41 cmp AH, 41h ;Удаление файла
1 109 01D9 74 3D je New_41h
1 110
1 111 01DB 3D 7141 cmp AX, 7141h ;Удалнеие файла с длинным именем
1 112 01DE 74 38 je New_41h
1 113 01E0 3D 716C cmp AX, 716Ch ;Открытие файла с соданием нового
1 114 01E3 75 19 jne Next2
_Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 3
log.asm
1 115 01E5 52 push DX
1 116 ;только создание файла, а не открытие
1 117 01E6 83 E2 13 and DX, 0000000000010011b
1 118 01E9 83 FA 02 cmp DX, 00010b
1 119 01EC 74 2F je New_6Ch
1 120 01EE 83 FA 10 cmp DX, 10000b
1 121 01F1 74 2A je New_6Ch
1 122 01F3 83 FA 12 cmp DX, 10010b
1 123 01F6 74 25 je New_6Ch
1 124 01F8 83 FA 13 cmp DX, 10011b
1 125 01FB 74 20 je New_6Ch
1 126 01FD 5A pop DX
1 127 01FE Next2:
1 128
1 129 01FE Finally:
1 130 01FE 5A pop DX
1 131 01FF 07 pop ES
1 132 0200 58 pop AX
1 133 0201 1F pop DS
1 134 0202 9D popf
1 135 0203 2E: FF 2E 0107r jmp dword ptr cs:old_21H
1 136 0208 CF iret
1 137 0209 New_3Ch: ;Функция создания файла с усечением +
138 существующего
1 139 0209 E8 0019 call CreateFile
1 140 020C EB F0 jmp Finally
1 141 020E New_5Bh: ;Функция создания нового файла с сохранением +
142 существующего
1 143 020E E8 0014 call CreateFile
1 144 0211 EB EB jmp Finally
1 145 0213 New_5Ah: ;Функция создания временного файла
1 146 0213 E8 0028 call CreateTempFile
1 147 0216 EB E6 jmp Finally
1 148 0218 New_41h: ;Функция удаления файла
1 149 0218 E8 003C call DeleteFile
1 150 021B EB E1 jmp Finally
1 151 021D New_6Ch:
1 152 021D 8B D6 mov DX, SI ;Имя файла в SI
1 153 021F E8 0003 call CreateFile
1 154 0222 5A pop DX
1 155 0223 EB D9 jmp Finally
1 156 0225 new_21h endp
1 157
1 158 0225 CreateFile proc ;Процедура сообщения о создании файла
1 159 ;Адрес строки имени файла в DS:DX. Она завршена 0
1 160 0225 52 push DX
1 161 0226 53 push BX
1 162 0227 BB 010Er lea BX, MesNew
1 163 022A E8 0043 call PrintStr
1 164 022D 06 push ES ;DS:=старый DS
1 165 022E 1F pop DS
1 166 022F 8B DA mov BX, DX ;Вывод имени файла
1 167 0231 E8 003C 90 90 call CS:PrintStr
1 168 0236 0E push CS ;DS:=мой DS
1 169 0237 1F pop DS
1 170 0238 E8 0051 call CRLF
1 171 023B 5B pop BX
_Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 4
log.asm
1 172 023C 5A pop DX
1 173 023D C3 ret
1 174 023E CreateFile endp
1 175
1 176 023E CreateTempFile proc ;Процедура сообщения о создании временного файла
1 177 ;Адрес строки пути к файлу в DS:DX. Она завршена 0
1 178 023E 52 push DX
1 179 023F 53 push BX
1 180 0240 BB 012Fr lea BX, MesTemp
1 181 0243 E8 002A call PrintStr
1 182 0246 06 push ES ;DS:=старый DS
1 183 0247 1F pop DS
1 184 0248 8B DA mov BX, DX ;Вывод имени файла
1 185 024A E8 0023 90 90 call CS:PrintStr
1 186 024F 0E push CS ;DS:=мой DS
1 187 0250 1F pop DS
1 188 0251 E8 0038 call CRLF
1 189 0254 5B pop BX
1 190 0255 5A pop DX
1 191 0256 C3 ret
1 192 0257 CreateTempFile endp
1 193
1 194 0257 DeleteFile proc ;Процедура сообщения о удалении файла
1 195 ;Адрес строки имени файла в DS:DX. Она завршена 0
1 196 0257 52 push DX
1 197 0258 53 push BX
1 198 0259 BB 0156r lea BX, MesDel
1 199 025C E8 0011 call PrintStr
1 200 025F 06 push ES ;DS:=стабый DS
1 201 0260 1F pop DS
1 202 0261 8B DA mov BX, DX ;Вывод имени файла
1 203 0263 E8 000A 90 90 call CS:PrintStr
1 204 0268 0E push CS ;DS:=мой DS
1 205 0269 1F pop DS
1 206 026A E8 001F call CRLF
1 207 026D 5B pop BX
1 208 026E 5A pop DX
1 209 026F C3 ret
1 210 0270 DeleteFile endp
1 211
1 212 0270 PrintStr proc ;Процедура печати строки через BIOS
1 213 ;Вход: смещение строки в BX
1 214 0270 50 push AX
1 215 0271 57 push DI
1 216 0272 53 push BX
1 217 0273 B4 0E mov AH,0Eh ;Функция вывода символа
1 218 0275 cycl:
1 219 0275 80 3F 00 cmp [BX],byte ptr 0 ;Сравним с 0
1 220 0278 74 0E je exit
1 221 027A 8A 07 mov AL,[BX] ;Символ
1 222 027C 8B FB mov DI, BX ;Сохраняем адрес строки в DI
1 223 027E B9 0001 mov CX,1
1 224 0281 CD 10 int 10h
1 225 0283 8B DF mov BX, DI ;Восстанавливаем адрес строки из DI
1 226 0285 43 inc BX
1 227 0286 EB ED jmp cycl
1 228 0288 exit:
_Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 5
log.asm
1 229 0288 5B pop BX
1 230 0289 5F pop DI
1 231 028A 58 pop AX
1 232 028B C3 ret
1 233 028C PrintStr endp
1 234
1 235 028C CRLF proc ;Процедура перевода строки
1 236 028C 53 push BX
1 237 028D BB 010Br lea BX, MesCRLF
1 238 0290 E8 FFDD call PrintStr
1 239 0293 5B pop BX
1 240 0294 C3 ret
1 241 0295 CRLF endp
1 242
243 0295 main endp
244 _95 ressize=$-main ;Размер в байтах резидентной части
245 INCLUDE Init.asm
1 246 0295 init proc ;Процедура инициализации
1 247 0295 E8 00A8 call CmdLine
1 248 ;Проверим установлена ли данная программа
1 249 0298 B4 C8 mov AH,0C8h ;Наша функция прерывания 2Fh
1 250 029A B0 00 mov AL,00 ;Подфункция проверки установки
1 251 029C CD 2D int 2Dh
1 252 029E 3C FF cmp Al,0FFh
1 253 02A0 75 03 jne NotInstalled ;Программа не установлена.
1 254 02A2 EB 1C 90 jmp Installed ;Программа установлена.
1 255 ;При наличии флага ее можно выгрузить
1 256
1 257 02A5 NotInstalled:
1 258 02A5 80 3E 03AEr 01 cmp UnloadFlag, 1 ;Если вызвана с параметрами - неверно
1 259 02AA 75 00 jne Loaded
1 260 02AC Loaded:
1 261 ;Действия по установке программы в памяти
1 262 02AC E8 0061 call SaveOldVectors
1 263 02AF E8 007B call SetNewVectors
1 264 02B2 BB 03B7r lea BX, MesLoaded
1 265 02B5 E8 FFB8 call PrintStr
1 266 ;Оставим программу резидентной
1 267 02B8 BA 002A mov DX,(ressize+10Fh)/16;Размер в параграфах
1 268 02BB B8 3100 mov AX, 3100h ;функция завершить и оставить в памяти
1 269 02BE CD 21 int 21h
1 270 02C0 installed:
1 271 02C0 80 3E 03AEr 01 cmp UnloadFlag,1 ;Запрос на выгузку установлен?
1 272 02C5 74 05 je unload ;Да, не выгрузку
1 273 02C7 B8 4C01 mov ax,4c01h ;Завешим программу обычным образом
1 274 02CA CD 21 int 21h ;код завершения = 1
1 275 02CC unload:
1 276 02CC E8 0011 call CheckOther
1 277 ;Прервем резидентную копию программы
1 278 02CF B4 C8 mov AH,0C8h ;Наша функция прерывания 2Fh
1 279 02D1 B0 01 mov AL,01h ;Подфункция прерывания
1 280 02D3 CD 2D int 2Dh
1 281 02D5 BB 0415r lea BX,MesUnloaded
1 282 02D8 E8 FF95 call PrintStr
1 283 ;Первая копия программы выгружена. Завершим и эту.
1 284 02DB B8 4C00 mov ax,4c00h ;Завешим программу обычным образом
1 285 02DE CD 21 int 21h ;код завершения = 0
_Turbo Assembler Version 3.1 21/12/02 20:12:37 Page 6
log.asm
1 286 02E0 init endp
1 287
1 288 02E0 CheckOther proc
1 289 ;Сохраним вектор мультиплексного прерывания 2Fh
1 290 02E0 B4 35 mov AH,35h ;Функция получения вектора
1 291 02E2 B0 2D mov AL,2Dh ;Номер вектора
1 292 02E4 CD 21 int 21h
1 293 02E6 89 1E 03AFr mov word ptr temp_2Dh,BX ;Сохраним старое IP
1 294 ;Сохраним вектор DOS прерывания 21h
1 295 02EA B4 35 mov AH,35h ;Функция получения вектора
1 296 02EC B0 21 mov AL,21h ;Номер вектора
1 297 02EE CD 21 int 21h
1 298 02F0 89 1E 03B3r mov word ptr temp_21h,BX ;Сохраним старое IP
1 299 ;Проверка наша программа ли была загружена?
1 300 02F4 81 3E 03AFr 0171r cmp word ptr temp_2Dh, offset new_2Dh
1 301 02FA 75 09 jne OtherLoaded
1 302 02FC 81 3E 03B3r 01BDr cmp word ptr temp_21h, offset new_21h
1 303 0302 75 01 jne OtherLoaded
1 304 0304 C3 ret
1 305 0305 OtherLoaded:
1 306 0305 BB 0512r lea BX,MesOtherLoaded
1 307 0308 E8 FF65 call PrintStr
1 308 030B B8 4C00 mov ax,4c00h ;Завешим программу обычным образом
1 309 030E CD 21 int 21h ;код завершения = 0
1 310 0310 CheckOther endp
1 311
1 312 0310 SaveOldVectors proc
1 313 ;Сохраним вектор мультиплексного прерывания 2Fh
1 314 0310 B4 35 mov AH,35h ;Функция получения вектора
1 315 0312 B0 2D mov AL,2Dh ;Номер вектора
1 316 0314 CD 21 int 21h
1 317 0316 89 1E 0103r mov word ptr old_2Dh,BX ;Сохраним старое IP
1 318 031A 8C 06 0105r mov word ptr old_2Dh+2,ES;Сохраним старое CS
1 319 ;Сохраним вектор DOS прерывания 21h
1 320 031E B4 35 mov AH,35h ;Функция получения вектора
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.