Функції введення/виведення символу та стрічки



Керування кольором

 

Функції переривання 21 h

 

Переривання 21H є перериванням, через яке відбувається звертання до основним функціям DOS. Це переривання забезпечує доступ до системи введення-висновку, керованої DOS. На рис.5.4 представлені всі можливі функції, що використовують це переривання. Вибір функції в програмі здійснюється за допомогою запису в регістр AH потрібного значення перед виконанням переривання 21H.

ФУНКЦІЇ ПЕРЕРИВАННЯ DOS INT 21H

Нижче приведені базові функції для переривання DOS INT 21H. Код функції встановлюється в регістрі AH:

00 Завершення програми (аналогічно INT 20H).

01 Уведення символу з клавіатури з луною на екран.

02 Виведення символу на екран.

03 Уведення символу з асинх. комунікаційного каналу.

04 Виведення символу на асинх. комунікаційний канал.

 

Функції введення/виведення символу та стрічки

 

ВИВЕДЕННЯ НА ЕКРАН: БАЗОВА ВЕРСІЯ DOS

Виведення на екран у базовій версії DOS вимагає визначення текстового повідомлення в області даних, установки в регістрі AH значення 09 (виклик функції DOS) і вказівки команди DOS INT 21H. В процесі виконання операції кінець повідомлення визначається по oбмежнику ($), як це показано нижче:

 

NAMPRMP DB 'Ім'я покупця?','$

MOV AH,09 ;Запит висновку на екран

LEA DX,NAMPRMP ;Завантаження адреси сообщ.

INT 21H ;Виклик DOS

 

Знак обмежувача "$" можна кодувати безпосередньо після cимвольного рядка (як показано в прикладі), усередині рядка:

 

Ім'я покупця?$', чи в наступному операторі DB '$'.

 

Використовуючи дану операцію, не можна вивести на екран символ долара "$". Крім того, якщо знак долара буде відсутній у кінці рядка, то на екран будуть виводитися всі наступні символи, поки знак "$" не зустрінеться в пам'яті.

Команда LEA завантажує адресу області NAMPRMP у регістр DX для передачі в DOS адреси виведеної інформації. Адреса NAMPRMP, що завантажується в DX по команді LEA, є oтносительным, тому для обчислення абсолютної адреси даних DOS складає значення регістрів DS і DX (DS:DX).

ПРОГРАМА: ВИВЕДЕННЯ НА ЕКРАН НАБОРУ СИМВОЛІВ КОДУ ASCII

Більшість з 256 кодів ASCII мають символьне позначення, і можуть бути виведені на екран. Коди 00 і FF не мають символів і виводяться на екран у виді пробілів, хоча символ пробілу має в ASCII шіст. код 20.

На рис. 8.1 показана COM-програма, що виводить на екран повний набір символів коду ASCII. Програма викликає три процедури; B10CLR, C10SET і D10DISP. Процедура B10CLR очищає екран, а процедура C10SET встановлює курсор у положення 00,00. Процедура D10DISP виводить вміст CTR, що на початку иніціалізується значенням 00 і потім збільшується на 1 при кожному висновку на екран, поки не досягне шіст. значення FF.

Оскільки символ долара не виводиться на екран і крім того коди від 08 до 0D є спеціальними керуючими cимволами, тому це приводить до переміщення курсору й іншим керуючим впливам. Завдання: уведіть програму, виконайте асемблювання, компоновку і перетворення в COM-файл. Для запуску програми введіть її ім'я, наприклад, У:ASCII.COM. Перший виведений рядок починається з пробільного символу (тичина.00), двох "усміхнених облич" (тичина. 01 і 02) і трьох карткових символів (тичина.03, 04 і 05). Код 07 видає звуковиття сигнал. Код 06 повинний відобразитися картковим символом "піки", але керуючі символи від тичина 08 до 0D зітруть його. Код 0D є "поверненням каретки" і приводить до переходу на новий (наступний) рядок. Код тичина 0E - представляється у виді музичної ноти. Символи після тичини 7F є графічними. Можна змінити програму для обходу керуючих символів. Нижче приведений приклад фрагмента програми, що дозволяє обійти усі символи між тичинами 08 і 0D. Ви можете поекспериментувати, oбходячи тільки, скажімо, тичину 08 (повернення на символ) і 0D (повернення каретки):

 

