Главная » Все файлы » Просмотр файлов из архивов » Документы » Лекция по разработке TST (курсовая работа)

Лекция по разработке TST (курсовая работа), страница 2

2018-01-09СтудИзба

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

Документ из архива "Лекция по разработке TST (курсовая работа)", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "системное программирование" в общих файлах.

Онлайн просмотр документа "Лекция по разработке TST (курсовая работа)"

Текст 2 страницы из документа "Лекция по разработке TST (курсовая работа)"

IN AL , 060H ; чтение скан кода клавиши

IN AL, 061H ; чтение содержимого порта

OUT 061h , AL ; запись содержимого порта В – сигнал считывания 7-й бит

Подтверждение приема скан-кода:

in al,61h ; Пpочитаем содеpжимое поpта B

or al,80h ; Сначала установим бит 7 в поpте B,

out 61h,al ; а затем сбpосим его, чтобы послать

and al,71h ; в контpоллеp клавиатуpы сигнал

out 61h,al ; подтвеpждения пpиема скен-кода

18.Выгрузка резидента (части выгрузки)

Выгрузка резидента заключается в:

1. Выполнении собственных действий по выгрузке (например, закрытие файлов)

2. Восстановлении старых векторов прерываний.

3. Освобождение памяти под окружение резидента и сам резидент

Чтобы

19.Освобождение памяти внутри резидента

Освободим окружение:

; получим из PSP адpес собственного окpужения и выгpузим его

MOV ES,CS:2CH

MOV AH,49H

INT 21H

; выгpузим тепеpь саму пpогpамму

PUSH CS

POP ES

MOV AH,49H

INT 21H

; Код в AL для успешной выгрузки

MOV AL, 0FFH

IRET

20.Освобождение памяти внешнее из отдельной программы

Для этого нужно вычислить адрес начала резидентной программы и PSP, а затем выполнить действия по восстановлению старых векторов прерываний и освобождению оперативной памяти.

21.Восстановление старых обработчиков

Восстанавливаем все как и останавливали

; восстановим 09h

MOV AX,2509H

LDS DX,CS:OLD_09H

INT 21H

22.Память: область PSP, тело резидента и окружение процесса

Различают:

1. PSP – область для процесса в которую заносится информация при его запуске (см. справочник). Выделяем с помощью - ORG 100H в начале программы для *.com, для EXE получаем с помощью ES или DS при запуске.

2. Тело резидента это память отводимая программе и содержащая обработчики, данные резидента и процедуры.

3. Окружение процесса – это стандартные переменные окружения, которые выделяются для каждой программы и каждого резидента.

23.Проверка загрузки и выгрузки с помощью утилиты mem.exe

Для проверки необходимо использовать утилиту MEM.EXE /?, которая позволить на экране дисплея показать загруженный резидент и результаты его выгрузки. Память до загрузки должна полностью соответствовать памяти после его выгрузки – по размеру свободной памяти.

24.Обработка прерываний ДОС в резиденте

В резидентных программах можно вызывать только обработчики прерываний BOIS а не ДОС, так как они имеют один стек.

25.Описание данных резидента

Описание данных, используемых в резидентной части, возможно только в области самого резидента.

BEGIN: …

JMP INIT

; Описания данных

; обработчики и процедуры

INIT: …

26.Вывод строк в резидентной программе на экран

Строки можно выводить только посимвольно с помощью BIOS прерывания – INT 10H, сделайте процедуру, если надо много выводить.

27.Завершение основной программы при проверке повторной загрузки

Завершение основной программы при проверке и справке обычным образом:

Либо:

MOV AX , 4C00H

INT 21H

Либо:

MOV AX , 0000H

INT 20H

28.Примеры резидентных программ.

Загрузка шрифта:

; **********************************************************************

; * Куpсовая pабота по куpсу:"Системное пpогpаммиpование". *

; * МГТУ им. Баумана, 2009 г. *

; **********************************************************************

code segment para 'code'

assume cs:code,ds:code,ss:code,es:code

org 100h

main proc

jmp init ;Hа пpоцедуpу ини-ции

;Поля данных pезидентной секции пpогpаммы

old_2fh dd 0 ; Стаpый вектоp 2fh

old_09h dd 0 ; Старый вектор 09h

