Лист (КП - русификатор)

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

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

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

Онлайн просмотр документа "Лист"

Текст из документа "Лист"

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

_________________________________________________________________

Утверждаю:

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

"__"_____________2006 г.

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

«Драйвер русификатора клавиатуры (переключение по выбранной клавише) »

Текст программы

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

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

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

11

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

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

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

_____________________

Жулин А.В.

"__"_____________2006 г.















Москва - 2006

________________________________________________________________

СОДЕРЖАНИЕ

1. Файл TRNS.COM Ошибка! Закладка не определена.

2. Файл UNLDTSR.exe 10

1. Файл TRNS.COM

Turbo Assembler Version 4.1 02/12/06 14:34:15 Page 1

trns.asm

1 0000 .model tiny

2 0000 code segment 'code'

3 assume CS:code, DS:code

4 org 100h

5 0100 start proc

6 0100 E9 01D2 jmp init

7 0103 00000000 old_2Fh dd 0

8 0107 00000000 old_09h dd 0

9 010B 01 vkl db 1

10 010C 00 caps db 0

11

12 ;Новый обработчик прерываний от клавиатуры

13

14 010D new_09h proc

15 010D 50 push AX

16 010E 53 push BX

17 010F 06 push ES

18 0110 1E push DS

19 0111 0E push CS

20 0112 1F pop DS

21

22 0113 B8 0040 mov AX, 40h ;40h-сегмент,где хранятся флаги сост-я клавы,кольц. +

23 буфер ввода

24 0116 8E C0 mov ES, AX

25 0118 E4 60 in AL, 60h ;записываем в AL состояние скен-код нажатой клавиши

26 011A 3C 2D cmp AL, 2Dh ;была нажата клавиша X?

27 011C 75 29 jne dalee

28 011E 26: 8A 26 0017 mov AH, ES:[17h] ;флаги клавиатуры

29 0123 80 E4 0F and AH, 00001111b

30 0126 80 FC 04 cmp AH, 00000100b ;был ли нажат ctrl?

31 0129 75 1C jne dalee

32 012B B0 01 mov AL, 1

33 012D 2A 06 010Br sub AL, vkl

34 0131 A2 010Br mov vkl, AL

35

36 0134 E4 61 in AL, 61h ;контроллер состояния клавиатуры

37 0136 0C 80 or AL, 10000000b ;пометим, что клавишу нажали

38 0138 E6 61 out 61h, AL

39 013A 24 7F and AL, 01111111b ;пометим, что клавишу отпустили

40 013C E6 61 out 61h, AL

41 013E B0 20 mov AL, 20h

42 0140 E6 20 out 20h, AL ;отправим в контроллер прерываний признак конца +

43 прерывания

44

45 0142 1F pop DS

46 0143 07 pop ES

47 0144 5B pop BX

48 0145 58 pop AX

49 0146 CF iret

50

51 0147 26: 8A 26 0017 dalee: mov AH, ES:[17h]

52 014C 80 E4 40 and AH, 01000000b ;CapsLock

53 014F 80 FC 00 cmp AH, 0

54 0152 74 05 je prod

55 0154 C6 06 010Cr 01 mov caps, 1

56 0159 9C prod: pushf

57 015A FF 1E 0107r call old_09h

58 015E 80 3E 010Br 00 cmp vkl, 0

59 0163 74 1C je _vih

60 0165 26: 8B 1E 001C mov BX, ES:[1Ch] ;адрес хвоста

61 016A 4B dec BX ;сместимся назад к последнему

62 016B 4B dec BX ;введённому символу

63 016C 83 FB 1E cmp BX, 1Eh ;не вышли ли мы за пределы буфера?

64 016F 73 03 jae go

65 0171 BB 003C mov BX, 3Ch ;хвост вышел за пределы буфера, значит последний введённый +

66 символ

67 ;находится в конце буфера

68

69 0174 26: 8B 07 go: mov AX, ES:[BX]

70 0177 3D 2146 cmp AX, 2146h ;F -> А

71 017A 75 08 jne go1

72 017C 26: C7 07 2180 mov word ptr ES:[BX], 2180h

73 0181 E9 0103 _vih: jmp vih

74 0184 3D 2166 go1: cmp AX, 2166h ;f -> а

75 0187 75 08 jne go2

76 0189 26: C7 07 21A0 mov word ptr ES:[BX], 21A0h

77 018E E9 00F6 jmp vih

78 0191 3D 333C go2: cmp AX, 333Ch ; < -> б

79 0194 75 17 jne go3

80 0196 80 3E 010Cr 00 cmp caps, 0

81 019B 74 08 je bol_B

82 019D 26: C7 07 33A1 mov word ptr ES:[BX], 33A1h

83 01A2 E9 00E2 jmp vih

84 01A5 26: C7 07 3381 bol_B: mov word ptr ES:[BX], 3381h

85 01AA E9 00DA jmp vih

86

87 01AD 3D 332C go3: cmp AX, 332Ch ; , -> б

88 01B0 75 0F jne go4

89 01B2 80 3E 010Cr 00 cmp caps, 0

