Главная » Все файлы » Просмотр файлов из архивов » Документы » [СП - ДЗ] 4 - Исходный текст программ программного продукта

[СП - ДЗ] 4 - Исходный текст программ программного продукта (КП - блокировка дисковода)

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

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

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

Онлайн просмотр документа "[СП - ДЗ] 4 - Исходный текст программ программного продукта"

Текст из документа "[СП - ДЗ] 4 - Исходный текст программ программного продукта"

_______________________________________________________________________

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

_______________________________________________________________________

Утверждаю:

Большаков С.А.

"__"_____________2010 г.

Курсовая работа по курсу Системное программирование

“Защита дисков от несанкционированного доступа

Вариант № 20

Исходный текст программного продукта

(вид документа)

писчая бумага

(вид носителя)

16

(количество листов)

ИСПОЛНИТЕЛЬ:

студент группы ИУ5-59

Сидякин А.А.

"02" декабря 2010 г.



Москва - 2010

____________________________________________________________________

Turbo Assembler Version 2.0 02/12/10 17:29:26 Page 1

kp.ASM

1 ; Курсовая работа

2 ;===============================================================================

3

4 ; Защита гибких дисков от несанкционированного доступа. Программа предназначена

5 ; для защиты гибких дисков от несанкционированного доступа. Во время работы

6 ; программы по нажатию на заданную клавишу F5 происходит блокировка гибких

7 ; дисков от чтения и записи. По повторному нажатию защита снимается

8

9 ; -----------------------------------------------------------------------------

10 0000 prgr segment

11

12 assume CS:prgr,DS:prgr ; соответствие сегментных регистров

13 org 100h ; для PSP

14 ; -----------------------------------------------------------------------------

15 0100 E9 011C begin: jmp init

16 0103 00000000 old_09h dd 0 ; хранение старого обработчика 09h

17 0107 00000000 old_2Fh dd 0 ; хранение старого обработчика 2Fh

18 010B 00000000 old_13h dd 0 ; хранение старого обработчика 13h

19 010F 00000000 old_0Eh dd 0 ; хранение старого обработчика 0Eh

20 0113 00 secur db 0 ; переменная-флаг состояния защиты

21 0114 42 6C 6F 63 6B 20 69+ block db 'Block is ON$'

22 73 20 4F 4E 24

23 0120 42 6C 6F 63 6B 20 69+ unblock db 'Block is OFF$'

24 73 20 4F 46 46 24

25

26 012D new_09h proc ; новый обработчик прерывания 09h

27 012D 50 push AX

28 012E 06 push ES

29 012F 1E push DS

30 0130 0E push CS

31 0131 1F pop DS

32 0132 50 push AX

33 0133 53 push BX

34 0134 51 push CX

35 0135 9C pushf ; для вызова старого обработчика

36 0136 2E: FF 1E 0103r CALL CS:old_09h ; вызов старого обработчика

37 013B B4 01 mov AH,1 ; функция проверка готовности символа

38 013D CD 16 int 16h ; прерывания клавиатуры

39 013F 74 0D jz nread ; если не готов, то на выход

40 0141 3C 00 CMP AL,0 ; проверка наличия расширенного кода ASCII

41 0143 74 0F je enh ; если да, то пойдём проверять дальше

42 0145 80 FC 1D cmp AH,1DH ; не нажата ли Ctrl

43 0148 75 04 jne nread ; если нет, то на выход

44 014A B4 00 mov AH,0 ; функция ожидания нажатия

45 014C CD 16 int 16h ; из прерывания клавиатуры

46 014E 59 nread: pop CX

47 014F 5B pop BX

48 0150 58 pop AX

49 0151 EB 49 90 jmp done

50 0154 80 FC 3F enh: cmp AH,3Fh ; нажата ли F5

51 0157 74 0D je prnt ; если да, то выведем сообщение

52 0159 B4 00 mov AH,00h

53 015B CD 16 int 16h

54 015D 07 pop ES

55 015E 5A pop DX

