-4. Текст Программы (КП - загрузчик шрифта, 1 вариант)

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

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

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

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

Текст из документа "-4. Текст Программы"

9


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

____________________________________________________________________

Утверждаю:

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

"__"_____________2002 г.

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

Загрузчик текстового шрифта в память дисплея ”

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

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

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

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

7

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

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

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

_____________________

Свиридов А.С.

"__"_____________2002 г.





Москва - 2002

________________________________________________________________

1 ; Резидентная программа загрузки шрифта в память дисплея

Turbo Assembler Version 4.1 15/12/02 23:49:11 Page 1

font.ASM

1 ; Резидентная программа загрузки шрифта в память дисплея

2 0000 text segment 'code'

3 assume CS:text,DS:text

4 org 100h

5

6 .186

7 ; *************** Основная процедура *****************

8 0100 main proc far

9 0100 E8 01B9 call Init ; вызываем инициализацию

10 include TSR.inc ; включаем резидентные подпрограммы и данные

1 11 ; ------- Код для резидентной части ------

1 12 ; ********** Новый обработчик мультиплексного прерывания 2Fh **********

1 13 ; * Используется для управления программой извне. *

1 14 ; * Вход: АН=0CDh - перехватываемая функция. *

1 15 ; * AL: запрашиваемое действие *

1 16 ; * AL=00: проверка на установленность. Выход: AL=01: загружена *

1 17 ; * AL=01: выгрузить программу. Выход: AL=00: успех, AL=0E: неудача *

1 18 ; *********************************************************************

1 19 0103 New_2Fh proc near

1 20 0103 80 FC CD cmp AH, 0CDh ; Наша функция?

1 21 0106 75 09 jne CallStandart ; Нет-вызываем стандартный обработчик

1 22 0108 3C 00 cmp AL, 00h ; проверка на установленность

1 23 010A 74 0A je Loaded

1 24 010C 3C 01 cmp AL, 01h ; выгрузить программу

1 25 010E 74 09 je UnLoad

1 26 0110 CF iret ; ###

1 27 0111 CallStandart:

1 28 ; Используем jmp, чтобы не связываться со стеком. В этом случае после

1 29 ; отработки системного обработчика в наш управление не возвращается.

1 30 0111 2E: FF 2E 0212r jmp CS:Old_2Fh ; вызываем стандартный обработчик

1 31 0116 Loaded:

1 32 0116 B0 01 mov AL, 01h ; да, прога уже установлена

1 33 0118 CF iret

1 34 0119 UnLoad: ; выгрузить программу

1 35 0119 1E 06 53 51 52 push DS ES BX CX DX ; сохраним используемые регистры

1 36 011E B0 0E mov AL, 0Eh ; пишем код ошибки при выгрузке

1 37 0120 E8 002D call CheckIfLast ; проверяем, можно ли выгружать

1 38 0123 3C 0E cmp AL, 0Eh ; нельзя-на выход

1 39 0125 74 23 je Finish_New_2Fh

1 40 ; восстанавливаем перехваченные векторы

1 41 ; восстанавливаем 09h

1 42 0127 B8 2509 mov AX, 2509h ; 25-установка вектора, 09-номер

1 43 012A 2E: C5 16 0216r lds DX, CS:Old_09h ; DS:=HIBYTE(Old_09h), DX:=LOBYTE(Old_09h)

1 44 012F CD 21 int 21h

1 45 ; восстанавливаем 2Fh

1 46 0131 B8 252F mov AX, 252Fh ; 25-установка вектора, 2F-номер

1 47 0134 2E: C5 16 0212r lds DX, CS:Old_2Fh ; DS:=HIBYTE(Old_2Fh), DX:=LOBYTE(Old_2Fh)

1 48 0139 CD 21 int 21h

1 49 ; Получим из PSP адрес собственного окружения и выгрузим его

1 50 013B 2E: 8E 06 002C mov ES,CS:2Ch

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

1 52 0142 CD 21 int 21h

1 53 ; а теперь выгрузим саму программу

1 54 0144 0E push CS

1 55 0145 07 pop ES ; ES:=CS-указывает на PSP

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

1 57 0148 CD 21 int 21h

Turbo Assembler Version 4.1 15/12/02 23:49:11 Page 2

font.ASM

1 58 014A Finish_New_2Fh:

1 59 014A 5A 59 5B 07 1F pop DX CX BX ES DS ; восстанавливаем используемые регистры

1 60 014F CF iret

1 61 0150 New_2Fh endp

1 62

1 63 ; *********** Проверка, является ли наш вектор 09h последним ***********

1 64 ; * Только в этом случае возможна корректная выгрузка *

1 65 ; * Т.к. код ошибки уже записан в AL, при невозможности выгрузки надо *

1 66 ; * всего лишь пойти на выход. В противном случае-записать в AL ноль *

1 67 ; **********************************************************************

1 68 0150 CheckIfLast proc

1 69 ; получим в ES:BX адрес последнего вектора

1 70 0150 50 push AX ; сохраняем

1 71 0151 B4 35 mov AH, 35h

