Для студентов МГТУ им. Н.Э.Баумана по предмету Системное программированиеКП - вывод текста на экранКП - вывод текста на экран 2017-12-28СтудИзба

Курсовая работа: КП - вывод текста на экран

Описание

Описание файла отсутствует

Характеристики курсовой работы

Учебное заведение
Семестр
Просмотров
217
Скачиваний
6
Размер
101,47 Kb

Список файлов

Listing

Текст: H:\CP\KURSAC1\STSR\STSR.ASM Ст. 0 15 216 байт 0%

; STSR release 1. Copyright (C) 2001 by LORD

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

; *CAUTION:THIS PROGRAM IS FREEWARE, SO U CAN USE, HACK *

; *AND CRACK IT AS MANY TIMES AS YOU WANT *

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

; определения препроцессора

START_POS equ (80*5+20)*2 ; смещение верхнего левого угла окна программы в

видеопамяти

LINES_NUM equ 7 ; число экранных строк (высота окна)

CHARS_NUM equ 40 ; число экранных символов (ширина окна)

; номера строк для вывода

STR_NONE equ 0

STR_ONE equ 1

STR_TWO equ 2

STR_THREE equ 3

.model tiny

.code

.186

org 2Ch

envseg dw ?

org 80h

cmd_len db ? ; длина строки параметров,

cmd_line db ? ; по этой метке можно судить о начале строки параметров

org 100h ; COM-программа

start:

jmp init ; переходим на процедуру инициализации

hw_reset9: ; минимальный сброс

retf

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

int09h_handler proc far

jmp short act_int09h_handler ; пропустить ISP

; формируем ISP

old_int09h dd ?

dw 424Bh

db 00h

jmp short hw_reset9

db 7 dup(0)

; вход в обработчик

act_int09h_handler:

cli

pushf

call dword ptr cs:old_int09h ; вызов старого обработчик

pusha ; прерывание аппаратное, сохраняем всек регистры

push ds

push es

cld

push 0B800h ; видеобуфер текстового режима EGA

pop es

push 00040h ; сегмент буфера клавиатуры

pop ds

mov di, word ptr ds:001Ah ; адрес головы буфера клавитуры

cmp di, word ptr ds:001Ch ; не равен ли адресу хвоста

буфера клавиатуры?

je do_exithnd ; если буфер пуст,

выходим

jmp done_chk

do_exithnd:

jmp exit_09h_handler

done_chk:

mov ax, word ptr [di] ; иначе - читаем символ

mov ax, word ptr [di] ; иначе - читаем символ

cmp byte ptr cs:we_are_active,0 ; программа уже

ктивирована?

jne already_active ; да,

переходим к обработке команд пользователя

; иначе - идем дальше

; проверка текущего видеорежима

; программа работает только в стандартном режиме ДОС - 03h

mov al, byte ptr ds:0049h

test al, 03h ; текущий видеорежим - 03h?

jz do_exithnd ; - нет, выходим, иначе идем дальше

; проверка на нажатие комбинации Ctrl+U

cmp ah, 1Fh ; нажата [s] ?

jne not_s ; нет -

идем дальше

mov cs:for_unload, 0

jmp yeah_s

not_s:

cmp ah, 16h ; нажат

[u] ?

mov cs:for_unload, 1

jne exit_09h_handler

yeah_s:

mov al, byte ptr ds:0017h ; байт состояния клавиатуры

test al, 04h ; нажат Ctrl?

jz exit_09h_handler ; нет - выходим

cmp cs:for_unload, 1

jne do_start

; нажаты Ctrl+U, надо выгрузить программу

mov word ptr ds:001Ch, di ; очистить буфер клавиатуры

call restore_scr

mov cs:we_are_active, 0

mov ah, cs:mux_id

mov al, 02h ; вызвать функцию AMIS 02 - выгрузка

резидента

int 2Dh

jmp exit_09h_handler

do_start:

; нажаты Ctrl+S, необходимо активировать программу

mov word ptr ds:001Ch, di ; очистить буфер клавиатуры

call save_scr ; сохраняем фон

call save_scr ; сохраняем фон

под окном

push cs

pop ds

call show_scr ; показать окно

программы

mov byte ptr we_are_active, 1 ; активируем резидент

jmp short exit_09h_handler

; программа уже активирована

already_active:

mov word ptr ds:001Ch, di ; очистить буфер клавиатуры

mov bh, STR_NONE ; не надо выводить строки

push cs

pop ds

mov al, ah ; команды cmp ah, ? короче, чем cmp al, ?

cmp al, 02h ; нажата клавиша [1]?

jne not_1

; выводим 1-ю строку

mov bh, STR_ONE

not_1:

cmp al, 03h ; нажата клавиша [2]?

jne not_2

; выводим 2-ю строку

mov bh, STR_TWO

not_2:

cmp al, 04h ; нажата клавиша [3]?

jne not_3

; выводим 3-ю строку

mov bh, STR_THREE

not_3:

dec al ; нажата [Escape]?

jnz exit_with_display ; нарисовать окно и выйти

; деактивируем программу

call restore_scr

mov byte ptr we_are_active, 0

jmp short exit_09h_handler ; выходим

exit_with_display: ; нарисовать окно и выйти

mov byte ptr current_str, bh

call show_scr

exit_09h_handler:

pop es

pop ds

popa

sti

iret ; возврат

; переменные, используемые в обработчике

we_are_active db 0

current_str db 0

for_unload db 0

save_scr proc near ; запоминает фон под окном для его последующего восст

новления

mov si, START_POS

push 0B800h ; DS:SI - начало области окна в видеобуфере

pop ds

push es

push cs

pop es

mov di, offset scr_buf

mov dx, LINES_NUM

save_scr_loop: ; построчный цикл записи фона

mov cx, CHARS_NUM

rep movsw

add si, (80-CHARS_NUM)*2

dec dx

jnz save_scr_loop

pop es

ret

save_scr endp

restore_scr proc near ; восстанавливает фон под окном

mov di, START_POS

mov si, offset scr_buf

mov dx, LINES_NUM ; число строк для копирования

scr_loop: ; построчный цикл восстановления фона

mov cx, CHARS_NUM ; число символов на ширину окна

rep movsw

add di, (80-CHARS_NUM)*2

dec dx

jnz scr_loop

ret

restore_scr endp

show_scr proc near ; процедура рисования окна

mov di, START_POS

mov dx, LINES_NUM-2

; выведем заголовок окна

mov ah, 3Fh

xor al, al

mov cx, CHARS_NUM

rep stows

; нарисуем тело окна

add di, (80-CHARS_NUM)*2

mov ah, 1Fh

fill_loop:

mov cx, CHARS_NUM

rep stosw

add di, (80-CHARS_NUM)*2

dec dx

jnz fill_loop

; нарисуем рамку окна

inc di

inc di

mov al, 196

mov cx, CHARS_NUM-2

rep stosw

mov al, 179

mov di, START_POS+80*2

mov dx, LINES_NUM-2

vert_loop:

stosw

add di, (CHARS_NUM-2)*2

stosw

add di, (80-CHARS_NUM)*2

dec dx

jnz vert_loop

mov al, 192

stosw

add di, (CHARS_NUM-2)*2

mov al, 217

stosw

; выведем текст

mov di, START_POS

mov ah, 3Fh

mov si, offset header

call print_str

mov ah, 1Eh

mov di, START_POS+2+80*2

mov si, offset help

call print_str

mov di, START_POS+2+80*2*5

mov si, offset msg_xt

call print_str

; определим, какую строку надо вывести

mov ah, 1Ch

mov di, START_POS+2+80*2*3

cmp ds:current_str, STR_NONE

jne not_none

mov si, offset msg0

call print_str

not_none:

cmp ds:current_str, STR_ONE

jne not_one

mov si, offset msg1

call print_str

not_one:

cmp ds:current_str, STR_TWO

jne not_two

mov si, offset msg2

call print_str

not_two:

cmp ds:current_str, STR_THREE

jne not_three

mov si, offset msg3

call print_str

not_three:

ret

show_scr endp

print_str proc near ; печатает строку с заданным в AH атрибутом

; DS:SI - адрес строки, ES:DI - адрес

видеопамяти

prn_loop:

mov al, byte ptr [si]

cmp al, 0

je prn_exit

stosw

inc si

jmp prn_loop

prn_exit:

ret

print_str endp

Прочти меня

Файл скачан с сайта StudIzba.com

Картинка-подпись
Хочешь зарабатывать на СтудИзбе больше 10к рублей в месяц? Научу бесплатно!
Начать зарабатывать

Комментарии

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