CMP CTR,08H ; Менше ніж 08?

JB D30 ; так - прийняти

CMP CTR,0DH ; Менше/дорівнює 0D?

JBE D40 ; так - обійти

D30:

MOV AH,40H ; Виведення символів < 08

INT 21H ; і > 0D

D40:

INC CTR

 

УВЕДЕННЯ ДАНИХ ІЗ КЛАВІАТУРИ: БАЗОВА ВЕРСІЯ DOS

Процедура введення даних із клавіатури простіше, ніж виведення на екран. Для введення, що використовує базову DOS, область уведення вимагає наявності cписка параметрів, що містить поля, що необхідні при виконанні команди INT. По-перше, повинна бути визначена максимальна довжина тексту, що вводиться. Це необхідно для попередження користувача звуковим сигна брухт, якщо набраний занадто довгий текст; символи, що перевищують максимальну довжину не приймаються. По-друге, у списку параметрів повинне бути визначене поле, куди команда повертає дійсну довжину введеного тексту в байтах. Нижче приведений приклад, у якому визначений список параметрів для області введення. LABEL являє собою директиву з атрибутом BYTE. Перший байт містить максимальну довжину даних, що вводяться. Оскільки це однобайтове поле, то можливо його максимальне значення - тичина FF чи 255. Другий байт необхідний DOS для занесення в нього дійсного числа введених символів. Третім байтом починається поле, що буде містити введені символи.

 

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

MAXLEN DB 20 ; Максимальна довжина

ACTLEN DB ? ; Реальна довжина

NAMEFLD DB 20 DUP (' ') ; Уведені символи

 

Оскільки в списку параметрів директива LABEL не займає місця, то NAMEPAR і MAXLEN вказують на той самий aдрес пам'яті. У трансляторі MASM для визначення списку параметрів у виді структури може використовуватися також директива STRUC. Однак, у зв'язку з тим, що посилання на імена, визначені всередині, вимагають спеціальної адресації, утримаємося cейчас від розгляду даної теми до глави 24 "Директиви асемблера". Для запиту на введення необхідно помістити в регістр AH номер функції - 10 (тичина. 0AH), завантажити адреса списку параметрів (NAMEPAR у нашому прикладі) у регістр DX і виконати INT 21H:


MOV AH,0AH ;Запит функції введення

LEA DX,NAMEPAR ;Завантажити адреси списку параметрів

INT 21H ;Викликати DOS

 

Команда INT очікує поки користувач не введе з клавіатури текст, перевіряючи при цьому, щоб число введених cимволів не перевищувало максимального значення, зазначеного в списку параметрів (20 у нашому прикладі). Для вказівки кінця введення користувач натискає клавішу Return. Код цієї клавіші (тичина. 0D) також заноситься в поле введення (NAMEFLD у нашому прикладі). Якщо, наприклад, користувач ввів ім'я BROWN (Return), то cписок параметрів буде містити інформацію:

дес.: :20:5: В: R: O: W: N: #: : : : : ...

шіст.: :14:05:42:52:4F:57:4E:0D:20:20:20:20: ...

В другий байт списку параметрів (ACTLEN у нашому прикладі) команда заносить довжину введеного імені - 05. Код Return знаходиться за адресою NAMEFLD +5. Символ # використаний тут для індикації кінця даних, тому що 0D не має відображуваного символу. Оскільки максимальна довжина в 20 символів включає тичина.0D, то дійсна довжина що вводиться текстом може бути тільки 19 символів.


Дата добавления: 2019-07-15; просмотров: 222; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!