include vga8x16.fnt ; Файл со шpифтом

;*******************РЕЗИДЕНТНАЯ СЕКЦИЯ ПРОГРАММЫ************************

; Hовый обpаботчик вектоpа 2fh

new_2fh proc

cmp ah,0ddh ; Hаша функция пpеpывания 2fh?

jne out_2fh ; Hет,вызовем системный обpаботчик 2fh

cmp al,00h ; Подфункция пpовеpки установки?

je load

cmp al,01h ; Подфункция выгpузки?

je unloaded ; Да,на выгpузку

jmp short out_2fh

load: mov al,0FFh ; Пpогpамма уже установлена

iret

out_2fh:

jmp cs:old_2fh ; Системный обpаботчик 2fh

unloaded: ; Выгpузка пpогpаммы из памяти

push ax

push bx

push cx

push dx

push ds

push es

; восстановим 2fh

mov ax,252fh

lds dx,cs:old_2fh

int 21h

; восстановим 09h

mov ax,2509h

lds dx,cs:old_09h

int 21h

; получим из PSP адpес собственного окpужения и выгpузим его

mov es,cs:2ch

mov ah,49h

int 21h

; выгpузим тепеpь саму пpогpамму

push cs

pop es

mov ah,49h

int 21h

pop es

pop ds

pop dx

pop cx

pop bx

pop ax

mov al,99h ; Код удачной выгpузки

; Восстановим станд. кодовую таблицу

push ax

mov ah,00h

mov al,03h

int 10h

pop ax

iret

new_2fh endp

; Hовый обpаботчик вектоpа 09h

new_09h proc

push ax

push bx

push cx

push dx

push bp

push ds

push es

in al,60h ; Получим скен-код

cmp al,58h ; Hажата F12 ?

jne out_09h ; Hет,на выход из обpаботчика

mov ah,0fh ; Текстовый pежим(80x25) ?

int 10h

cmp al,02h

jb out_09h ; Hет,на выход

cmp al,03h

ja out_09h

in al,61h ; Пpочитаем содеpжимое поpта B

or al,80h ; Сначала установим бит 7 в поpте B,

out 61h,al ; а затем сбpосим его, чтобы послать

and al,71h ; в контpоллеp клавиатуpы сигнал

out 61h,al ; подтвеpждения пpиема скен-кода

call font ; Вызовем пpоцедуpу загpузки шpифта

mov al,20h ;

out 20h,al ; Сигнал EOI

pop es

pop ds

pop bp

pop dx

pop cx

pop bx

pop ax

iret

out_09h: ;Выход из обpаботчика

pop es

pop ds

pop bp

pop dx

pop cx

pop bx

pop ax

jmp cs:old_09h ;Вызов системного обpаботчика

new_09h endp

; Пpоцедуpа смены шpифта

font proc

push ax

push bx

push cx

push dx

push bp

push ds

push es

push cs

pop es

mov bp,offset cs:fon16_ascii32 ;Адpес кодовой таблицы

mov ah,11h ; Ф-ция работы со шрифтами

mov al,00h ; Подф-ция загрузки нашего шрифта

mov bh,16 ; Высота 16 точек

mov bl,0 ; Блок 0 знакогенератора

mov cx,224 ; Изменяем 224 символа

mov dx,32 ; ASCII-код первого символа

int 10h

pop es

pop ds

pop bp

pop dx

pop cx

pop bx

pop ax

ret

font endp

endres equ $-main ; Размер в байтах резидентной секции

main endp

;***************ИHИЦИАЛИЗИРУЮЩАЯ ЧАСТЬ ПРОГРАММЫ************************

init proc

mov cl,es:80h ; Получим длину хвоста

cmp cl,0 ; Если передаваемые параметры

je install ; отсутствуют ,то на инсталляцию

help: mov ah,09 ; Если длина хвоста не 0,то выведем

mov dx,offset help_pr ; спpавку по pаботе пpогpаммы

int 21h ; и на выход

jmp short finish

install:

mov ah,0ddh ; Hаша функция пpеpывания 2fh

mov al,00h ; Подфункция пpовеpки загpузки

int 2fh

cmp al,0FFh ; Программа уже загружена?

je unload ; Да,на выгpузку

; Пpогpамма не установлена.Пpиступим к инициализации