56 015F 59 pop CX

57 0160 5B pop BX

Turbo Assembler Version 2.0 16/12/10 17:29:26 Page 2

kp.ASM

58 0161 58 pop AX

59 0162 1F pop DS

60 0163 07 pop ES

61 0164 58 pop AX

62 0165 CF IRET

63

64 0166 2E: 80 36 0113r 01 prnt: xor CS:secur,1 ; включим/выключим защиту

65 016C 2E: 80 3E 0113r 01 cmp CS:secur,1 ; включена ли сейчас

66 0172 74 0B je on ; если да, то скажем об этом

67 0174 06 push ES ; если нет, то и об этом скажем

68 0175 BA 0120r mov DX,offset unblock

69 0178 E8 01B2 CALL print

70 017B 07 pop ES

71 017C EB 09 90 jmp off

72 017F 06 on: push ES

73 0180 BA 0114r mov DX,offset block

74 0183 E8 01A7 CALL print

75 0186 07 pop ES

76 0187 FA off: CLI ; запрещаем прерывания, пример с cyberguru

77 ;sub AX,AX ; обнуляем регистр

78 ;mov ES,AX ; добавочный сегмент - с начала памяти

79 ;mov AL,ES:[41AH] ; берем указатель на голову буфера

80 ;mov ES:[41CH],AL ; посылаем его в указатель хвоста

81

82 0188 06 push ES ; пример из методички

83 0189 B8 0040 mov AX,40h

84 018C 8E C0 mov ES,AX

85 018E 26: 8B 1E 001A mov BX,ES:1Ah

86 0193 26: 89 1E 001C mov ES:1Ch,BX

87 0198 07 pop ES

88 0199 FB STI ; разрешаем прерывания

89 019A EB B2 jmp nread

90 019C 1F done: pop DS

91 019D 07 pop ES

92 019E 58 pop AX

93 019F CF IRET

94 01A0 new_09h endp

95

96 ; можно заблокировать обращения к дисководу, а можно вообще дисковый ввод/вывод

97 ; если дисковод, то 0Eh, если дисковый ввод/вывод, то 13h

98

99 ; выбрав какое-либо, второе можно закомментировать, включая перехват

100 ; обработчика этого прерывания и его восстановление. Здесь оставлены оба

101

102 01A0 new_13h proc ; прерывание дискового ввода/вывода

103 01A0 2E: 80 3E 0113r 01 cmp CS:secur,1 ; включена ли сейчас

104 01A6 75 04 jne unblck ; если нет, то доступ по старому 13h

105 01A8 F9 STC ; флаг CF устанавливается в 1

106 01A9 B4 03 mov AH,03h ; что означает ошибку, 3 - её код

107 01AB C3 RET ; "попытка чтения защищённой дискеты"

108 01AC 2E: FF 2E 010Br unblck: jmp CS:old_13h

109 01B1 new_13h endp

110

111 01B1 new_0Eh proc ; прерывание работы с дискетой

112 01B1 2E: 80 3E 0113r 01 cmp CS:secur,1 ; включена ли сейчас

113 01B7 75 04 jne unbl ; если нет, то доступ по старому 13h

114 01B9 F9 STC ; тут всё так же, используем его

Turbo Assembler Version 2.0 16/12/10 17:29:26 Page 3

kp.ASM

115 01BA B4 03 mov AH,03h ; для подстраховки, достаточно и 13h

116 01BC C3 RET ; IRET поднимет флаги, нам это не надо

117 01BD 2E: FF 2E 010Fr unbl: jmp CS:old_0Eh

118 01C2 new_0Eh endp

119

120 01C2 new_2Fh proc

121 01C2 80 FC C8 cmp AH,0C8h ; обратились к нашему резиденту?

122 01C5 75 08 jne out_2Fh ; нет - дальше по цепочке в 2Fh

123 01C7 3C 00 cmp AL,00h ; да - а зачем? Просто проверить?

124 01C9 74 09 je iamhr ; отрапортуем о присутствии

