Листинг (КП - неизвестно что 4)

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

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

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

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

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

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

_________________________________________________________________

Утверждаю:

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

"__"_____________2014 г.

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

«Резидентная программа (TSR)»

Листинг программы

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

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

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

16

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

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

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

_____________________

Зайков С.А.

"__"_____________2014 г.

Москва - 2014

________________________________________________________________



Turbo Assembler Version 3.1 04/18/14 08:08:07 Page 1

kurs1.asm

1 0000 .model tiny ; tiny модель памяти

2 .286 ; рассчитан на семейство 286 процессоров

3

4 0000 codeSegment SEGMENT 'code'

5

6 ASSUME CS:codeSegment, DS:codeSegment

7 ORG 100h ; для работы com-файла

8

9 0100 start:

10 0100 E9 028F jmp init ; начинаем работу с процедуры init

11

12 ; +

13

14 ================================

15 ; =============================================== Блок данных (переменных) +

16 =======================================================

17 ; +

18

19 ================================

20

21 ; +

22 --------------------------------------------------------------

23 -----

24 ; ---------------------------- Блок с различными сообщениями от TSR +

25 -----------------------------------

26 ; +

27 --------------------------------------------------------------

28 -----

29 0103 0A 0D 90 A5 A7 A8 A4+ msg_unload db 10, 13, 'Резидент выгружен', 10, 13, '$'

30 A5 AD E2 20 A2 EB A3+

31 E0 E3 A6 A5 AD 0A 0D+

32 24

33 0119 90 A5 A7 A8 A4 A5 AD+ msg_alreadyLoaded db 'Резидент уже в памяти$'

34 E2 20 E3 A6 A5 20 A2+

35 20 AF A0 AC EF E2 A8+

36 24

37

38 ; +

39 --------------------------------------------------------------

40 -----

41 ; ----------------------------- Здесь хранятся адреса на старые прерывания +

42 ----------------------------

43 ; +

44 --------------------------------------------------------------

45 -----

46 012F 0000 int2Fh_offset dw 0

47 0131 0000 int2Fh_segment dw 0

48

49 0133 0000 int09h_offset dw 0

50 0135 0000 int09h_segment dw 0

51

52 0137 0000 int1Ch_offset dw 0

53 0139 0000 int1Ch_segment dw 0

54

55 ; +

56 ------------------------------------------------------------------------------------------------

57 -----

Turbo Assembler Version 3.1 04/18/14 08:08:07 Page 2

kurs1.asm

58 ; ------------------------------Все для работы с таймером +

59 --------------------------------------------

60 ; +

61 --------------------------------------------------------------

62 -----

63 013B 87 A0 A9 AA AE A2 20+ tmr_msg db 'Зайков ИУ5-42 Вариант 9', 10, 13, '$'

64 88 93 35 2D 34 32 20+

65 82 A0 E0 A8 A0 AD E2+

66 20 39 0A 0D 24

67 0155 00 tmr_active db 0 ; 0 - таймер выключен, все остальное -

68 включен

69 0156 0000 tmr_time dw 0 ; время с момента старта +

70 таймера

71 =0043 tmr_key equ 43h ; Скан код F9, которая вызывает таймер

72 =1B58 tmr_timeAll equ 7000 ; количество миллисекунд таймера

73

74 ; +

75 --------------------------------------------------------------

76 -----

77 ; ----------------------------------Все для работы с курсивной +

78 буквой----------------------------------

79 ; +

80 --------------------------------------------------------------

81 -----

82 0158 00 kurs_active db 0 ; 0 - флаг выключен, иначе - включен

83 =003B kurs_key equ 3Bh ; Скан код F1

84 =0088 kurs_symbolIndex equ 88h ; буква, для замены

85

86 0159 00 kurs_symbolNew db 00000000b

87 015A 00 db 00000000b

88 015B 00 db 00000000b

89 015C 33 db 00110011b

90 015D 33 db 00110011b

91 015E 33 db 00110011b

92 015F 37 db 00110111b

93 0160 6F db 01101111b

94 0161 7B db 01111011b

95 0162 73 db 01110011b

96 0163 E6 db 11100110b

97 0164 C6 db 11000110b

98 0165 C6 db 11000110b

99 0166 00 db 00000000b

100 0167 00 db 00000000b

101 0168 00 db 00000000b

102

103 ; +

104 --------------------------------------------------------------

105 -----

106 ; -------------------------------------- Все для работы с руссификацией +

107 -------------------------------

108 ; +

109 --------------------------------------------------------------

110 -----

111 0169 00 russ_active db 0 ; 0 – флаг выключен, иначе - включен

112 =003C russ_key equ 3Ch ; Скан код F2

113

114 016A 25 2F 15 24 22 00 russ_scancode db 25h, 2Fh, 15h, 24h, 22h, 0 ; скан-код клавиш, для которых +

Turbo Assembler Version 3.1 04/18/14 08:08:07 Page 3

kurs1.asm

115 нужна руссификация. Ноль - конец последовательности

116 0170 8B 8C 8D 8E 8F russ_ascii db 8Bh, 8Ch, 8Dh, 8Eh, 8Fh ; ANSI +

117 клавиш

118

119 ; +

120 --------------------------------------------------------------

121 -----

122 ; ----------------------Все для работы с заменой/ограничением +

123 -------------------

124 ; +

125 --------------------------------------------------------------

126 -----

127 0175 00 ignore_active db 0 ; 0 - выключено, иначе - включено

128 =003D ignore_key equ 3Dh ;Скан код F3

129 0176 61 62 63 64 65 66 67+ ignore_table db 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', +

130 68 69 6A 6B 6C 6D 6E+ 0 ;игнорируемые значения

131 6F 70 71 72 73 74 75+

132 76 77 78 79 7A 41 42+

133 43 44 45 46 47 48 49+

134 4A 4B 4C 4D 4E 4F 50+

135 51 52 53 54 55 56 57+

136 58 59 5A 00

137

138 ; +

139

140 ================================

141 ; ============================================= Конец блока данных +

142

143 ; +

144

145 ================================

146

147

148

149

150 ; +

151 --------------------------------------------------------------

152 ----------

153 ; отменяет последний введенный символ, если он из ignore_table

154 ; +

155 --------------------------------------------------------------

156 ----------

157

158 01AB ignoreLetter PROC

159 01AB 50 push AX

160 01AC B8 0040 mov AX, 40h ; 40h- флаги состояния клавиатуры

161 01AF 8E C0 mov ES, AX

162 01B1 26: 8B 1E 001C mov BX, ES:[1Ch] ;адрес конца

163 01B6 83 EB 02 sub BX, 2 ; смотрим последний символ

164 01B9 83 FB 1E cmp BX, 1Eh ; выход за буфер?

165 01BC 73 03 jae il_1

166 01BE BB 003C mov BX, 3Ch ; вышел, значит последний введенный символ

167 01C1 il_1:

168

169 01C1 5A pop DX

170 01C2 26: 8B 07 mov AX, ES:[BX] ; в AX символ, DH = scan-код, DL = ASCII-код

171 01C5 3A E2 cmp AH, DL ; скан код пришедшего символа [DL] и скан-код последнего в +

Turbo Assembler Version 3.1 04/18/14 08:08:07 Page 4

kurs1.asm

172 буфере

173 01C7 75 1E jne il_exit ; не равны, значит выходим

174 01C9 B9 FFFF mov CX, 0FFFFh ; Обнулим CX

175 (FFFFh + 1 = 0)

176 01CC BA 0176r lea DX, ignore_table

177 01CF 53 push BX

178

179 01D0 il_nextLetter:

180 01D0 41 inc CX

181 01D1 8B DA mov BX, DX ; BX - адрес кода из ignore_table

182 01D3 03 D9 add BX, CX ; его сравниваем с пришедшим

183

184 01D5 80 3F 00 cmp byte ptr [BX], 0 ; если конец последовательности

185 01D8 74 0B je il_exitPop ; выходим

186

187 01DA 38 07 cmp byte ptr [BX], AL ; ASCII-код ignore_table не равен ASCII-коду+

188 в AL

189 01DC 75 F2 jne il_nextLetter ; переходим к последующему символу

190

191 01DE 5B pop BX

192 01DF 26: 89 1E 001C mov ES:[1Ch], BX ; блокируем ввод символа

193 01E4 C3 ret

194 01E5 il_exitPop:

195 01E5 5B pop BX

196 01E6 C3 ret

197 01E7 il_exit:

198 01E7 C3 ret

199 01E8 ignoreLetter ENDP

200

201 ; ---------------------------------------------------------------------------

202 ; Забирает

203 ; Скан-код клавиши в AL

204

205 ; Если нажат шифт и один из скан-кодов (russ_scancode), помещает в буфер ASCII код (russ_ascii)

206 ;то возвращает

207 ; AL = 0, если успешно, иначе - неудача

208 ; ---------------------------------------------------------------------------

209

210 01E8 russLetter PROC

211 01E8 50 push AX ; в AL будет скан-код, поэтому сохраним AX

212 01E9 B4 02 mov AH, 02h ; загрузим флаги клавиатуры

213 01EB CD 16 int 16h

214 01ED 24 03 and AL, 00000011b ; shift нажат?

215 01EF 3C 00 cmp AL, 0 ; если AL == 0, значит shift НЕ нажат

216 01F1 58 pop AX ; достаем AX

217 01F2 74 24 je rl_exitFail ; если AL = 0 - выходим

218

219 01F4 BA 016Ar lea DX, russ_scancode ; DX = адрес russ_scancode

220 01F7 B9 FFFF mov CX, 0FFFFh ; обнулим CX, +

221 (FFFFh + 1 = 0)

222

223 01FA rl_nextLetter:

224 01FA 41 inc CX

225 01FB 8B DA mov BX, DX ; в BX - адрес кода из russ_scancode

226 01FD 03 D9 add BX, CX ; сравниваем с пришедшим

227

228 01FF 80 3F 00 cmp byte ptr [BX], 0 ; последовательность завершена ->

Turbo Assembler Version 3.1 04/18/14 08:08:07 Page 5

kurs1.asm

229 0202 74 14 je rl_exitFail ; выходим

230

231 0204 38 07 cmp byte ptr [BX], AL ; если скан-код из russ_scancode не равен +

232 скан-коду в AL

233 0206 75 F2 jne rl_nextLetter ; переходим к следующему символу

234

235 0208 BB 0170r lea BX, russ_ascii ; BX = адрес russ_ascii

236 020B 03 D9 add BX, CX ; Добавляем ему число, равное количеству пройденных шагов, +

237 что бы перевести в соответствующий ASCII-код

238 020D 8A 07 mov AL, byte ptr [BX] ; AL = нужный ASCII-код

239

240 020F B4 05 mov AH, 05h ; добавление в буфер

241 0211 8A C8 mov CL, AL ; ASCII-код в буфер

242 0213 B5 00 mov CH, 0 ; scan-код добавляемого символа, но т.к. добавляем сразу +

243 ASCII, обнулим

244 0215 CD 16 int 16h ; помещаем в буфер. После вызова AL = 0 - успех, иначе AL = 1

245 0217 C3 ret ; выходим

246 0218 rl_exitFail:

247 0218 B0 02 mov AL, 2

248 021A C3 ret

249 021B russLetter ENDP

250

251 ; -----------------------------------------------------------------------------------

252 ; Прерывание 09h обрабатывает нажатие клавиши на клавиатуре

253 ; -----------------------------------------------------------------------------------

254

255 021B new_09h PROC

256 021B 50 push AX ; сохраним регистры

257 021C 53 push BX

258 021D 06 push ES

259 021E 1E push DS

260

261 021F 0E push CS ; DS = CS, т.к. данные

262 0220 1F pop DS ; в CS сегменте

263

264 0221 E4 60 in AL, 60h ; в AL скан-код нажатой клавиши

265

266 0223 3C 43 cmp AL, tmr_key ; нажата хотя бы одна из функциональных клавиш

267 0225 74 0F je new09h_goFarExit ; то выйдем. Обрабатывать "нажатие" будем, при пришествии +

268 сообщение об

269 0227 3C 3B cmp AL, kurs_key ; отпускании клавиши

270 0229 74 0B je new09h_goFarExit

271 022B 3C 3C cmp AL, russ_key

272 022D 74 07 je new09h_goFarExit

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