90 01B7 75 EC jne bol_B

91 01B9 26: C7 07 33A1 mov word ptr ES:[BX], 33A1h ;б

92 01BE E9 00C6 jmp vih

93

94 01C1 3D 2044 go4: cmp AX, 2044h ;D->В

95 01C4 75 08 jne go5

96 01C6 26: C7 07 2082 mov word ptr ES:[BX], 2082h

97 01CB E9 00B9 jmp vih

98 01CE 3D 2064 go5: cmp AX, 2064h ;d->в

99 01D1 75 08 jne go6

100 01D3 26: C7 07 20A2 mov word ptr ES:[BX], 20A2h

101 01D8 E9 00AC jmp vih

102

103 01DB 3D 1655 go6: cmp AX, 1655h ;U->Г

104 01DE 75 08 jne go7

105 01E0 26: C7 07 1683 mov word ptr ES:[BX], 1683h

106 01E5 E9 009F jmp vih

107 01E8 3D 1675 go7: cmp AX, 1675h ;u->г

108 01EB 75 08 jne go8

109 01ED 26: C7 07 16A3 mov word ptr ES:[BX], 16A3h

110 01F2 E9 0092 jmp vih

111

112 01F5 3D 264C go8: cmp AX, 264Ch ;L->Д

113 01F8 75 08 jne go9

114 01FA 26: C7 07 2684 mov word ptr ES:[BX], 2684h

115 01FF E9 0085 jmp vih

116 0202 3D 266C go9: cmp AX, 266Ch ;l->д

117 0205 75 05 jne go10

118 0207 26: C7 07 26A4 mov word ptr ES:[BX], 26A4h

119 020C 3D 273A go10: cmp AX, 273Ah ; : -> Ж

120 020F 75 17 jne go11

121 0211 80 3E 010Cr 00 cmp caps, 0

122 0216 74 08 je bol_G

123 0218 26: C7 07 27A6 mov word ptr ES:[BX], 27A6h

124 021D EB 68 90 jmp vih

125 0220 26: C7 07 2786 bol_G: mov word ptr ES:[BX], 2786h

126 0225 EB 60 90 jmp vih

127

128 0228 3D 273B go11: cmp AX, 273Bh ; ; -> ж

129 022B 75 0F jne go12

130 022D 80 3E 010Cr 00 cmp caps, 0

131 0232 75 EC jne bol_G

132 0234 26: C7 07 27A6 mov word ptr ES:[BX], 27A6h

133 0239 EB 4C 90 jmp vih

134 023C 3D 1950 go12: cmp AX, 1950h ;P->З

135 023F 75 08 jne go13

136 0241 26: C7 07 1987 mov word ptr ES:[BX], 1987h

137 0246 EB 3F 90 jmp vih

138 0249 3D 1970 go13: cmp AX, 1970h ;p->з

139 024C 75 08 jne go14

140 024E 26: C7 07 19A7 mov word ptr ES:[BX], 19A7h

141 0253 EB 32 90 jmp vih

142

143 0256 3D 3042 go14: cmp AX, 3042h ;B->И

144 0259 75 08 jne go15

145 025B 26: C7 07 3088 mov word ptr ES:[BX], 3088h

146 0260 EB 25 90 jmp vih

147 0263 3D 3062 go15: cmp AX, 3062h ;b->и

148 0266 75 08 jne go16

149 0268 26: C7 07 30A8 mov word ptr ES:[BX], 30A8h

150 026D EB 18 90 jmp vih

151

152 0270 3D 1352 go16: cmp AX, 1352h ;R->К

153 0273 75 08 jne go17

154 0275 26: C7 07 138A mov word ptr ES:[BX], 138Ah

155 027A EB 0B 90 jmp vih

156 027D 3D 1372 go17: cmp AX, 1372h ;r->к

157 0280 75 05 jne vih

158 0282 26: C7 07 13AA mov word ptr ES:[BX], 13AAh

159

160 0287 C6 06 010Cr 00 vih: mov caps, 0

161 028C 1F pop DS

162 028D 07 pop ES

163 028E 5B pop BX

164 028F 58 pop AX

165 0290 new_09h endp

166

167 ;Новый обработчик прерывания 2Fh

168

169 0290 new_2Fh proc

170 0290 80 FC FF cmp AH, 0FFh ;наша функция?

171 0293 75 3B jne vihod ;нет - на старый обработчик

172 0295 3C 00 cmp AL, 0 ;подфункция проверки, загружен ли резидент в память?

173 0297 74 07 je install

174 0299 3C 01 cmp AL, 1 ;подфункция выгрузки из памяти?

175 029B 74 07 je uninstall

176 029D EB 31 90 jmp vihod ;нет - на старый обработчик

177

178 02A0 B8 5353 install: mov AX, 'SS' ;вернём SS, если резидент загружен в память

179 02A3 CF iret

180

181 02A4 1E uninstall: push DS

182 02A5 06 push ES

183 02A6 52 push DX

184

185 02A7 B4 25 mov AH, 25h ;восстановим 9-е прерывание

