4. Исходный текст (КП - смена регистра символов в нижний)

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

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

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

Онлайн просмотр документа "4. Исходный текст"

Текст из документа "4. Исходный текст"

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

_________________________________________________________________

Утверждаю:

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

"__"_____________2006 г.

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

Драйвер преобразования к нижнему регистру”

Исходный текст

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

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

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

9

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

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

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

_____________________

Суслов А.Ю.

"__"_____________2006 г.



Москва - 2006

________________________________________________________________

Turbo Assembler Version 4.1 15/12/06 06:17:45 Page 1

LCASEDRV.ASM

1 ;---------------------------------------------------------------------

2 ; Резидентная программа для приведения всех вводимых

3 ; символов к нижнему регистру

4 ; Ctrl+u/U - выход из программы

5 ; Программа занимает первую свободную функцию прерывания 2Dh

6 ; в соответствии со спецификацией AMIS 3.6

7 ; Поддерживаются функции AMIS 00h, 02h, 03h, 04h и 05h

8 ;---------------------------------------------------------------------

9 0000 .model tiny

10 0000 .code

11 .386 ; для сдвигов и команд pusha/popa

12 ORG 2Ch

13 002C ???? envseg DW ? ; сегментный адрес окружения DOS

14 ORG 100h ; начало СОМ-программы

15 0100 start:

16 0100 E9 01B4 JMP initialize ; переход на инициализирующую часть

17 0103 hw_reset9:

18 0103 CB RETF

19

20 ; Обработчик прерывания 09h (IRQ1)

21 0104 int09h_handler proc far

22 0104 EB 10 JMP short actual_int09h_handler ;+00 ISP: пропустить блок

23 0106 ???????? old_int09h DD ? ;+02 ISP: старый +

24 обработчик

25 010A 424B DW 424Bh ;+06 ISP: +

26 сигнатура

27 010C 00 DB 00h ;+08 ISP: +

28 вторичный обработчик

29 010D EB F4 JMP short hw_reset9 ;+09 ISP: ближний +

30 JMP на hw_reset

31 010F 07*(00) DB 7 dup (0) ;+0B ISP: +

32 зарезервировано

33 0116 actual_int09h_handler: ; начало обработчика INT 09h

34

35 ; Сначала вызовем предыдущий обработчик, чтобы дать BIOS возможность

36 ; обработать прерывание и, если это было нажатие клавиши, поместить код

37 ; в клавиатурный буфер

38

39 0116 9C PUSHF

40 0117 2E: FF 1E 0106r CALL dword ptr CS:old_int09h

41

42 011C 60 PUSHA ; это аппаратное прерывание - надо

43 011D 1E PUSH DS ; сохранить все регистры

44

45 011E FC CLD ; флаг для команд строковой обработки

46 011F 6A 40 PUSH 0040h

47 0121 1F POP DS ; DS = сегментный +

48 адрес области данных BIOS

49 0122 8B 3E 001A MOV DI,word ptr DS:001Ah ; адрес головы буфера клавиатуры

50 0126 3B 3E 001C CMP DI,word ptr DS:001Ch ; если он равен адресу хвоста, значит

51 012A 74 2D 90 90 JE exit_09h_handler ; буфер пуст, выходим

52 012E 8B 05 MOV AX,word ptr [DI] ; иначе: считать из буфера первый +

53 символ

54

55 0130 80 FC 16 CMP AH,16h ; 16h - скан-код клавиши 'u'

56 0133 75 12 90 90 JNE no_exit

57 0137 F6 06 0017 04 TEST byte ptr DS:[17h], 04h ; проверить Ctrl

Turbo Assembler Version 4.1 15/12/06 06:17:45 Page 2

LCASEDRV.ASM

58 013C 74 09 90 90 JZ no_exit

59 0140 89 3E 001C MOV word ptr DS:001Ch,DI ; очистить буфер

60 0144 EB 16 90 JMP unload

61

62 0147 no_exit: ; Проверяем, является ли символ заглавной латинской+

63 буквой

64 0147 3C 41 CMP AL,'A'

65 0149 72 0E 90 90 JB exit_09h_handler

66 014D 3C 5A CMP AL,'Z'

67 014F 77 08 90 90 JA exit_09h_handler

68 0153 2C 41 SUB AL,'A'

69 0155 04 61 ADD AL,'a'

70 0157 89 05 MOV word ptr [DI], AX

71

72 0159 exit_09h_handler:

73 0159 1F POP DS

74 015A 61 POPA

75 015B CF IRET

76

77 015C unload: ; Выгрузиться из памяти

78 015C 8C CA MOV DX,CS

79 015E BB 0159r MOV BX,offset exit_09h_handler

