Сист. прогр. Ч1 (Методические указания к выполнению лабораторных работ по СПО), страница 14

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

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

Файл "Сист. прогр. Ч1" внутри архива находится в следующих папках: Методические указания к выполнению лабораторных работ по СПО, сист прогр лабы. Документ из архива "Методические указания к выполнению лабораторных работ по СПО", который расположен в категории "". Всё это находится в предмете "операционные системы" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "операционные системы" в общих файлах.

Онлайн просмотр документа "Сист. прогр. Ч1"

Текст 14 страницы из документа "Сист. прогр. Ч1"

MOV AX,0601H ;Прокрутить на одну строку вверх

MOV BH,07 ;Атрибут: нормальный, черно-белый

MOV СХ,0000 ;Координаты от 00,00

MOV DX,184FH ;до 24,79 (весь экран)

INT 10Н ; Вы звать BIOS

Для прокрутки любого количества строк необходимо

установить соответствующее значение в регистре AL. Регистр ВН содержит атрибут для нормального или инвертированного отображения, мигания, установки цвета и т.д. Значения в регистрах СХ и DX позволяют прокручивать любую часть экрана. Ниже объясняется стандартный подход к прокрутке.

1. Определить в элементе ROW (строка) значение 0 для установки строки положения курсора.

2. Выдать текст и продвинуть курсор на следующую строку.

3. Проверить, находится ли курсор на последней строке (СМР ROW,22).

4. Если да, то увеличить элемент ROW (INC ROW) и выйти.

5. Если нет, то прокрутить экран на одну строку и, используя ROW, переустановить курсор.

АН = 07: Прокрутка экрана вниз. Для текстового режима прокрутка экрана вниз обозначает удаление нижних строк и вставку чистых строк сверху. Регистр АН должен содержать 07, значения остальных регистров аналогичны функции 06 для прокрутки вверх.

АН = 08: Чтение атрибута/символа в текущей позиции курсора.

Для чтения символа и байта-атрибута из дисплейного буфера как в текстовом, так и в графическом режиме используются следующие команды:

MOV АН,08 ;3апрос на чтение атрибута/символа

MOV BH,00 ;Страница 0 (для текстового режима)

IHT 10Н ;Вызвать BIOS

Данная функция возвращает в регистре AL значение символа, а в АН его атрибут. В графическом режиме функция возвращает 00 для не ASCII-кодов. Так как эта функция читает только один символ, то для символьной строки необходима организация цикла.

АН = 09: Вывод атрибута/символа в текущую позицию курсора.

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

MOV АН,09 ;Функция вывода

MOV AL,символ ;Выводимый символ

MOV BH,страница ;Номер страницы (текстовой режим)

MOV BL,атрибут ;Атрибут или цвет

MOV CX,повторение ;Число повторений

INT 10Н ; Вызвать BIOS

В регистр AL должен быть помещен выводимый на экран символ. Значение в регистре СХ определяет число повторений символа на экране. Вывод на экран последовательности различных символов требует организации цикла. Данная функция не перемещает курсор. В следующем примере на экран выводится пять мигающих "сердечек" в инвертированном виде:

MOV АН,09 ;функция вывода

MOV AL,03H ;Черви (карточная масть)

MOV ВН,00 ;Страница 0 (текстовой режим)

MOV BL,0F0 ;Мигание, инверсия

MOV CX,05 ;Пять раз

INT 10H ;Вызвать BIOS

В текстовом (но не в графическом) режиме символы автоматически выводятся на экран и переходят с одной строки на другую. Для вывода на экран текста запроса или сообщения необходимо составить программу, которая устанавливает в регистре СХ значение 01 и в цикле загружает в регистр AL из памяти выводимые символы текста. Так как регистр СХ в данном случае занят, то нельзя использовать команду LOOP. Кроме того, при выводе каждого символа необходимо дополнительно продвигать курсор в следующий столбец (функция 02).