186 02A9 B0 09 mov AL, 09h

187 02AB 2E: C5 16 0107r lds DX, CS:old_09h

188 02B0 CD 21 int 21h

189

190 02B2 B4 25 mov AH, 25h ;восстановим прерывание 2Fh

191 02B4 B0 2F mov AL, 2Fh

192 02B6 2E: C5 16 0103r lds DX, CS:old_2Fh

193 02BB CD 21 int 21h

194

195 02BD 2E: 8E 06 002C mov ES, CS:2Ch ;загрузим в ES адрес окружения

196 02C2 B4 49 mov AH, 49h ;выгрузим из памяти окружение

197 02C4 CD 21 int 21h

198

199 02C6 0E push CS

200 02C7 07 pop ES ;в ES - адрес резидентной проги

201 02C8 B4 49 mov AH, 49h ;выгрузим из памяти резидент

202 02CA CD 21 int 21h

203 02CC 5A pop DX

204 02CD 07 pop ES

205 02CE 1F pop DS

206 02CF CF iret

207

208 02D0 2E: FF 2E 0103r vihod: jmp CS:old_2Fh ;вызов старого обработчика

209 02D5 new_2Fh endp

210

211 =CODE:02D5 end_res=$

212 02D5 start endp

213

214 ;Инициализация

215

216 02D5 init proc

217 02D5 E8 005A call param

218 02D8 E8 0000 call load_tsr

219 02DB init endp

220

221 ;Загрузчик резидента память

222

223 02DB load_tsr proc

224 02DB B8 FF00 mov AX, 0FF00h

225 02DE CD 2F int 2Fh ;проверка на наличие резидента в памяти

226 02E0 3D 5353 cmp AX, 'SS' ;если вернули АА - резидент в памяти

227 02E3 74 41 je installed

228 02E5 B4 35 mov AH, 35h ;получим адрес

229 02E7 B0 2F mov AL, 2Fh ;обработчика прерывания 2Fh

230 02E9 CD 21 int 21h

231

232 02EB 2E: 89 1E 0103r mov word ptr CS:old_2Fh, BX ;запишем смещение старого обработчика

233 02F0 2E: 8C 06 0105r mov word ptr CS:old_2Fh + 2, ES ;запишем сегмент

234

235 02F5 B4 25 mov AH, 25h ;установим новый адрес

236 02F7 B0 2F mov AL, 2Fh ;обработчика прерывания 2Fh

237 02F9 BA 0290r mov DX, offset new_2Fh

238 02FC CD 21 int 21h

239

240 02FE B4 35 mov AH, 35h ;получим адрес обработчика

241 0300 B0 09 mov AL, 09h ;9-го прерывания

242 0302 CD 21 int 21h

243

244 0304 2E: 89 1E 0107r mov word ptr CS:old_09h, BX

245 0309 2E: 8C 06 0109r mov word ptr CS:old_09h + 2, ES

246

247 030E B4 25 mov AH, 25h ;установим новый адрес

248 0310 B0 09 mov AL, 09h ;обработчика прерывания 09h

249 0312 BA 010Dr mov DX, offset new_09h

250 0315 CD 21 int 21h

251

252 0317 B4 09 mov AH, 09h

253 0319 BA 0394r mov DX, offset tsr_load

254 031C CD 21 int 21h

255

256 031E B8 3100 mov AX, 3100h ;выйти из программы и оставить в ОП её резидентную часть

257 0321 BA 002E mov DX, (end_res-start+10Fh)/16 ;размер резидента

258 0324 CD 21 int 21h

259

260 0326 B4 09 installed: mov AH, 09h

261 0328 BA 03AAr mov DX, offset tsr_error

262 032B CD 21 int 21h

263 032D B8 4C01 mov AX, 4C01h ;выйти из программы с кодом ошибки 1

264 0330 CD 21 int 21h

265 0332 load_tsr endp

266

267 ;Определение параметров запуска

268

269 0332 param proc

270 0332 06 push ES

271 0333 33 C9 xor CX, CX

272 0335 26: 8A 0E 0080 mov CL, ES:[80h]

273 033A 80 F9 00 cmp CL, 0

274 033D 74 47 je konec

275 033F BE 0081 mov SI, 81h

276

277 0342 26: 8A 04 prob: mov AL, ES:[SI]

278 0345 3C 20 cmp AL, ' '

279 0347 75 03 jne vih1

280 0349 46 inc SI

281 034A E2 F6 loop prob

282

283 034C 26: 8A 04 vih1: mov AL, ES:[SI]

284 034F 3C 00 cmp AL, 0

285 0351 74 33 je konec

286 0353 3C 2F cmp AL, '/'

287 0355 75 31 jne error_p

288 0357 46 inc SI

289 0358 FE C9 dec CL

290 035A 26: 8A 04 mov AL, ES:[SI]

291 035D 3C 3F cmp AL, '?'

292 035F 75 27 jne error_p

293 0361 46 inc SI

294 0362 FE C9 dec CL

295 0364 80 F9 00 cmp CL, 0

296 0367 74 00 je sprav

297

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