1 72 0153 B0 09 mov AL, 09h

1 73 0155 CD 21 int 21h

1 74 0157 58 pop AX

1 75 0158 81 FB 0169r cmp BX, offset New_09h

1 76 015C 75 0A jne FinCheck

1 77 015E 8C C1 mov CX,ES

1 78 0160 8C CB mov BX,CS

1 79 0162 3B CB cmp CX,BX

1 80 0164 75 02 jne FinCheck

1 81 0166 B0 00 mov AL,00

1 82 0168 FinCheck:

1 83 0168 C3 ret

1 84 0169 CheckIfLast endp

1 85

1 86 ; *********** Новый обработчик прерывания от клавиатуры 09h ***********

1 87 ; * Используется для активации замены шрифта. *

1 88 ; *********************************************************************

1 89 0169 New_09h proc near

1 90 0169 FA cli

1 91 016A 9C pushf

1 92 ; А здесь используем call, так как сначала вызываем системный

1 93 ; обработчик, а потом надо перейти в наш

1 94 016B 2E: FF 1E 0216r call CS:Old_09h

1 95 0170 50 53 51 06 push AX BX CX ES

1 96 ; получим символ из буфера

1 97 0174 B8 0040 mov AX, 40h

1 98 0177 8E C0 mov ES,AX ; по адресу 40h находятся данные БИОС

1 99 0179 26: 8B 1E 001A mov BX, ES:1ah ; адрес очередного символа

1 100 017E 26: 8B 07 mov AX, ES:[BX] ; в АХ - скан-код нажатой клавиши

1 101 0181 3D 8500 90 cmp AX, F11 ; наша ?

1 102 0185 75 03 jne Finish_New_09h ; нет-на выход

1 103 0187 E8 0006 call SwapChars ; да-заменяем шрифт

1 104 018A Finish_New_09h:

1 105 018A 07 59 5B 58 pop ES CX BX AX

1 106 018E FB sti

1 107 018F CF iret

1 108 0190 New_09h endp

1 109

1 110 ; ******* Процедура замены шрифта в зависимости от значения flag *******

1 111 0190 SwapChars proc near

1 112 0190 60 pusha

1 113 0191 06 push ES ; сохраняем регистры

1 114

Turbo Assembler Version 4.1 15/12/02 23:49:11 Page 3

font.ASM

1 115 ;mov AX,0B800h ; адрес текстовой видеопамяти

1 116 ;mov ES, AX

1 117 ;mov Ah, flag

1 118 ;mov Al, 0fh

1 119 ;mov ES:1,ax ; 0F- белый на чёрном фоне, 07-ASCII код символа

1 120

1 121 0192 80 3E 021Ar 01 cmp flag,1

1 122 0197 74 23 je LoadNew

1 123 0199 80 3E 021Ar 02 cmp flag,2

1 124 019E 74 47 je LoadOld

1 125 ; 1-й раз - сохраняем старый шрифт, потом переходим на LoadNew

1 126 01A0 1E push DS

1 127 01A1 B8 1130 mov AX,1130h

1 128 01A4 B7 01 mov BH, 01h ; Получаем адрес старого шрифта

1 129 01A6 CD 10 int 10h

1 130 ; ES:BP - адрес старого шрифта

1 131 ; Для movsb надо: DS:SI-адрес источника

1 132 01A8 1E 06 push DS ES ; \ меняем содержимое

1 133 01AA 1F 07 pop DS ES ; / DS и ES местами.

1 134 01AC 8B F5 mov SI,BP

1 135 01AE 81 C6 0800 add SI,'А'*16 ; начальный символ

1 136 01B2 BF 021Br mov DI,offset oldchar

1 137 ; ES:DI-адрес приёмника

1 138 01B5 FC cld ; DF:=0 (двигаемся вперёд)

1 139 01B6 B9 0050 mov CX,16*5 ; количество повторений

1 140 01B9 F3> A4 rep movsb ; oldchar:=старый шрифт

1 141 01BB 1F pop DS ; восстанавливаем DS

1 142 01BC LoadNew:

1 143 ; рисуем символ в верхнем левом углу экрана

1 144 01BC B8 B800 mov AX,0B800h ; адрес текстовой видеопамяти

1 145 01BF 8E C0 mov ES, AX

1 146 01C1 26: C7 06 0000 0F07 mov ES:0,0F07h ; 0F- белый на чёрном фоне, 07-ASCII код символа

1 147

1 148 01C8 8C C8 mov AX, CS ; ES:=CS

1 149 01CA 8E C0 mov ES, AX

1 150

1 151 01CC B8 1110 mov AX, 1110h ; Загрузка и активация шрифта

1 152 01CF B7 10 mov BH,16 ; Высота символа

1 153 01D1 B3 00 mov BL,0 ; Блок знакогенератора

1 154 01D3 B9 0005 mov CX,5 ; Количество символов

1 155 01D6 BA 0080 mov DX,'А' ; ASCII код символа А

1 156 01D9 BD 026Br mov BP, offset newchar ; ES:BP - адрес нового шрифта

1 157 01DC CD 10 int 10h