В графическом режиме регистр BL используется для определения цвета графики. Если бит 7 равен 0, то заданный цвет заменяет текущий цвет, если бит 7 равен 1, то происходит комбинация цветов с помощью команды XOR.

АН = 0А: Вывод символа в текущую позицию курсора.

Единственная разница между функциями 0А и 09 состоит в том, что функция 0А не устанавливает атрибут:

MOV AH.,0AH ;Функция вывода

MOV AL, символ ; Выводимый символ

MOV BH, страница ;Номер страницы (для текста)

MOV СХ, повторение ;Число повторений

INT 10Н ;Вызвать BIOS

Для большинства применений команда прерывания DOS INT
21Н более удобна.

АН = 0Е: Вывод в режиме телетайпа. Данная функция позволяет использовать монитор как простой терминал. Для выполнения этой функции необходимо установить в регистре АН шестнадцатеричное значение 0Е, в регистр AL поместить выводимый символ, цвет текста (в графическом режиме) занести в регистр BL и номер страницы для текстового режима - в регистр ВН, Звуковой сигнал (код 07Н), возврат на одну позицию (08Н), перевод строки (0АН) и возврат каретки (0DН) действуют, как команды для форматизации экрана. Данная функция автоматически продвигает курсор, переводит символы на следующую строку, выполняет прокрутку экрана и сохраняет текущие атрибуты экрана.

АН = 0F: Получение текущего видеорежима. Данная функция возвращает в регистре AL текущий видеорежим (см.функцию АН = 00), в регистре АН - число символов в строке (20, 40 или 80), в регистре ВН - номер страницы.

АН = 13: Вывод символьной строки (только для AT). Данная функция позволяет на компьютерах типа AT выводить на экран символьные строки с установкой атрибутов и перемещением курсора;

MOV АН,13Н ;4>-ция вывода на экран

MOV AL,сервис ;0, 1, 2 или 3

MOV ВН,страница ;

LEA BP,адрес ;Адрес строки в ES:BP

MOV CX,длина ;Длина строки

MOV DX,экран ;Координаты на экране

INT 10Н ;Вызвать BIOS

Значения в регистре AL указывают:

0 - использовать атрибут и не перемещать курсор;

1 - использовать атрибут и переместить курсор;

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

3 - вывести символ, затем атрибут и переместить курсор.

ПРОГРАММА: МИГАНИЕ, ИНВЕРСИЯ, ПРОКРУТКА

Программа, приведенная на рис.8.3, принимает ввод имен с клавиатуры и выводит их на экран. Запрос выдается в инвертированном отображении, имена принимаются в нормальном отображении, а вывод имен осуществляется с 40-го столбца в той же строке с миганием и инвертированием:

Name? Francis Francis [мигание]


Столбец 0 Столбец 40

page 60,132

TITLE NMSCROLL (EXE) Инверсия,мигание,прокрутка

STACKSG SEGMENT PARA STACK 'Stack'

DW 32 DUP(?)

STACKSG ENDS

DATASG SEGMENT PARA 'Data'

NAMEPAR LABEL BYTE ; Список параметров:

MAXNLEN DB 20 ; макс. длина имени

ACTNLEN DB ? ; число введенных символов

NAMEFLD DB 20 DUP(' ') ; имя

COL DB 00

COUNT DB ?

PROMPT DB 'Name? '

ROW DB 00

DATASG ENDS

CODESG SEGMENT PARA 'Code'

BEGIN PROC FAR

ASSUME CS:CODESG, DS:DATASG, SS:STACKSG, ES:DATASG

PUSH DS

SUB AX, AX

PUSH DS

MOV AX, DATASG

MOV ES,AX

MOV АХ, 060Н

CALL Q10CLR ;Очистить экран

A20LOOP:

MOV COL, 00 ;Установить столбец 0

CALL Q20CURS

CALL B10PRMP ; Выдать текст запроса

CALL D10INPT ; Ввести с клавиатуры

CMP ACTNLEN, 00 ;Нет имени? (т.е. конец)

JNE A30