125 01CB 3C 01 cmp AL,01h ; выгрузиться?

126 01CD 74 08 je uninst ; пойдём выгружаться

127 01CF 2E: FF 2E 0107r out_2Fh: jmp CS:old_2Fh ; в старый обработчик без возврата

128 01D4 B0 FF iamhr: mov AL,0FFh ; отзовёмся условленным ответом

129 01D6 CF IRET

130 01D7 06 uninst: push ES

131 01D8 52 push DX

132 01D9 50 push AX

133 01DA B8 2509 mov AX,2509h ; функция записи в вектор прерываний

134 01DD 2E: C5 16 0103r lds DX,CS:old_09h ; адреса изначального обработчика

135 01E2 CD 21 int 21h ; и так со всеми перехваченными

136 01E4 B8 252F mov AX,252Fh

137 01E7 2E: C5 16 0107r lds DX,CS:old_2Fh

138 01EC CD 21 int 21h

139 01EE B8 2513 mov AX,2513h

140 01F1 2E: C5 16 010Br lds DX,CS:old_13h

141 01F6 CD 21 int 21h

142 01F8 B8 250E mov AX,250Eh

143 01FB 2E: C5 16 010Fr lds DX,CS:old_0Eh

144 0200 CD 21 int 21h

145 0202 2E: 8E 06 002C mov ES,CS:2CH ; сегмент окружения из PSP

146 0207 B4 49 mov AH,49h ; функция освобождения блока памяти

147 0209 CD 21 int 21h

148 020B 0E push CS ; скопируем CS в ES

149 020C 07 pop ES ; ES указывает на начало программы

150 020D B4 49 mov AH,49h ; и тоже освободим

151 020F CD 21 int 21h

152 0211 58 pop AX

153 0212 5A pop DX

154 0213 07 pop ES

155 0214 B0 99 mov AL,99h ; код удачной выгpузки

156 0216 50 push AX

157 0217 B4 00 mov AH,00h ; очистим экран

158 0219 B0 03 mov AL,03h

159 021B CD 10 int 10h

160 021D 58 pop AX

161 021E CF IRET

162 021F new_2Fh endp

163 ; -----------------------------------------------------------------------------

164 021F init proc

165 021F BE 0080 mov SI,80h ; а DS указывает на PSP, и вот мы берём 80h от PSP

166 0222 BF 0511r mov DI,offset dest ; помещаем строку-приёмник dest в ES:DI

167 0225 8A 0C mov CL,[SI] ; получаем длину строки параметров

168 0227 80 F9 00 cmp CL,0 ; проверяем, есть ли они вообще

169 022A 74 60 je wtop ; если нету, то пойдём в метку wtop

170 022C 46 inc SI ; перешагнули с длины строки на пробел (81h)

171 022D 46 inc SI ; перешагнули с пробела на первый символ (82h)

Turbo Assembler Version 2.0 16/12/10 17:29:26 Page 4

kp.ASM

172 022E FC cld ; направление - восток

173 022F F3> A4 rep movsb ; копировать из DS:SI в ES:DI, побайтово CL раз

174 0231 06 push ES ; скинули ES

175 0232 1F pop DS ; подняли DS, теперь они оба указывают на data

176 0233 BF 0511r mov DI,offset dest ; теперь в DI кладём эталон

177 0236 BE 0525r mov SI,offset par ; а в SI - полученный параметр

178 0239 B1 02 mov CL,2 ; устанавливаем CL на 2 символа

179 023B F3> A6 repe cmpsb ; и сравниваем их посимвольно, до расхождения ; +

180 если не совпадают, то пошли ещё проверим

181 023D 75 4D jne wtop

182 023F B8 0002 mov AX,02h ; очистим экран

183 0242 CD 10 int 10h

184 0244 B4 09 mov AH,09h ; приветственное слово и инструкции

185 0246 BA 035Fr mov DX,offset greet

186 0249 CD 21 int 21h

187 024B E8 00D4 CALL CLRF