80 0161 2E: 8A 26 0181r MOV AH,CS:byte ptr mux_id

81 0166 B0 02 MOV AL,02

82 0168 CD 2D INT 2Dh

83 016A EB ED JMP exit_09h_handler

84 016C int09h_handler endp ; конец обработчика INT 09h

85

86

87 016C hw_reset2D:

88 016C CB RETF

89 ;-----------------------------------------------------------------------------------

90 ; Обработчик прерывания INT 2Dh

91 ; поддерживает функции AMIS 3.6 00h, 02h, 03h, 04h и 05h

92 ;-----------------------------------------------------------------------------------

93 016D int2Dh_handler proc far

94 016D EB 10 JMP short actual_int2Dh_handler ;+00 ISP: +

95 пропустить блок

96 016F ???????? old_int2Dh DD ? ;+02 ISP: +

97 старый обработчик

98 0173 424B DW 424Bh ; +

99 +06 ISP: сигнатура

100 0175 00 DB 00h ; +

101 +08 ISP: программное прерывание

102 0176 EB F4 JMP short hw_reset2D ;+09 ISP: +

103 ближний JMP на hw_reset

104 0178 07*(00) DB 7 dup (0) ;+0B ISP: +

105 зарезервировано

106

107 017F actual_int2Dh_handler: ; начало собственно обработчика INT 2Dh

108 017F 80 FC DB 80h,0FCh ; начало команды CMP АН, +

109 число

110 0181 ?? mux_id DB ? ; идентификатор программы

111 0182 74 07 90 90 JE its_us ; если вызывают с чужим АН +

112 - это не нас

113 0186 2E: FF 2E 016Fr JMP dword ptr CS:old_int2Dh

114

Turbo Assembler Version 4.1 15/12/06 06:17:45 Page 3

LCASEDRV.ASM

115 018B its_us:

116 018B 3C 06 CMP AL,06 ; функции 06h и выше

117 018D 73 2C 90 90 JAE int2D_no ; не поддерживаются

118 0191 98 CBW

119 0192 8B F8 MOV DI,AX ; DI = номер функции

120 0194 D1 E7 SHL DI,1 ; умножить его на +

121 2, так как jumptable -

122 ; +

123 таблица слов

124 0196 2E: FF A5 019Br JMP word ptr CS:jumptable[DI] ; косвенный переход на обработчики

125 ; +

126 функций

127 019B 01B0r jumptable DW offset int2D_00

128 019D 01BBr DW offset int2D_no

129 019F 01BEr DW offset int2D_02

130 01A1 01F5r DW offset int2D_03

131 01A3 01F8r DW offset int2D_04

132 01A5 01FEr DW offset int2D_05

133

134 01A7 unload_failed: ; сюда передается управление, если хоть один из +

135 векторов

136 ; прерываний был перехвачен +

137 кем-то после нас

138 01A7 BE 0289r MOV SI,offset UnloadFailedMessage ; вывести сообщение об ошибке

139 01AA E8 0059 CALL PUTS

140 01AD B0 01 MOV AL,01h ; выгрузка программы не удалась

141 01AF CF IRET

142

143 01B0 int2D_00: ; Функция проверки наличия

144 01B0 B0 FF MOV AL,0FFh

145 01B2 B9 0100 MOV CX,0100h

146 01B5 0E PUSH CS

147 01B6 5A POP DX ; DX:DI - адрес AMIS-сигнатуры

148 01B7 BF 021Er MOV DI,offset amis_sign

149 01BA CF IRET

150 01BB int2D_no: ; неподдерживаемая функция

151 01BB B0 00 MOV AL,00h

152 01BD CF IRET

153 01BE int2D_02: ; выгрузка программы

154 01BE FA CLI ; критический участок

155 01BF 6A 00 PUSH 0

156 01C1 1F POP DS ; DS - сегментный адрес таблицы +

157 векторов прерываний

158 01C2 8C C8 MOV AX,CS

159 ; проверить, все ли перехваченные +

160 прерывания

161 ; по-прежнему указывают на нас

162 01C4 3B 06 0026 CMP AX,word ptr DS:[09h*4+2]

163 01C8 75 DD JNE unload_failed

164 01CA 3B 06 00B6 CMP AX,word ptr DS:[2Dh*4+2]

165 01CE 75 D7 JNE unload_failed

166 ; восстановить старые обработчики +

167 прерываний

168 01D0 B8 2509 MOV AX,2509h

169 01D3 2E: C5 16 0106r LDS DX,dword ptr CS:old_int09h

170 01D8 CD 21 INT 21h

171 01DA B8 252D MOV AX,252Dh

Turbo Assembler Version 4.1 15/12/06 06:17:45 Page 4