MOV AX, 0600H

CALL Q10CLR ;Если да, то очистить экран.

RET ;и завершить программу

A30:

CALL E10NAME ; Вывести имя на экран

JMP A20LOOP

BEGIN ENDP

;Вывод текста запроса:

B10PRMP PROC NEAR

LEA SI, PROMPT ;Адрес текста

MOV COUNT, 05

B20:

MOV BL, 70H ;Видеоинверсия

CALL F10DISP ; Подпрограмма вывода

INC SI ;Следукщий символ

INC COL ; Следующий столбец

CALL Q20CURS

DEC COUNT ;Уменышение счетчика

JNZ B20 ;Повторить n раз

RET

B10PRMP ENDP

; Ввод имени с клавиатуры:

D1OINPT PROC NEAR

MOV AH,0AH

LEA DX, NAMEPAR

INT 21H

RET

D1OINPT ENDP

;Вывод с миганием и инверсией:

E10NAME PROC NEAR

LEA SI, NAMEFLD ;Адрес имени

MOV COL ,40 ;Установить столбец

E20:

CALL Q20CURS ;Установить курсор

MOV BL, OFOH ;Мигание и инверсия

CALL F10DISP ; Подпрограмма вывода

INC SI ; Следующий символ

INC COL ; Следующий столбец

DEC ACTNLEN ;Уменьшить счетчик

JNZ E20 ;Циклить n раз

CMP ROW, 20 ;Последняя строка

JAE E30 ; нет

INC ROW

RET

E30: MOV AX, 0601H ; да --

CALL Q1OCLR ; очистить экран

RET

E10NAME ENDP

;Вывод символа на экран:

F10DISP PROC NEAR ;Атрибут установлен

MOV АН., 09 ;Ф-ция вывода на экран

MOV AL, [SI] ;Получить символ

MOV BH, 00 ; Номер страницы

MOV CX , 01 ;0дин символ

INT 10H ; Вызов BIOS

RET

F10DISP ENDP

;Очистка экрана:

Q1OCLR PROC NEAR ;АХ установлен

MOV BH, 07 ;Нормальный ч/б

MOV CX, 0000

MOV DX, 184FH

IHT 10Н ; Вызов BIOS

RET

Q10CLR ENDP

; Установить курсор:

Q2QCURS PROC NEAR

MOV AH, 02

MOV BH, 00

MOV DH., ROW

MOV DL, COL

IHT 10H

RET

Q2OCURS ENDP

CODESG ENDS

END BEGIN

Рис.8.3. Мигание, инвертирование и прокрутка

Для управления положением курсора в программе определены переменные ROW (вертикальное перемещение вниз) и COL (горизонтальное перемещение вправо). Команда INT 10Н не перемещает курсор автоматически. Программа выводит имена сверху вниз, пока не достигнет 20-й строки. После этого выполняется прокрутка экрана вверх на одну строку для каждого нового запроса.

Для ввода имен в процедуре D10INPT используется команда DOS INT 21H. Для замены на BIOS INT 10Н необходимо:

1. Инициализировать счетчик для адреса области ввода и счетчик для длины имени.

2. Выполнить INT 10Н (функция 08) с значениями 08 в регистре АН и 00 в ВН. Функция возвращает каждый символ в регистре AL.

3. Если регистр AL не содержит символа RETURN и счетчик длины достиг максимального значения, выдать звуковой сигнал и выйти из процедуры.

4. Переслать содержимое AL в область ввода имени.

5. Если регистр AL содержит символ RETURN, выйти из процедуры.

6. Увеличить счетчик длины и адрес области ввода имени.

7. Переместить курсор на один столбец.

8. Перейти на п. 2.

При выходе из процедуры область ввода содержит имя и символ RETURN, а счетчик - число введенных символов.

РАСШИРЕННЫЙ ASCII-КОД

ASCII-коды от 128 до 255 (шестнадцатеричные 80-FF) представляют собой ряд специальных символов, полезных при формировании запросов, меню, специальных значков с экранными атрибутами. Например, используя следующие символы, можно нарисовать прямоугольник:

Шестнадцатеричный код Символ

DА Верхний левый угол

BF Верхний правый угол

С0 Нижний левый угол

D9 Нижний правый угол

C4 Горизонтальная линия

ВЗ Вертикальная линия

Следующие команды с помощью INT 10Н выводят горизонтальную линию на 25 позиций в длину:

MОV АН,09 ;Функция вывода на экран

MOV AL, 0C4H ;Горизонтальная линия

MOV ВН, 00 ;Страница О

MOV BL, 0FH ;Выделение яркостью

MOV CX, 25 ;25 повторений

INT 10H ;Вызвать BIOS

Напомним, что курсор в приведенном примере не перемещается. Вывод вертикальной линии должен включать цикл, в котором курсор перемещается вниз на одну строку и выводится символ ВЗН. Для штриховки могут быть полезны символы с точками внутри:

Шестнадцатеричный код Символ

B0 Одна четверть точек
(светлая штриховка)

B1 Половина точек (средняя штриховка)

B2 Три четверти точек (темная штриховка)

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

ДРУГИЕ ОПЕРАЦИИ ВВОДА-ВЫВОДА В DOS

Ниже перечислены другие функции DOS, которые могут оказаться полезными в работе. Код функции устанавливается в регистре АН и затем выдается команда INT 21Н.

АН = 01: Ввод с клавиатуры с эхоотображением. Данная функция возвращает значение в регистре AL. Если содержимое AL не равно нулю, то оно представляет собой стандартный ASCII-символ, например букву или цифру. Нулевое значение в регистре AL свидетельствует о том, что на клавиатуре была нажата специальная функциональная клавиша, например Номе, F1 или PgUp. Для определения скэн-кода клавиш необходимо повторить вызов функции (см. "Функциональные клавиши" в последующих разделах). Данная функция реагирует на запрос Ctrl/Break.

АН = 02: Вывод символа. Для вывода символа на экран в текущую позицию курсора необходимо поместить код данного символа в регистр DL, Коды табуляции, возврата каретки и перевода строки действуют обычным образом.

АН = 07: Прямой ввод с клавиатуры без эхоотображения.

Данная функция работает аналогично функции 01 с двумя отличиями: введенный символ не отображается на экране, т.е. нет эха, и отсутствует реакция на запрос Ctrl/Break.

АН = 08: Ввод с клавиатуры без эхоотображения. Данная функция действует аналогично функции 01 с одним отличием: введенный символ не отображается на экране, т.е. нет эха.

АН = 0В: Проверка состояния клавиатуры. Данная функция возвращает шестнадцатеричное значение FF в регистре AL, если ввод с клавиатуры возможен, в противном случае - 00. Это средство связано с функциями 01, 07 и 08, которые не ожидают ввода с клавиатуры.

ВВОД С КЛАВИАТУРЫ ПО КОМАНДЕ BIOS INT 16H

Команда BIOS INT 16H выполняет специальную операцию, которая
в соответствии с кодом в регистре АЙ обеспечивает следующие
три функции ввода с клавиатуры.

АН = 00: Чтение символа. Данная функция помещает в регистр
AL очередной ASCII-символ, введенный с клавиатуры, и
устанавливает скэн-код в регистре АН. (Скэн-коды объясняются в
следующем разделе). Если на клавиатуре нажата одна из
специальных клавиш, например Номе или F1, то в регистр AL
заносится 00. Автоматическое эхо символа на экран по этой
функции не происходит.

АН = 01: Определение наличия введенного символа. Данная функция сбрасывает флаг нуля (ZF = 0), если имеется символ для чтения с клавиатуры; очередной символ и скэн-код будут помещены в регистры AL и АН соответственно и данный элемент останется в буфере.

АН = 02: Определение текущего состояния клавиатуры. Данная функция возвращает в регистре AL состояние клавиатуры из адреса памяти 417Н:

Бит

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