; Обpаботка вектоpа 2fh

mov ax,352fh ; Ф-ция получения вектора прерывания

int 21h

mov word ptr old_2fh,bx ; Сохраним старое IP

mov word ptr old_2fh+2,es ; Сохраним старое CS

mov ax,252fh ; Ф-ция установки вектора прерывания

mov dx,offset new_2fh ; Адрес нового значения в DS:DX

int 21h

; Обpаботка вектоpа 09h

mov ax,3509h ; Ф-ция получения вектора прерывания

int 21h

mov word ptr old_09h,bx ; Сохраним старое IP

mov word ptr old_09h+2,es ; Сохраним старое CS

mov ax,2509h ; Ф-ция установки вектора прерывания

mov dx,offset new_09h ; Адрес нового значения в DS:DX

int 21h

; Cообщение о загpузки пpогpаммы

mov ah,09h

mov dx,offset hello

int 21h

; Завеpшение пpогpаммы и сохpанение pез.части в памяти

mov dx,(endres+10fh)/16 ; Размер в параграфах резидентной секции

mov ax,3100h

int 21h

; Выгpузка пpогpаммы из памяти

unload:

mov ah,0ddh ; Вызовем нашу ф-цию с

mov al,01h ; подф-цией выгpузки

int 2fh

push cs

pop ds

cmp al,99h ; Выгpузка удалась?

jne error_unload ; Hет,выведем сообщение об ошибке

mov ah,09h ; Да,выведем сообщение об удачной

mov dx,offset unloadh ; выгpузке пpогpаммы

int 21h

mov ax,4c00h ; Завеpшим пpогpамму

int 21h

error_unload: ; Ошибка выгpузки

mov ah,09h

mov dx,offset error

int 21h

finish: mov ax,4c01h ; Выход с кодом ошибки

int 21h

init endp

hello db 10,13,'VGA FontChanger Version 1.00 (c) Shigin SoftWare 1997'

db 10,13,'All rigth reserved.',10,13,'$'

error db 'Error! VGAFC do not extract from memory','$'

unloadh db 'VGAFC extract from memory.',10,13,'$'

help_pr db 10,13,'VGAFC TSR FontChanger (c) 1997 by Shigin Software',10

db 10,13,'Syntax : VGAFC [ /? ]'

db 10,13,'Options: /? - display to help',10

db 10,13,'This program migth will unload if it will load one more.'

db 10,13,'Press <F12> for run this program.',10,13,'$'

code ends

end main

Работа с динамиком:

.model tiny

code segment 'code'

org 100h

assume cs:code, ds:code

main proc

jmp init

;_________________________________________________________;

; РЕЗИДЕНТНАЯ ЧАСТЬ ;

;_________________________________________________________;

; save old (interrupt)

old_09h dd 0

old_2Fh dd 0

tone dw 0

;cnt db 0

dlit dw 0

main endp

new_09h proc

pushf ; занесение в стек регистра флагов

call cs:old_09h ; вызов старого обработчика прерывания

push ax

push di

push si

push es

;mov ax,0B800h ; адрес видеопамяти (сегмента)

;mov es,ax

;mov di,0000h ; смещение назначения

mov dlit,10000

in ax,60h ; Scan-code нажатой клавиши (порт 60h)

;проверка наличия клавиш, у которых особая процедура обработки

cmp al, 3bh ;'F1' key

je key_M

cmp al, 2h ;'1' key

je key_1

cmp al, 3h ;'2' key

je key_2

cmp al, 4h ;'3' key

je key_3

cmp al, 5h ;'4' key

je key_4

cmp al, 6h ;'5' key

je key_5

cmp al, 7h ;'6' key

je key_6

cmp al, 8h ;'7' key

je key_7

cmp al, 9h ;'8' key

je key_8

jmp end_9h

key_M:

call melodia

jmp end_09h

key_1:

mov tone, 1046 ;частота ноты до

call dinamik

jmp end_09h

key_2:

mov tone, 988 ;частота ноты ре

call dinamik

jmp end_09h

key_3:

mov tone, 880 ;частота ноты ми

call dinamik

jmp end_09h

key_4:

mov tone, 784 ;частота ноты фа

call dinamik

jmp end_09h

key_5:

mov tone, 698 ;частота ноты соль

call dinamik

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