Текст_Программы (КП - регистратор событий)

2017-12-28СтудИзба

Описание файла

Файл "Текст_Программы" внутри архива находится в следующих папках: КП - регистратор событий, Регистратор событий по прерыванию на экран. Документ из архива "КП - регистратор событий", который расположен в категории "". Всё это находится в предмете "системное программирование" из 5 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "системное программирование" в общих файлах.

Онлайн просмотр документа "Текст_Программы"

Текст из документа "Текст_Программы"

Московский государственный технический университет им. Н.Э. Баумана

Утверждаю:

Большаков С.А. "__"_____________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 ;Функция получения вектора

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5168
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее