Док 7 - Текст программы (КП - управление цветом экрана)

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

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

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

Онлайн просмотр документа "Док 7 - Текст программы"

Текст из документа "Док 7 - Текст программы"

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

_________________________________________________________________

Утверждаю:

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

"__"_____________2005 г.

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

«Управление цветом фона экрана»

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

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

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

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

9

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

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

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

_____________________

Абламцев Д. М.

"__"_____________2005 г.





Москва - 2005

________________________________________________________________

Файл bkgtsr.lst

Turbo Assembler Version 4.1 21/11/05 14:20:36 Page 1

bkgtsr.asm

1 ; Резидентная программа для изменения цвета фона по нажатию клавишы

2 ; Выполнил: Абламцев Д. М. (Oman) (Группа ИУ5-53, вар №1)

3 ; Фаил: bkgtsr.asm

4 ; Дата: 18.10.05

5 ; Версия: 1.00.051018

6

7 0000 cseg segment

8 assume cs:cseg, ds:cseg, ss:cseg, es:cseg

9 org 100h

10

11 0100 BEGIN:

12 0100 E9 00C7 jmp INIT

13

14 0103 00 background_colour db 0 ; цвет фона

15 0104 00 screen_width db 0 ; ширина экрана

16 0105 00000000 old_09h dd 0 ; адрес старого обработчика 09h прерывания.

17 0109 00000000 old_2fh dd 0 ; адрес старого обработчика 2Fh прерывания.

18

19

20 ; новый обработчик 2Fh прерывания (multiplex interrupt)

21 ; пользовательский запрос AH=0xAAxx, где xx - запрашиваемая функция.

22 ; хх=00 - проверка на загрузку программы, если программа уже есть в памяти то на выходе AL=0xAA

23 ; xx=01 - выгрузка прораммы, если программа удачно выгружена из памяти, то на выходе AL=0хАА

24 010D NEW_2FH proc

25 010D 80 FC AA cmp AH, 0AAH ;Пользовательская ли функция прерывания 2FH?

26 0110 74 05 je my_func_int2Fh

27 0112 2E: FF 2E 0109r jmp CS:old_2FH ; какая-то из старых функции (запуск старого обработчика)

28

29 0117 my_func_int2Fh:

30 0117 3C 00 cmp AL, 00H ;Проверка на установку

31 0119 74 09 je int2Fh_inst

32

33 011B 3C 01 cmp AL, 01H ;Проверка на ыыгрузку

34 011D 74 08 je int2Fh_unins

35

36 011F 2E: FF 2E 0109r jmp CS:old_2FH ; запуск старого обработчика

37

38 0124 int2Fh_inst:

39 0124 B0 AA mov AL, 0AAH ;Возврат обозначает что резидентная программа

40 0126 CF iret ;уже установлена (0хАА)

41

42 0127 int2Fh_unins:

43 0127 1E push DS

44 0128 06 push ES

45

46 0129 B4 25 mov AH, 25H ;Восстановление обработчика прерывания 09H

47 012B B0 09 mov AL, 09H

48 012D 2E: C5 16 0105r lds DX, CS:old_09H

49 0132 CD 21 int 21H

50

51 0134 B4 25 mov AH, 25H ;Восстановление обработчика прерывания 2FH

52 0136 B0 2F mov AL, 2FH

53 0138 2E: C5 16 0109r lds DX, CS:old_2FH

54 013D CD 21 int 21H

55

56 013F 2E: 8E 06 002C mov ES, CS:2CH ;Выгрузка собственного окружения.(берем из PSP)

57 0144 B4 49 mov AH, 49H

58 0146 CD 21 int 21H

59

60 0148 0E push CS ;выгрузка кода программы

61 0149 07 pop ES

62 014A B4 49 mov AH, 49H

63 014C CD 21 int 21H

64

65 014E 07 pop ES

66 014F 1F pop DS

67 0150 B0 AA mov AL, 0AAH ; все ок

68 0152 CF iret

69 0153 NEW_2FH endp

70

71 ; новый обработчик 09h прерывания (keyboard interrupt)

72 ; запускается только если нажаты кнопки B R G,

73 ; в противном случае - сразу запускает старый обработчик прерывания.

74 0153 NEW_09H proc

75 0153 9C pushf

76 0154 50 push AX

77 0155 E4 60 in AL, 60h ; считать из порта клавиатуры скан код нажатой +

78 клавишы

79 0157 2E: C6 06 0103r 10 mov CS:background_colour, 10h ; фон - синий

80 015D 3C 30 cmp AL, 30h ; scan-код клавиши B

81 015F 74 1D je captured

82 0161 2E: C6 06 0103r 20 mov CS:background_colour, 20h ; фон - зеленый

83 0167 3C 22 cmp AL, 22h ; scan-код клавиши G

84 0169 74 13 je captured

85 016B 2E: C6 06 0103r 40 mov CS:background_colour, 40h ; фон - красный

86 0171 3C 13 cmp AL, 13h ; scan-код клавиши R

87 0173 74 09 je captured

88 0175 2E: C6 06 0103r 00 mov CS:background_colour, 00h

89 017B EB 37 90 jmp not_captured ; нужные клавишы не были нажаты

90

91 017E captured: ; изменение фона

92 017E 53 push BX

93 017F 51 push CX

94 0180 52 push DX

95 0181 1E push DS

96 0182 57 push DI

97

98 0183 BF 0001 mov DI,1

99 0186 B8 B800 mov AX, 0b800h

100 0189 8E D8 mov DS, AX

101 018B E8 002E call READ_VIDEO_MODE ; считываем текущий видео режим

102 018E 33 D2 xor DX, DX ; курсор в точку 0,0

103

104 0190 full_scr:

105 0190 8A 05 mov AL,DS:[DI]

106 0192 24 0F and AL,0Fh

107 0194 2E: 0A 06 0103r or AL,CS:background_colour

108 0199 88 05 mov DS:[DI],AL

109 019B 47 inc DI

110 019C 47 inc DI

111 019D FE C2 inc DL

112 019F 2E: 3A 16 0104r cmp DL, CS:screen_width ; прошли строчку?

113 01A4 75 EA jnz full_scr

114 01A6 32 D2 xor DL, DL

115 01A8 FE C6 inc DH

116 01AA 80 FE 19 cmp DH, 25 ; все 25 строк?

117 01AD 75 E1 jnz full_scr

118

119 01AF 5F pop DI

120 01B0 1F pop DS

121 01B1 5A pop DX

122 01B2 59 pop CX

123 01B3 5B pop BX

124 01B4 not_captured:

125 01B4 58 pop AX

126 01B5 9D popf

127 01B6 2E: FF 2E 0105r jmp CS:old_09h ; запустить старый обработчик

128 01BB CF iret

129 01BC NEW_09H endp

130

131

132 ; функция получения текущего видео режима

133 ; входные данные:

134 ; нет

135 ; выходные данные:

136 ; cur_page - текущая видео страница

137 ; screen_width - ширина экрана

138 01BC READ_VIDEO_MODE proc

139 01BC 50 push AX

140 01BD 53 push BX

141 01BE B4 0F mov AH, 0Fh ; func: read video mode

142 01C0 CD 10 int 10h ; int: video services

143 01C2 2E: 88 26 0104r mov CS:screen_width, AH

144 01C7 5B pop BX

145 01C8 58 pop AX

146 01C9 C3 ret

147 01CA READ_VIDEO_MODE endp

148

149 ; инициализация резидентной прораммы

150 ; (первый запуск)

151 01CA INIT:

152 01CA 26: 8A 0E 0080 mov CL, ES:80H

153 01CF 80 F9 00 cmp CL, 0 ; есть параметры командной строки?

154 01D2 74 1F je no_info ; нету

155

156 01D4 32 ED xor CH, CH ; есть

157 01D6 BF 0081 mov DI, 81H

158

159 01D9 B0 20 mov AL, ' '

160 01DB F3> AE repe scasb ;пропускаем пробелы

161 01DD 4F dec DI

162

163 01DE 26: 8A 05 mov AL, ES:[DI] ;проверяем на '/?' и '/?'

164 01E1 3C 2F cmp AL, '/'

165 01E3 75 50 jne wrong_parametr

166 01E5 47 inc DI

167 01E6 26: 8A 05 mov AL, ES:[DI]

168 01E9 3C 3F cmp AL, '?'

169 01EB 75 48 jne wrong_parametr ; неизвестный параметр

170

171 01ED BA 02B8r mov DX, offset mes_info ; вывести информацию о программе

172 01F0 E8 0065 call STR_OUT

173

174 01F3 no_info:

175 01F3 B8 AA00 mov AX, 0AA00h ; проверить не загружен ли уже резидент

176 01F6 CD 2F int 2Fh

177 01F8 3C AA cmp AL, 0AAh

178 01FA 74 51 je already_load ; уже загружен!

179

180 01FC load_resident: ; загрузка

181 01FC B4 35 mov AH, 35H ; сохранение адреса старого обработчика прерывания 2FH

182 01FE B0 2F mov AL, 2FH

183 0200 CD 21 int 21H

184 0202 89 1E 0109r mov word ptr old_2FH, BX

185 0206 8C 06 010Br mov word ptr old_2FH+2, ES

186

187 020A B4 25 mov AH, 25H ; назначение нового обработчика прерывания 2FH

188 020C B0 2F mov AL, 2FH ; (функция new_2FH)

189 020E BA 010Dr mov DX, offset new_2FH

190 0211 CD 21 int 21H

191

192 0213 B4 35 mov AH, 35H ; сохранение адреса старого обработчика прерывания 09H

193 0215 B0 09 mov AL, 09H

194 0217 CD 21 int 21H

195 0219 89 1E 0105r mov word ptr old_09H, BX

196 021D 8C 06 0107r mov word ptr old_09H+2, ES

197

198 0221 B4 25 mov AH, 25H ; назначение нового обработчика прерывания 09H

199 0223 B0 09 mov AL, 09H ; (функция new_09H)

200 0225 BA 0153r mov DX, offset NEW_09H

201 0228 CD 21 int 21H

202

203 022A BA 025Fr mov DX, offset mes_load ; выдать сообщение о загрузке

204 022D E8 0028 call STR_OUT

205

206 0230 BA 01CAr mov DX, offset init ; выход невыгружая резидентную часть программы

207 0233 CD 27 int 27h ; int: terminate but stay resident

208

209 0235 wrong_parametr: ; не верный параметр командной строки

210 0235 BA 0433r mov DX, offset mes_wr_par ; выдать сообщение об ошибке

211 0238 E8 001D call STR_OUT

212 023B B8 AA00 mov AX, 0AA00h ; проверить загружен ли уже резидент

213 023E CD 2F int 2Fh

214 0240 3C AA cmp AL, 0AAh

215 0242 74 09 je already_load ; уже загружен

216 0244 BA 047Ar mov DX, offset mes_not_load ; не загружен, выдать об этом сообщение

217 0247 E8 000E call STR_OUT

218 024A EB 07 90 jmp exit ; выход

219

220 024D already_load: ; резидент уже находится в памяти

221 024D BA 028Er mov DX, offset mes_already_load ; выдать сообщение об этом

222 0250 E8 0005 call STR_OUT

223 0253 exit: ; полный выход

224 0253 B8 4C00 mov AX, 4C00H ; выход с полной выгрузкой текущей копии программы

225 0256 CD 21 int 21H

226

227 ; функция вывода строки на экран

228 ; входные данные:

229 ; DX - адрес строки

230 ; выходные данные:

231 ; нет

232 0258 STR_OUT proc

233 0258 50 push AX

234 0259 B4 09 mov AH, 09h

235 025B CD 21 int 21h

236 025D 58 pop AX

237 025E C3 ret

238 025F STR_OUT endp

239

240 025F 54 68 65 20 72 65 73+ mes_load db 'The resident programm was succesfully loaded',0Ah,0Dh,'$'

241 69 64 65 6E 74 20 70+

242 72 6F 67 72 61 6D 6D+

243 20 77 61 73 20 73 75+

244 63 63 65 73 66 75 6C+

245 6C 79 20 6C 6F 61 64+

246 65 64 0A 0D 24

247 028E 54 68 65 20 72 65 73+ mes_already_load db 'The resident programm is already loaded',0Ah,0Dh,'$'

248 69 64 65 6E 74 20 70+

249 72 6F 67 72 61 6D 6D+

250 20 69 73 20 61 6C 72+

251 65 61 64 79 20 6C 6F+

252 61 64 65 64 0A 0D 24

253 02B8 2D 2D 2D 2D 2D 2D 2D+ mes_info db '-------------------------------------------------------',0Ah, +

254 2D 2D 2D 2D 2D 2D 2D+ 0Dh,'This is resident programm for changing background colour',0Ah,0Dh,'Press G - for green +

255 2D 2D 2D 2D 2D 2D 2D+ colour',0Ah,0Dh,'Press R - for red colour',0Ah,0Dh,'Press B - for blue colour',0Ah,0Dh, +

256 2D 2D 2D 2D 2D 2D 2D+ 'bkgtsr.com - itself resident programm',0Ah,0Dh,'unldtsr.exe - tool for unload this resident +

257 2D 2D 2D 2D 2D 2D 2D+ programm',0Ah,0Dh,'Coded by Ablamtsev Dm. (Oman)',0Ah,0Dh, +

258 2D 2D 2D 2D 2D 2D 2D+ '-------------------------------------------------------',0Ah,0Dh,'$'

259 2D 2D 2D 2D 2D 2D 2D+

260 2D 2D 2D 2D 2D 2D 0A+

261 0D 54 68 69 73 20 69+

262 73 20 72 65 73 69 64+

263 65 6E 74 20 70 72 6F+

264 67 72 61 6D 6D 20 66+

265 6F 72 20 63 68 61 6E+

266 67 69 6E 67 20 62 61+

267 63 6B 67 72 6F 75 6E+

268 64 20 63 6F 6C 6F 75+

269 72 0A 0D 50 72 65 73+

270 73 20 47 20 2D 20 66+

271 6F 72 20 67 72 65 65+

272 6E 20 63 6F 6C 6F 75+

273 72 0A 0D 50 72 65 73+

274 73 20 52 20 2D 20 66+

275 6F 72 20 72 65 64 20+

276 63 6F 6C 6F 75 72 0A+

277 0D 50 72 65 73 73 20+

278 42 20 2D 20 66 6F 72+

279 20 62 6C 75 65 20 63+

280 6F 6C 6F 75 72 0A 0D+

281 62 6B 67 74 73 72 2E+

282 63 6F 6D 20 20 2D 20+

283 69 74 73 65 6C 66 20+

284 72 65 73 69 64 65 6E+

285 74 20 70 72 6F 67 72+

286 61 6D 6D 0A 0D 75 6E+

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