188 024E E8 00D1 CALL CLRF

189 0251 B4 09 mov AH,09h

190 0253 BA 03A9r mov DX,offset help1

191 0256 CD 21 int 21h

192 0258 E8 00C7 CALL CLRF

193 025B E8 00C4 CALL CLRF

194 025E B4 09 mov AH,09h

195 0260 BA 03CFr mov DX,offset help2

196 0263 CD 21 int 21h

197 0265 E8 00BA CALL CLRF

198 0268 B4 09 mov AH,09h

199 026A BA 0402r mov DX,offset help3

200 026D CD 21 int 21h

201 026F E8 00B0 CALL CLRF

202 0272 E8 00AD CALL CLRF

203 0275 B4 09 mov AH,09h

204 0277 BA 0438r mov DX,offset help4

205 027A CD 21 int 21h

206 027C E8 00A3 CALL CLRF

207 027F E8 00A0 CALL CLRF

208 0282 B4 09 mov AH,09h

209 0284 BA 0464r mov DX,offset help5

210 0287 CD 21 int 21h

211 0289 EB 11 90 jmp qui

212 028C B8 C800 wtop: mov AX,0C800h ; будем использовать эту функцию

213 028F CD 2F int 2Fh ; мультиплексного прерывания

214 0291 3C FF cmp AL,0FFh ; отозвался ли наш резидент

215 0293 75 0C jne inst ; нет - значит, надо его загрузить

216 0295 B4 09 mov AH,09h ; да - скажем об этом

217 0297 BA 04BFr mov DX,offset alrinst

218 029A CD 21 int 21h

219 029C B8 4C00 qui: mov AX,4C00h ; и закроемся

220 029F CD 21 int 21h

221 02A1 B8 0002 inst: mov AX,02h ; очистим экран

222 02A4 CD 10 int 10h

223 02A6 B4 09 mov AH,09h

224 02A8 BA 0492r mov DX,offset info1

225 02AB CD 21 int 21h

226 02AD B4 09 mov AH,09h

227 02AF BA 04BAr mov DX,offset info2

228 02B2 CD 21 int 21h

Turbo Assembler Version 2.0 16/12/10 17:29:26 Page 5

kp.ASM

229 02B4 E8 006B CALL CLRF

230 02B7 B8 3509 mov AX,3509h ; функция получения адреса обработчика

231 02BA CD 21 int 21h ; из вектора прерываний и их сохранение

232 02BC 2E: 89 1E 0103r mov word ptr CS:old_09h,BX ; перехватывать будем 2Fh, 09h, 13h и 0Eh

233 02C1 2E: 8C 06 0105r mov word ptr CS:old_09h+2,ES ; 2Fh - мультиплексное, для резидента

234 02C6 B8 352F mov AX,352Fh ; 09h - клавиатура

235 02C9 CD 21 int 21h ; 13h - доступ к дискам

236 02CB 2E: 89 1E 0107r mov word ptr CS:old_2Fh,BX ; 0Eh - дисковод

237 02D0 2E: 8C 06 0109r mov word ptr CS:old_2Fh+2,ES

238 02D5 B8 3513 mov AX,3513h

239 02D8 CD 21 int 21h

240 02DA 2E: 89 1E 010Br mov word ptr CS:old_13h,BX

241 02DF 2E: 8C 06 010Dr mov word ptr CS:old_13h+2,ES

242 02E4 B8 350E mov AX,350Eh

243 02E7 CD 21 int 21h

244 02E9 2E: 89 1E 010Fr mov word ptr CS:old_0Eh,BX

245 02EE 2E: 8C 06 0111r mov word ptr CS:old_0Eh+2,ES

246 02F3 B8 2509 mov AX,2509h ; записываем в вектор прерываний

247 02F6 BA 012Dr mov DX,offset new_09h ; адреса наших новых обработчиков

248 02F9 CD 21 int 21h

249 02FB B8 252F mov AX,252Fh

250 02FE BA 01C2r mov DX,offset new_2Fh

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