1 158 01DE C6 06 021Ar 02 90 mov flag,2 ; Следующий раз надо будет загружать старый шрифт

1 159 01E4 EB 29 90 jmp Fin

1 160

1 161 01E7 LoadOld:

1 162 ; рисуем символ в верхнем левом углу экрана

1 163 01E7 B8 B800 mov AX,0B800h ; адрес текстовой видеопамяти

1 164 01EA 8E C0 mov ES, AX

1 165 01EC 26: C7 06 0000 0F09 mov ES:0,0F09h ; 0F- белый на чёрном фоне, 09-ASCII код символа

1 166

1 167 01F3 8C C8 mov AX, CS ; ES:=CS

1 168 01F5 8E C0 mov ES, AX

1 169

1 170 01F7 B8 1110 mov AX, 1110h ; Загрузка и активация шрифта

1 171 01FA B7 10 mov BH,16 ; Высота символа

Turbo Assembler Version 4.1 15/12/02 23:49:11 Page 4

font.ASM

1 172 01FC B3 00 mov BL,0 ; Блок знакогенератора

1 173 01FE B9 0005 mov CX,5 ; Количество символов

1 174 0201 BA 0080 mov DX,'А' ; ASCII код символа А

1 175 0204 BD 021Br mov BP, offset oldchar ; ES:BP - адрес нового шрифта

1 176 0207 CD 10 int 10h

1 177 0209 C6 06 021Ar 01 90 mov flag,1 ; Следующий раз надо будет загружать новый шрифт

1 178

1 179 020F Fin:

1 180 020F 07 pop ES

1 181 0210 61 popa ; восстанавливаем регистры

1 182 0211 C3 ret ; возврат

1 183 0212 SwapChars endp

1 184

1 185

1 186 ; +++++++ Данные резидентной части +++++++

1 187 0212 00000000 Old_2Fh dd 0

1 188 0216 00000000 Old_09h dd 0

1 189 =8500 F11 equ 8500h ; горячая клавиша

1 190 021A 00 flag db 0 ; 0=>1-й запуск; 1=>грузить новый шрифт; 2=>старый

1 191 021B 50*(00) oldchar db 80 dup(0) ; буфер для старого шрифта

1 192 ; А

1 193 026B 00 newchar db 00000000b ; новые начертания букв АБВГД

1 194 026C 00 db 00000000b

1 195 026D 00 db 00000000b

1 196 026E 3C db 00111100b

1 197 026F 42 db 01000010b

1 198 0270 42 db 01000010b

1 199 0271 42 db 01000010b

1 200 0272 7E db 01111110b

1 201 0273 42 db 01000010b

1 202 0274 42 db 01000010b

1 203 0275 42 db 01000010b

1 204 0276 00 db 00000000b

1 205 0277 FF db 11111111b

1 206 0278 00 db 00000000b

1 207 0279 00 db 00000000b

1 208 027A 00 db 00000000b

1 209 ; Б

1 210 027B 00 db 00000000b

1 211 027C 00 db 00000000b

1 212 027D 00 db 00000000b

1 213 027E 7E db 01111110b

1 214 027F 40 db 01000000b

1 215 0280 40 db 01000000b

1 216 0281 7C db 01111100b

1 217 0282 42 db 01000010b

1 218 0283 42 db 01000010b

1 219 0284 42 db 01000010b

1 220 0285 7C db 01111100b

1 221 0286 00 db 00000000b

1 222 0287 FF db 11111111b

1 223 0288 00 db 00000000b

1 224 0289 00 db 00000000b

1 225 028A 00 db 00000000b

1 226 ; В

1 227 028B 00 db 00000000b

1 228 028C 00 db 00000000b

Turbo Assembler Version 4.1 15/12/02 23:49:11 Page 5

font.ASM

1 229 028D 00 db 00000000b

1 230 028E 7C db 01111100b

1 231 028F 42 db 01000010b

1 232 0290 42 db 01000010b

1 233 0291 7C db 01111100b

1 234 0292 42 db 01000010b

1 235 0293 42 db 01000010b

1 236 0294 42 db 01000010b

1 237 0295 7C db 01111100b

1 238 0296 00 db 00000000b

1 239 0297 FF db 11111111b

1 240 0298 00 db 00000000b

1 241 0299 00 db 00000000b

1 242 029A 00 db 00000000b

1 243 ; Г

1 244 029B 00 db 00000000b

1 245 029C 00 db 00000000b

1 246 029D 00 db 00000000b

1 247 029E 7E db 01111110b

1 248 029F 40 db 01000000b

1 249 02A0 40 db 01000000b

1 250 02A1 40 db 01000000b

1 251 02A2 40 db 01000000b

1 252 02A3 40 db 01000000b

1 253 02A4 40 db 01000000b

1 254 02A5 40 db 01000000b

1 255 02A6 00 db 00000000b

1 256 02A7 FF db 11111111b

1 257 02A8 00 db 00000000b

1 258 02A9 00 db 00000000b

1 259 02AA 00 db 00000000b

1 260 ; Д

1 261 02AB 00 db 00000000b

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