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

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

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

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

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

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

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

Утверждаю:

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

«___»____________ 2003 г.

Курсовая работа по дисциплине СП

«Управление принтером»

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

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

А4

(носитель)

_____________

(кол-во листов)

Выполнил:

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

Пыченков А.Б.

Москва

2003

Файл prnctl.asm

MY_INT equ 2fh

MY_FN equ 77h

CHECK_FN equ 01h

CHECK_PRESENTS equ 1234h

UNLOAD_FN equ 02h

BUFFER_SIZE equ 20

code segment

assume cs:code, ds:code

org 100h

start: jmp begin

oldKeybVector dd ? ;Старый вектор прерывания 09h

oldMyVector dd ? ;Старый вектор прерывания 2fh

currentFont db 0 ;Текущий шрифт принтера

currentSize db 0 ;Текущий режим печати

f1key db 'Прогон страницы$'

f2key0 db 'Шрифт 1$'

f2key1 db 'Шрифт 2$'

f3key0 db 'Режим 1$'

f3key1 db 'Режим 2$'

screenbuffer db BUFFER_SIZE*2 dup (' ') ;Буфер для хранения участка экрана

storebuffer proc far

;Функция сохранения начала видеопамяти в буфере

;Вход - нет

;Выход - screenbuffer

cld

push ds

push es

push ax

push cx

push si

push di

mov ax,cs

mov es,ax

mov ax,0b800h

mov ds,ax

mov si,0h

lea di,cs:screenbuffer

mov cx,BUFFER_SIZE*2

rep movsb

pop di

pop si

pop cx

pop ax

pop es

pop ds

ret

storebuffer endp

printbuffer proc far

;Функция вывода в начало видеопамяти сохраненного буфера

;Вход - screenbuffer

;Выход - нет

cld

push ds

push es

push ax

push cx

push si

push di

mov ax,cs

mov ds,ax

mov ax,0b800h

mov es,ax

mov di,0h

lea si,cs:screenbuffer

mov cx,BUFFER_SIZE*2

rep movsb

pop di

pop si

pop cx

pop ax

pop es

pop ds

ret

printbuffer endp

printstring proc far

;Функция прямой печати строки в видеопамяти

;с аттрибутом 8bh

;Вход - si - строка на печать

;Выход - нет

cld

push di

push ax

push cx

push ds

push es

mov di,00h

mov ax,0b800h

mov es,ax

mov ax,cs

mov ds,ax

printstring_loop:

lodsb

cmp al,'$'

je printstring_finish

stosb ;Печать символа

mov al,8bh

stosb ;Печать атрибута

jmp printstring_loop

printstring_finish:

pop es

pop ds

pop cx

pop ax

pop di

ret

printstring endp

keybdint proc far

;Функция-обработчик прерывания от клавиатуры

;Вход - нет

;Выход - currentFont, currentSize

push ax

push es

mov ax,40h

mov es,ax

mov al,es:[17h] ;Чтение флагов из 40:17h

pop es

and al,04h

test al,al ;нажат ли Ctrl

jz keybd_call_old

in al,60h ;читаем нажатую кнопку

cmp al,3bh ;Ctrl+F1

je keybd_page_feed

cmp al,3ch ;Ctrl+F2

je keybd_mode_switch

cmp al,3dh ;Ctrl+F3

je keybd_set_size

keybd_call_old: ;вызов старого прерывания

pop ax

jmp dword ptr cs:oldKeybVector

keybd_page_feed:

;выводим надпись

push si

call storebuffer

lea si,cs:f1key

call printstring

push dx

mov ah,0 ;команда принтеру `прогон страницы`

mov al,0ch

mov dx,0

int 17h

pop dx

kbd_loop1: ;Ожидание отпускания клавиши

in al,60h

cmp al,3bh

je kbd_loop1

call cs:printbuffer

pop si

jmp keybd_finish

keybd_mode_switch:

xor cs:currentFont,1 ;currentFont=1-currentFont

push si

call storebuffer

lea si,cs:f2key0

cmp cs:currentFont,0

je keybd_f2_next

lea si,cs:f2key1

keybd_f2_next:

call cs:printstring

push dx

mov ah,0 ;команда принтеру установки шрифта

mov dx,0

mov al,1bh

int 17h

mov ah,0

mov al,45h

cmp cs:currentFont,0

je keybd_f2_next1

mov al,46h

keybd_f2_next1:

int 17h

pop dx

kbd_loop2: ;Ожидание отпускания клавиши

in al,60h

cmp al,3ch

je kbd_loop2

call cs:printbuffer

pop si

jmp keybd_finish

keybd_set_size:

xor cs:currentSize,1 ;currentSize=1-currentSize

push si

call storebuffer

lea si,cs:f3key0

cmp cs:currentSize,0

je keybd_f3_next

lea si,cs:f3key1

keybd_f3_next:

call cs:printstring

push dx

mov ah,0 ;команда принтеру установки размера страницы

mov al,1bh

mov dx,0

int 17h

mov ah,0

mov al,32h

cmp cs:currentSize,0

je keybd_f3_next1

mov al,30h

keybd_f3_next1:

int 17h

pop dx

kbd_loop3:

in al,60h ;Ожидание отпускания клавиши

cmp al,3dh

je kbd_loop3

call cs:printbuffer

pop si

jmp keybd_finish

keybd_finish:

mov al,20h

out 20h,al

pop ax

iret

keybdint endp

myint proc far

;Функция-обработчик мультиплексного прерывания

;Вход - ah,al

;Выход - ax

cmp ah,MY_FN

je myint_cont

myint_runold:

jmp cs:oldMyVector

myint_cont:

push dx

cmp al,CHECK_FN

je myint_check

cmp al,UNLOAD_FN

je myint_unload

pop dx

jmp cs:oldMyVector

myint_check:

mov ax,CHECK_PRESENTS ;Проверка загрузки

jmp myint_finish

myint_unload: ;Выгрузка

push ds

push es

;Восстановление векторов

mov dx,cs:word ptr [oldKeybVector]

mov ds,cs:word ptr [oldKeybVector+2]

mov ah,25h

mov al,9h

int 21h

mov dx,cs:word ptr [oldMyVector]

mov ds,cs:word ptr [oldMyVector+2]

mov ah,25h

mov al,MY_INT

int 21h

;Освобождение памяти

mov es,cs:[2ch]

mov ah,49h

int 21h

push cs

pop es

mov ah,49h

int 21h

pop es

pop ds

myint_finish:

pop dx

iret

myint endp

;Загрузчик программы

begin:

;Смотрим /?

mov ch,0

mov cl,ds:[80h]

jcxz load

mov al,ds:[82h]

cmp al,'/'

jne cmderr

mov al,ds:[83h]

cmp al,'?'

jne cmderr

mov ah,9h

lea dx,helpStr

int 21h ;Выводим справку

mov ah,4ch

int 21h

cmderr: ;Ошибка в командной строке

mov ah,9h

lea dx,cmdErrStr

int 21h

mov ah,4ch

int 21h

load:

;Проверяем на наличие в памяти

mov ah,MY_FN

mov al,CHECK_FN

int MY_INT

cmp ax,CHECK_PRESENTS

jne install

mov ah,9

lea dx,alreadyPresentsStr

int 21h ;Программа уже загружена

mov ah,4ch

int 21h

install:

;Запоминаем старые векторы

mov ah,35h

mov al,9h

int 21h

mov word ptr oldKeybVector,bx

mov word ptr oldKeybVector+2,es

mov al,MY_INT

int 21h

mov word ptr oldMyVector,bx

mov word ptr oldMyVector+2,es

;Устанавливаем новые векторы

mov ah,25h

mov al,09h

lea dx,keybdint

int 21h

mov al,MY_INT

lea dx,myint

int 21h

;Сообщение об успешной загрузке

mov ah,9

lea dx,loadedStr

int 21h

;Остаемся резидентно

lea dx,begin

int 27h

alreadyPresentsStr db 'Программа уже загружена',10,13,'$'

loadedStr db 'Программа загружена',10,13,'$'

helpStr db 'prnctl.com - управление принтером',10,13,'Для выгрузки программы используйте unldtsr.exe',10,13,'Автор: Пыченков Алексей, ИУ5-53',10,13,'$'

cmdErrStr db 'Неверный аргумент. Для получения справки введите',10,13,'prnctl.com /?',10,13,'$'

code ends

end start

Файл unldtsr.asm

MY_INT equ 2fh

MY_FN equ 77h

CHECK_FN equ 01h

CHECK_PRESENTS equ 1234h

UNLOAD_FN equ 02h

stck segment stack

db 256 dup (?)

stck ends

data segment

notpresentstr db 'Программа не загружена в память',10,13,'$'

unloadedstr db 'Программа выгружена из памяти',10,13,'$'

data ends

code segment

assume cs:code, ds:data, ss:stck

main proc

mov ax,data

mov ds,ax

;Проверяем на наличие в памяти

mov ah,MY_FN

mov al,CHECK_FN

int MY_INT

cmp ax,CHECK_PRESENTS

je unload

mov ah,9 ;Программа отсутствует в памяти

lea dx,notpresentstr

int 21h

mov ah,4ch

int 21h

unload:

mov ah,MY_FN ;Вызов функции выгрузки

mov al,UNLOAD_FN

int MY_INT

mov ah,9

lea dx,unloadedstr

int 21h

mov ah,4ch

int 21h

main endp

code ends

end main

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