Сист. прогр. Ч1 (Методические указания к выполнению лабораторных работ по СПО), страница 11
Описание файла
Файл "Сист. прогр. Ч1" внутри архива находится в следующих папках: Методические указания к выполнению лабораторных работ по СПО, сист прогр лабы. Документ из архива "Методические указания к выполнению лабораторных работ по СПО", который расположен в категории "". Всё это находится в предмете "операционные системы" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "операционные системы" в общих файлах.
Онлайн просмотр документа "Сист. прогр. Ч1"
Текст 11 страницы из документа "Сист. прогр. Ч1"
Что произойдет при выполнении программы, приведенной на рис.7.4, если в процедуре BEGIN будет отсутствовать команда RET?
Какая разница между кодированием в директиве PROC операнда с типом FAR и с типом NEAR?
Каким образом может программа начать выполнение процедуры?
В ЕХЕ-программе процедура А10 вызывает В10, В10 вызывает С10, а С10 вызывает D10. Сколько адресов, кроме начальных адресов возврата в DOS, содержит стек?
Предположим, что регистр BL содержит 11100011 и поле по имени BOONO содержит 01111001. Определите воздействие на регистр BL для следующих команд: a) XOR BL,BOONO; б) AND BL,BOONO; в) OR BL,BOONO; г) XOR ВL,1111111В; д) AND BL,00000000B;
Измените программу на рис.7.6 для: а) определения
содержимого TITLEX заглавными буквами; б)
преобразования заглавных букв в строчные.
Предположим, что регистр DX содержит 10111001 10111001, а регистр CL - 03. Определите содержимое регистра DX после следующих несвязанных команд: a) SHR DX,1; б) SHR DX,CL; в) SHL DX,CL; г) SHL DL,1; д) ROR DX,CL; e) ROR DL,CL; ж) SAL DH,1.
8. ПРЕРЫВАНИЯ
В предыдущих главах рассматривались программы, в которых данные определялись в операндах команд (непосредственные данные) или инициализировались в конкретных полях программы. Число практических применений таких программ в действительности мало. Большинство программ требуют ввода данных с клавиатуры, диска или модема и обеспечивают вывод данных в удобном формате на экран, принтер или диск. Данные, предназначенные для вывода на экран и ввода с клавиатуры, имеют ASCII-формат.
Для выполнения ввода и вывода используется команда INT (прерывание). Существуют разнообразные способы указать системе, какое действие (ввод или вывод) и на каком устройстве необходимо выполнить. Данная глава раскрывает основные требования для вывода информации на экран и ввода данных с клавиатуры.
Все необходимые экранные и клавиатурные операции можно выполнить с помощью команды INT 10Н, которая передает управление непосредственно в BIOS. Для выполнения некоторых более сложных операций существует прерывание более высокого уровня INT 21Н, которое сначала передает управление в DOS. Например, при вводе с клавиатуры может потребоваться подсчет введенных символов, проверка на максимальное число символов и проверка на символ "Return". Прерывание DOS INT 21Н осуществляет многие из этих дополнительных вычислений и затем автоматически передает управление в BIOS.
Материал данной главы подходит как для монохромных (черно-белых, BW), так и для цветных видеомониторов.
КОМАНДА ПРЕРЫВАНИЯ INT
Команда INT прерывает обработку программы, передает
управление в DOS или BIOS для определенного действия и затем возвращает управление в прерванную программу для продолжения обработки. Наиболее часто прерывание используется для выполнения операции ввода или вывода. Для выхода из программы на обработку прерывания и для последующего возврата команда INT выполняет следующее:
- уменьшает указатель стека на 2 и заносит в вершину стека содержимое флагового регистра;
- очищает флаги TF и IF;
- уменьшает указатель стека на 2 и заносит содержимое
регистра CS в стек;
- уменьшает указатель стека на 2 и заносит в стек значение
командного указателя;
- обеспечивает выполнение необходимых действий;
- восстанавливает из стека значения регистров и возвращает управление в прерванную программу на команду, следующую после INT.
Этот процесс полностью автоматический. Необходимо лишь определить сегмент стека достаточно большим для записи в него значений регистров.
В данной главе рассмотрим два типа прерываний: команду BIOS INT 10Н и команду DOS INT 21Н для вывода на экран и ввода с клавиатуры, В последующих примерах в зависимости от требований используются как INT 10Н, так и INT 21Н.
УСТАНОВКА КУРСОРА
Экран можно представить в виде двумерного, пространства с адресуемыми позициями, в любую из которых может быть установлен курсор. Обычный видеомонитор, например, имеет 25 строк (нумеруемых от 0 до 24) и 80 столбцов (нумеруемых от 0 до 79).
Команда INT 10Н включает в себя установку курсора в любую позицию и очистку экрана. Ниже приведен пример установки курсора на 5-ю строку и 12-й столбец.
MOV АН,02 ;3anpoc на установку курсора
MOV BH,00 ;Экран 0
MOV DН,05 ;Строка 05
MOV DL,12 ;Столбец 12
IНТ 10Н ; Передача управления в BIOS
Значение 02 в регистре АН указывает команде INT 10Н на выполнение операции установки курсора. Значения строки и столбца должны быть в регистре DX, а номер экрана (или страницы) - в регистре ВН (обычно 0). Содержимое других регистров несущественно. Для установки строки и столбца можно также использовать одну команду MOV с непосредственным шестнадцатиричным значением;
MOV DХ,050СН ;Строка 5, столбец 12
ОЧИСТКА ЭКРАНА
Запросы и команды остаются на экране до тех пор, пока не будут смещены в результате прокручивания ("скроллинга") или переписаны на том же месте другими запросами или командами. Когда программа начинает свое выполнение, экран может быть очищен. Очищаемая область экрана может начинаться в любой позиции и заканчиваться в любой другой позиции с большим номером. Начальное значение строки и столбца заносится в регистр СХ, конечное - в DX, значение 07 - в регистр ВН и 0600Н в АХ. В следующем примере выполняется очистка всего экрана:
MOV AX,0600H ;АН 06 (прокрутка) AL 00 (весь экран)
MOV ВН,07 ;Нормальный атрибут (черно/белый)
MOV CX,0000 : Верхняя левая позиция
MOV DX,184FH ;Нижняя правая позиция
INT 10Н ; Передача управления в BIOS
Значение 06 в регистре АН указывает команде INT 10H на выполнение операции очистки экрана. Эта операция очищает экран пробелами; в следующей главе скроллинг (прокрутка) описывается подробнее. Если вы по ошибке установили нижнюю правую позицию больше, чем 184FH, то очистка перейдет вновь к началу экрана и вторично заполнит некоторые позиции пробелами. Такая операция не приведет к каким-либо ошибкам при работе с монохромными экранами, однако - для некоторых цветных мониторов могут возникнуть серьезные ошибки.
ЭКРАННЫЕ И КЛАВИАТУРНЫЕ ОПЕРАЦИИ В БАЗОВОЙ ВЕРСИИ DOS
Обычно программы должны выдать на экран сообщение о своем завершении или обнаружении ошибки, отобразить запрос для ввода данных или для получения указания пользователя. Рассмотрим сначала методы, применяемые в базовой версии DOS, в последующих разделах будут показаны расширенные методы, введенные в DOS версии 2.0. Операции из базовой DOS работают во всех версиях, хотя в руководстве по DOS рекомендуется применять расширенные возможности для новых разработок. В базовой версии DOS команды вывода на экран более сложны, но команды ввода с клавиатуры проще в использовании благодаря встроенным проверкам.
ВЫВОД НА ЭКРАН В БАЗОВОЙ ВЕРСИИ DOS
Вывод на экран в базовой версии DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 (вызов функции DOS) и указания команды DOS INT 21Н. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:
NAMPRMP DВ 'Имя покупателя?','$'
…..
MOV АН,09 ;Запрос вывода на экран
LEA DX,NAMPRMP ;3агрузка адреса сообщения
INT 21Н ;Вызов DOS
Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки 'Имя покупателя?$' или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$". Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретится в памяти.
Команда LEA загружает адрес области NAMPRMP в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMPRMP, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
ПРОГРАММА: ВЫВОД НА ЭКРАН НАБОРА СИМВОЛОВ ASCII-КОДА
Большинство из 256 ASCII-кодов имеют символьное представление и могут быть выведены на экран. Шестнадцатиричные коды 00 и FF не имеют символов и выводятся на экран в виде пробелов, хотя символ пробела имеет ASCII-код 20Н.
На рис. 8.1 показана СОМ-программа, которая выводит на экран полный набор символов ASCII-кода. Программа вызывает три процедуры: B10CLR, C10SET и D10DISP. Процедура B10CLR очищает экран, а процедура C10SET устанавливает курсор в положение (0,0). Процедура D10DISP выводит содержимое поля CTR, которое вначале инициализировано значением 00 и затем увеличивается на 1 при каждом выводе на экран, пока не достигнет шестнадцатиричного значения FF.
page 60, 132
TITLE ALLASC (COM) ;Вывод на экран ASCII- символов O0-FF
COODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG, DS:CODESG, SS:CODESG, ES:NOTHING
ORG 100Н
BEGIN: JMP SHORT MAIN
CTR DB 00, ‘$’
; Основная процедура:
MAIN PROC NEAR
CALL B10CDR ;0чистить экран
CALL C10SET Установить курсор
CALL D10DISP ; Вывести симв. на экран
RET
MAIN ENDP
; Очистка экрана:
B10CLR PROC
MOV AX, 0600H
MOV BH, 07
MOV CX, 0000 ; Левая верхняя позиция
MOV DX, 184FH ; Правая нижняя позиция
INT 10Н
RET
B10CLR ENDP
; Установка курсора в 00, 00:
C10SET PROC
MOV AH, 02
MOV BH, 00
MOV DX, 0000
INT 10Н
RET
C10SET ENDP
Вывод на экран ASCII символов:
D10DISP PROC
MOV CХ , 256 ;256 итераций
D20: LEA DX, CTR ; Адрес счетчика D20
MOV АН., 09 ; опция вывода символа
INT 21Н.
INC CTR ;Уввличить ечетчик
LOOP D20 ;Уменьшить CХ, если не ноль - цикл
RET ; Вернуться
D10DISP ENDP
CODESG ENDS
END BEGIN
Рис.8.1. Вывод на экран набора символов ASCII-кода
Так как символ доллара не выводится на экран и, кроме того, коды от 08Н до 0DН являются специальными управляющими символами, то это приводит к перемещению курсора и другим управляющим воздействиям. Первая выведенная строка начинается с пробельного символа (00Н), двух "радостных физиономий" (01Н и 02Н) и трех карточных символов (0ЗН, 04Н и 05Н). Код 07Н выдает звуковой сигнал. Код 06Н должен отобразиться карточным символом "пики", но управляющие символы от 08Н до 00Н сотрут его. Код 00Н является "возвратом каретки" и приводит к переходу на новую (следующую) строку. Код 0ЕН представляется в виде музыкальной ноты. Символы после 7FH являются графическими.
Можно изменить программу для обхода управляющих символов. Ниже приведен пример фрагмента программы, позволяющий обойти все символы между 08Н и 0DН. Вы можете поэкспериментировать, обходя только, скажем, 08Н "возврат на символ" и 0DН "возврат каретки":
СMР CTR, 08H ;Меныие чем 08?
JB D30 ; Да - принять
СМР CTR,0DH ;Меньше/равно 0D?
JBЕ D40 ; Да - обойти
D30:
MOV AH, 40H ;Вывод символов < 08
……………..
INT 21H
D40:
INC CTR
ВВОД ДАННЫХ С КЛАВИАТУРЫ: БАЗОВАЯ ВЕРСИЯ DOS
Процедура ввода данных с клавиатуры проще, чем вывод на экран. Для ввода, использующего базовую DOS, область ввода требует наличия списка параметров, содержащего спецификацию полей, которые необходимы при выполнении команды INT. Во-первых, должна быть определена максимальная длина вводимого текста. Это необходимо для предупреждения пользователя звуковым сигналом, если набран слишком длинный текст; символы, превышающие максимальную длину, не принимаются. Во-вторых, в списке параметров должно быть определенное поле, куда команда возвращает действительную длину введенного текста в байтах.
Ниже приведен пример, в котором определен список, параметров для области ввода. Здесь LABEL представляет собой директиву с атрибутом BYTE. Первый байт содержит максимальную длину вводимых данных. Так как это однобайтовое поле, то возможное максимальное значение его - шестнадцатеричное FF или 255. Второй байт необходим DOS для занесения в него действительного числа введенных символов. Третьим байтом начинается поле, которое будет содержать введенные символы.
NAMEPAR LABEL BYTE ;Список параметров:
MAXLEN DB 20 ; Максимальная длина
ACTLEM DB ? ; Реальная длина
NAMEFLD DB 20 DUP (‘ ‘) ; Введенные символы
Так как в списке параметров директива LABEL не занимает места, то NAMEPAR и MAXLEN указывают на один и тот же адрес памяти. B трансляторе MASM для определения списка параметров в виде структуры может использоваться также директива STRUC.
Для запроса на ввод необходимо поместить в регистр АН номер функции - 10 (0AH), загрузить адрес списка параметров (NAMEPAR в нашем примере) в регистр DХ и выполнить INT 21Н:
MOV АН,0AH ;3апрос функции ввода
LEA DX,NAMEPAR ;3агрузить адреса списка параметров