LCASEDRV.ASM

172 01DD 2E: C5 16 016Fr LDS DX,dword ptr CS:old_int2Dh

173 01E2 CD 21 INT 21h

174 ; собственно выгрузка резидента

175 01E4 0E PUSH CS

176 01E5 1F POP DS

177 01E6 BE 0257r LEA SI,QuitMessage

178 01E9 E8 001A CALL PUTS

179

180 01EC 0E PUSH CS

181 01ED 07 POP ES

182 01EE B4 49 MOV AH,49h

183 01F0 CD 21 INT 21h

184

185 01F2 B0 FF MOV AL,0FFh

186 01F4 CF IRET

187 01F5 int2D_03: ; запрос на активизацию для "всплывающих" +

188 программ

189 01F5 32 C0 XOR AL,AL ; код 00: резидент - не всплывающая +

190 программа

191 01F7 CF IRET

192 01F8 int2D_04: ; получить список перехваченных прерываний

193 01F8 8C CA MOV DX,CS ; список в DX:BX

194 01FA BB 0249r MOV BX,offset amis_hooklist

195 01FD CF IRET

196 01FE int2D_05: ; получить список "горячих" клавиш

197 01FE B0 FF MOV AL,0FFh

198 0200 8C CA MOV DX,CS ; список в DX:BX

199 0202 BB 024Fr MOV BX,offset amis_hotkeys

200 0205 CF IRET

201 0206 int2Dh_handler endp

202

203 ;-----------------------------------------------------------------------------------

204 ;Процедура вывода на экран строки

205 ;Вход: DS:SI - адрес строки

206 ;Выход: нет

207 ;-----------------------------------------------------------------------------------

208 0206 PUTS proc near

209 0206 50 PUSH AX

210 0207 53 PUSH BX

211 0208 52 PUSH DX

212 0209 56 PUSH SI

213 020A next_sym:

214 020A B4 0E MOV AH, 0Eh

215 020C 8A 04 MOV AL, byte ptr ds:[si] ; читаем очередной символ из памяти

216 020E 3C 24 CMP AL, '$'

217 0210 74 07 90 90 JE done

218 0214 CD 10 INT 10h ; выводим его на экран

219 0216 46 INC SI

220 0217 EB F1 JMP next_sym

221 0219 done:

222 0219 5E POP SI

223 021A 5A POP DX

224 021B 5B POP BX

225 021C 58 POP AX

226 021D C3 RET

227 021E PUTS endp

228

Turbo Assembler Version 4.1 15/12/06 06:17:45 Page 5

LCASEDRV.ASM

229

230

231 ;-----------------------------------------------------------------------------------

232 ;Данные резидентной части

233 ;-----------------------------------------------------------------------------------

234 ; AMIS: сигнатура для резидентных программ

235 021E 53 75 73 6C 6F 76 41+ amis_sign DB "SuslovAU" +

236 55 ; 8 байт - имя автора

237 0226 4C 43 41 53 45 44 52+ DB "LCASEDRV" +

238 56 ; 8 байт - имя программы

239 022E 4B 65 79 62 6F 61 72+ DB "Keyboard lower case driver",0 ; +

240 64 20 6C 6F 77 65 72+ ASCIZ-комментарий; не более 64 байт

241 20 63 61 73 65 20 64+

242 72 69 76 65 72 00

243

244 ; AMIS: список перехваченных прерываний

245 0249 09 amis_hooklist DB 09h

246 024A 0104r DW offset int09h_handler

247 024C 2D DB 2Dh

248 024D 016Dr DW offset int2Dh_handler

249

250 ; AMIS: список "горячих" клавиш

251 024F 01 amis_hotkeys DB 01h ; клавиши проверяются после+

252 стандартного

253 ; +

254 обработчика INT 09h

255 0250 01 DB 1 ; число +

256 клавиш

257 0251 1E DB 1Eh ; скан-код +

258 клавиши (U)

259 0252 0008 DW 08h ; требуемые+

260 флаги (любая Ctrl)

261 0254 0000 DW 0 ; +

262 запрещенные флаги

263 0256 01 DB 1 ; клавиша +

264 глотается

265

266 ; текст, который выдает программа при +

267 выгрузке:

268 0257 4C 43 41 53 45 44 52+ QuitMessage DB "LCASEDRV: Программа успешно +

269 56 3A 20 CF F0 EE E3+ выгружена из памяти",10,13,"$"

270 F0 E0 EC EC E0 20 F3+

271 F1 EF E5 F8 ED EE 20+

272 E2 FB E3 F0 F3 E6 E5+

273 ED E0 20 E8 E7 20 EF+

274 E0 EC FF F2 E8 0A 0D+

275 24

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