1. Розділимо довжину 09 на 2 одержимо 4, і

2. Віднімемо це значення від 40, одержимо 36

Команда SHR у процедурі E10CENT зрушує довжину 09 на oдин біт вправо, виконуючи таким чином розподіл на 2. Значення біт 00001001 переходить у 00000100. Команда NEG змінює знак +4 На -4. Команда ADD додає значення 40, одержуючи у регістрі DL номер початкового стовпця - 36. При установці курсору на рядок 12 і стовпець 36 ім'я буде виведене на екран у наступному виді:

Рядок 12: TED SMITH

Стовпець: 36 40

У процедурі E10CODE існує команда, що встановлює cимвол звукового сигналу (07) в області введення безпосередньо після імені:

MOV NAMEFLD[BX],07

Попередня команда встановлює в регістрі BX значення довжини, і команда MOV потім, комбінуючи довжину в регістрі BX і адресу поля NAMEFLD, пересилає код 07. Наприклад, при довжині імені 05 код 07 буде поміщений за адресою NAMEFLD+05 (заміщаючи значення коду Return). Остання команда в процедурі E10CODE встановлює обмежувач "$" після коду 07. Таким чином, коли процедура F10CENT виводить на екран ім'я, то генеpується також звуковий сигнал.

Уведення єдиного символу Return

При введенні імені, що перевищує по довжині максимальне значення, зазначене в списку параметрів, виникає звуковий сигнал і система oчікує уведення тільки символу Return. Якщо узагалі не вводити ім'я, а тільки натиснути клавішу Return, то система прийме її і yстановить у списку параметрів нульову довжину в такий спосіб: Список параметрів (тичина.): :14:00:0D:. Для позначення кінця імен, що вводяться, користувач може просто натиснути Return у відповідь на черговий запит на введення імені. Прогpамма визначає кінець уведення по нульовій довжині.

Заміна символу Return

Значення, що вводяться, можна використовувати для самих різних цілей, наприклад: для печатки повідомлень, збереження в таблиці, запису на диск. При цьому, можливо, з'явиться необхідність заміни символу Return (тичина.0D) в області NAMEFLD на символ пробілу (тичина.20). Поле NAMELEN містить дійсну або відносну довжину адреси коду 0D. Якщо, наприклад, NAMELEN містить довжину 05, то адреса коду 0D дорівнює NAMEFLD+5. Можна занести цю довжину в регістр BX для індексної адресації в поле NAMEFLD:

MOV BH,00 ;Установити в регістрі BX

MOV BL,NAMELEN ; значення 0005

MOV NAMEFLD[BX],20H ;Замінити 0D на пробіл

Третя команда MOV заносить символ пробілу (тичина.20) по адресі, визначенній першим операндом: адреса поля NAMEFLD плюс вміст регістра BX, тобто NAMEFLD+5.

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

БАЙТ АТРИБУТІВ

Байт атрибутів, як для монохромного, так і для графічного дисплея в текстовому (не графічному) режимі визначає характеристики кожного відображуваного символу. Атрибут-байт-атрибут має наступні 8 біт:

Фон Текст

Атрибут: BL R G B I R G B

Номер бітів: 7 6 5 4 3 2 1 0

Букви RGB представляють бітові позиції, керуючі червоним (red), зеленим (green) і синім (blue) променем у кольоровому моніторі. Біт 7 (BL) установлює миготіння, а біт 3 (I) - рівень яскравості. На монохроматичних моніторах текст висвічується зеленим чи жовтогарячим на темному фоні, хоча в даному розділі таке зображення називається чорно-білим (BW). Для модифікації атрибутів можна комбінувати біти наступним чином:

Ефект виділення Фон Текст

RGB RGB

Невідображуваний (чорний по чорному) 000 000

Підкреслення (не для кольору) 000 001

Нормальний (білий по чорному) 000 111

Інвертований (чорний по білому) 111 000

Кольорові монітори не забезпечують підкреслення; замість цього установка біт підкреслення вибирає синій колір для тексту і виходить відображення синім по чорному. Нижче приведено деякі атрибути, засновані на комбінації бітів фону, тексту, миготіння і виділення яскравістю:

Двійковий Тичина. Ефект виділення

код код

0000 0000 00 Невідображуваний (для паролів)

0000 0111 07 Білий по чорному (нормальний)

1000 0111 87 Білий по чорному (миготіння)

0000 1111 0F Білий по чорному (яскравий)

0111 0000 70 Чорний по білому (інвертований)

1111 0000 F0 Чорний по білому (инверт. миготливий)

Ці атрибути підходять для текстового режиму, як для монохромних, так і для кольорових дисплеїв. У наступній главі буде показано, як вибирати конкретні кольори. Для генерації атрибуту можна використовувати команду INT 10H. При цьому регістр BL повинен містити значення байта-атрибута, а регістр AH один з наступних кодів: 06 (прокручування нагору), 07 (прокручування вниз), 08 (уведення чи атрибута символу), 09 (виведення атрибута чи символу). Якщо програма встановила деякий атрибут, то він залишається таким, доки програма його не змінить. Якщо встановити значення байта атрибута рівним тичина.00, то символ взагалі не буде відображений.


Лекція 10

 

1.       Переривання 10h

2.       Функції екранного режиму. Функції малювання крапки та прямої

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

1. Переривання 10h

 

Переривання INT 10H забезпечує керування всім екраном. В регістрі AH встановлюється код, що визначає функцію переривання. Команда зберігає зміст регитрів BX, CX, DX, SI і BP. Нижче описані всі можливі функції.

AH=00: Установка режиму. Дана функція дозволяє периключати кольоровий монітор у текстовий чи графічний режим. Установка pежиму для виконуваної в сучасний момент програми здійснюється c допомогою INT 10H. При установці відбувається очищення екрану. Зміст регістру AL може бути наступним:

00 40 х 25 чорно-білий текстовий режим

01 40 х 25 стандартний 16-кольоровий текстовий режим

02 80 х 25 чорно-білий текстовий режим

03 80 х 25 стандартний 16-кольоровий текстовий режим

04 320 х 200 стандартний 4-кольоровий графічний режим

05 320 х 200 чорно-білий графічний режим

06 640 х 200 чорно-білий графічний режим

07 80 х 25 чорно-білий стандартний монохроматичний

08 - 0A формати для моделі PCjr

0D 320 х 200 16-кольоровий графічний режим (EGA)

0E 640 х 200 16- кольоровий графічний режим (EGA)

0F 640 х 350 чорно-білий графічний режим (EGA)

10 640 х 350 64- кольоровий графічний режим (EGA)

EGA (Enhanced Graphics Adapter) - позначає удосконалений графічний адаптер. Наступний приклад показує установку стандартного 16- кольорового текстового режиму

MOV AH,00 ;Функція установки режиму

MOV AL,03 ;Стандартний кольоровий текст 80 х 25

INT 10H ;Викликати BIOS

Для визначення типу адаптера, встановленого в системі, служить переривання BIOS INT 11H. Дана команда повертає в регістрі AX значення, в якому біти 5 і 4 вказують на відео режим:

01 40 х 25 чорно-білий режим у кольоровому адаптері

10 80 х 25 чорно-білий режим у кольоровому адаптері

11 80 х 25 чорно-білий режим у чорно-білому адаптері

Програма, що працює з невідомим типом монітора, може перевірити тип по регістру AX після INT 11H і потім встановити необхідний режим. AH=01: Установка розміру курсору. Курсор не є символом з набору ASCII-кодів. Комп'ютер має власне апаратне забезпечення для керування видом курсору. Для цього існує спеціальна обробка по INT перериванню. Звичайно символ курсоpа схожий на символ підкреслення. Використовуючи INT 10H, можна керувати вертикальним розміром курсору: біти 4-0 у регістрі CH для верхньої лінії сканування, а біти 4-0 у регістрі CL - для нижньої. Можна встановити будь-який pозмір курсору по вертикалі: від 0 до 13 для монохроматичних і EGA монітоpів і від 0 до 7 для більшості кольорових моніторів. Наведемо приклад для збільшення розміру курсору від його верхньої до нижньої лінії сканування:

MOV AH,01 ;Встановити розмір курсору

MOV CH,00 ;Верхня лінія сканування

MOV CL,13 ;Нижня лінія сканування

INT 10H ;Викликати BIOS

В результаті виконання цих команд курсор перетвориться в суцільний мигітливий прямокутник. Можна встановити будь-який розмір курсору між верхньою і нижньою границями, наприклад, 04/08, 03/10 і т.д. Курсор зберігає свій вигляд, поки програма не змінить його. Використання розмірів 12/13 (для моно) і 6/7 (для кольору) переводить курсор у його нормальний вигляд.

AH=02: Установка позиції курсору. Ця функція встановлює курcор у будь-яку позицію на екрані відповідно до координатами cтрічки і стовпця. Номер сторінки звичайно дорівнює 0, але може мати значення від 0 до 3 при 80 стовпцях на екрані. Для установки позиції курсору необхідно занести в регістр AH значення 02, у регістр BH номер сторінки і в регістр DX координати рядка і стовпця:

MOV AH,02 ;Встановити положення курсору

MOV BH,00 ;Сторінка 0

MOV DH,рядок ;Рядок

MOV DL,стовпець ;Стовпець

INT 10H ;Викликати BIOS

AH=03: Читання поточного положення курсору. Програма може визначити положення курсору на екрані (рядок і стовпець), а також pозмір курсору, у такий спосіб:

MOV AH,03 ;Визначити положення курсору

MOV BH,00 ;Встановити сторінку 0

INT 10H ;Викликати BIOS


Після повернення регістр DH буде містити номер рядка, а регістр DL-номер стовпця. У регістрі CH буде верхня лінія cканування, а в регістрі CL -нижня.

AH=04: Читання положення світлового пера. Дана функція використовується в графічному режимі для визначення положення світлового пеpа.

AH=05: Вибір активної сторінки. Нова сторінка встановлюється для кольорових текстових режимів від 0 до 3. Для режиму 40 х 25 можливо встановлювати до 8 сторінок (від 0 до 7), а для режиму 80 х 25 - до 4 сторінок (від 0 до 3).

MOV AH,05 ;Встановити активну сторінку

MOV AL,сторінка ;Номер сторінки

INT 10H ;Викликати BIOS

AH=06: Прокручування екрана нагору. Коли програма намагається видати текст на рядок нижче останнього на екрані, то відбувається перехід на верхній рядок. Навіть якщо за допомогою переривання буде створенний нульовий стовбець, все одно припускається новий рядок, і нижні рядки на екрані будуть зіпсовані. Для вирішення цієї проблеми використовується прокручування екрану.

Раніше код 06 використовувався для очищення екрану. В текстовому режимі установка в регістрі AL значення 00 призводить до повного прокручування нагору всього екрану, очищаючи його пробілами. Установка ненульового значення в регістрі AL визначає кількість рядків прокручування екрану нагору. Верхні рядки ідуть з екрану, а чисті рядки вводяться знизу. Наступні команди виконують прокручування всього екрану на один рядок:

MOV AX,0601H ;Прокрутити на один рядок нагору

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

MOV CX,0000 ;Координати від 00,00

MOV DX,184FH ;до 24,79 (повний екран)

INT 10H ;Викликати BIOS

Для прокручування будь-якої кількості рядків необхідно встановити відповідне значення в регістрі AL. Регістр BH містить атрибут для нормального чи інвертованого відображення, миготіння, установки кольору і т.д. Значення в регістрах CX і DX дозволяють прокручувати будь-яку частину екрану. Нижче наведений стандартний підхід до прокручування:

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

2. Видати текст і просунути курсор на наступний рядок.

3. Перевірити, чи знаходиться курсор на останньому рядку (CMP ROW,22).

4. Якщо так, то збільшити елемент ROW (INC ROW) і вийти.

5. Якщо ні, то прокрутити екран на один рядок і, використовуючи ROW перемістити курсор.

AH=07: Прокручування екрану вниз. Для текстового режиму прокручування екрану вниз позначає видалення нижніх рядків і вставка чистих рядків зверху. Регістр AH повинен містити 07, значення інших регістpів аналогічні функції 06 для прокручування нагору.

AH=08: Читання атрибуту/символу в поточній позиції курсору. Для читання символу і байта атрибута з дисплейного буфера, як у текстовому, так і в графічному режимі використовуються наступні команди:

MOV AH,08 ;Запит на читання атр./симв.

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

INT 10H ;Викликати BIOS

Дана функція повертає в регістрі AL значення символу, а у AH - його атрибут. У графічному режимі функція повертає тичина. 00 для не ASCII-кодів. Оскільки ця функція читає тільки один cимвол, то для символьного рядка необхідна організація циклу.

AH=09: Виведення атрибута/символу в поточну позицію курсору. Для висновку на екран символів у текстовому чи графічному режимі з установкою миготіння, інвертування і т.д. можна скористатися наступними командами:

MOV AH,09 ;Функція висновку

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

MOV BH,сторінка ;Номер сторінки (текст.реж.)

MOV BL,атрибут ; чиАтрибут колір

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

У регістр AL повинний бути поміщений виведений на екран символ. Значення в регістрі CX визначає число повторень символу на екрані. Виведення на екран послідовності різних символів вимагає організації циклу. Дана функція не переміщує курсор. У наступному прикладі на екран виводиться п'ять мигітливих "серденьок" в інвертованому вигляді:

MOV AH,09 ;Функція висновку

MOV AL,03H ;Хробаки (карткова масть)

MOV BH,00 ;Сторінка 0 (текст. режим)

MOV BL,0F0H ;Миготіння, інверсія

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

INT 10H ;Викликати BIOS

В текстовому (але не в графічному) режимі символи автоматично виводяться на екран і переходять з одного рядка на інший. Для висновку на екран тексту чи запиту повідомлення необхідно скласти програму, що встановлює в регістрі CX значення 01 і в циклі завантажує в регістр AL з пам'яті виведені символи тексту. Оскільки регістр CX у даному випадку зайнятий, то не можна використовувати команду LOOP. Крім того, при висновку кожного символу необхідно додатково просувати курсор у наступний стовбець (функція 02).

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

AH=0A: Виведення символу в поточну позицію курсору. Єдина різниця між функціями 0A і 09 полягає в тому, що функція 0A не встановлює атрибут:

MOV AH,0AH ;Функція виведення

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

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

MOV CX,повторення ;Число повторень символу

INT 10H ;Викликати BIOS

Для більшості застосувань команда переривання DOS INT 21H більш зручна.

AH=0E: Виведення у режимі телетайпа. Дана функція дозволяє використовувати монітор, як простий термінал. Для виконання цієї функції необхідно встановити в регістрі AH тичину значення 0E, у pегістр AL помістити виведений символ, колір тексту (у графічному режимі) занести в регістр BL і номер сторінки для текстового режиму - у регістр BH. Звуковий сигнал (код 07H), повернення на одну позицію (08H), кінець рядка (0AH) і повернення каретки (0DH) діють, як команди для форматування екрану. Дана функція автоматично просуває курсор, переводить символи на наступну cтрічку, виконують прокручування екрану і зберігає поточні атрибути екрану.

AH=0F: Одержання поточного відео режиму. Дана функція повертає в регістрі AL поточний відео режим (див.функцію AH=00), в pегістрі AH - число символів в рядку (20, 40 чи 80), у регістрі BH - номер сторінки.

AH=13: Встановлення символьного рядка (тільки для AT). Дана функція дозволяє на комп'ютерах типу AT виводити на екран символьні рядки з установкою атрибутів і переміщенням курсору:

MOV AH,13H ;Функція висновку на екран

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

MOV BH,сторінка ;

LEA BP,адреса ;Адреса рядка в ES:BP

MOV CX,довжина ;Довжина рядка

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

INT 10H ;Викликати BIOS

Можливий наступний додатковий сервіс:

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

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

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

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

2. Функції екранного режиму. Функції малювання крапки та прямої

ГРАФІЧНИЙ РЕЖИМ

Для генерації кольорових зображень у графічному режимі використовують- ся мінімальні крапки растра - пікселі (pixel). Кольоровий графічний адаптер (CGA) має три ступені дозволу:

1. Низький дозвіл (не підтримується в ROM) забезпечує встановлення 100 рядків по 160 крапок (тобто чотири біти на крапку). Кожна крапка може мати один з 16 стандартних квітів, як описано в попередньому розділі "Кольору". Реалізація даного режиму включає пряму адресацію контролера Motorola 6845 CRT. Для цього використовуються два порти: тичина.3D4 і 3D5.

2. Середній дозвіл для стандартної кольорової графіки забезпечує 200 рядків по 320 крапок. Кожен байт у цьому випадку представляє чотири крапки (тобто два біти на крапку).

3. Високий дозвіл забезпечує 200 рядків по 640 крапок. Оскільки в даному випадку потрібно 16ДО байт пам'яті, високий дозвіл досягається тільки в чорно-білому (BW) режимі. Кожен байт тут представляє 8 крапок (т.е. один біт на крапку). Нульове значення біта дає чорний колір крапки, одиничне - білий.

Помітимо, що в графічному режимі ROM містить крапкові вигляди тільки для перших 128 ASCII-кодів. Команда INT 1FH забезпечує доступ до 1ДО байтової області в пам'яті, визначальної інші 128 символів. (8 байт на символ). Відображення графічних байтів у відео сигнали аналогічно, як для середнього, так і для високого pазрешения.

РЕЖИМ СЕРЕДНЬОГО ДОЗВОЛУ

При середньому дозволі кожен байт представляє чотири крапки, пронумерованих від 0 до 3:

Байт: :C1 C0:C1 C0:C1 C0:C1 C0:

Піксели: 0 1 2 3

У будь-який момент для кожної крапки можливі чотири кольори, від 0 до 3. Обмеження в 4 кольори підрозумівається тим, що двобітова крапка має 4 комбінації значень бітів: 00, 01, 10 і 11. Можна вибpати значення 00 для кожного з 16 можливих квітів чи фону вибрати значення 01, 10, і 11 для однієї з двох палітр. Кожна палітpа має три кольори:

C1 C0 Палітра 0 Палітра 1

0 0 фон фон

0 1 зелений голубий

1 0 червоний бузковий

1 1 коричневий білий

Для вибору кольору палітри і фону використовується INT 10H. Таким чином, якщо, наприклад, обраний фон жовтого кольору і палітра 0, то можливі наступні кольори крапки: жовтий, зелений, червоний і коричневий. Байт, що містить значення 10101010, відповідає червоним крапкам. Якщо вибрати колір фону - синій і палітру 1, то можливі кольори: синій, блакитний, бузковий і білий. Байт, що містить значення 00011011, відображає синю, блакитну, бузкову і білу крапки. Переривання BIOS INT 10H для графіка Функція AH=00 команди INT 10H встановлює графічний режим. Функція AH=11 команди INT 10H дозволяє вибрати колір палітри і вивести на екран графічний символ. Код у регіст- рі AH визначає функцію: AH=00: Установка режиму. Нульове значення в регістрі AH і 04 у pегістрі AL установлюють стандартний кольоровий графічний режим:

MOV AH,00 ;Функція установки режиму

MOV AL,04 ;Дозвіл 320х200

INT 10H

Установка графічного режиму приводить до зникнення курсору з екрана. Подробиці по установці режиму приведені у главі 9.

AH=0BH: Установка колірної палітри. Число в регістрі BH визначає призначення регістра BL: BH=00 вибирає колір фону і бордюру відповідно до змісту pегістра BL. Колір фону від 1 до 16 відповідає тичина значенням oт 0 до F;

BH=01 вибирає палітру відповідно вмісту регістра BL (0 чи 1):

MOV AH,0BH ;Функція установки кольору

MOV BH,01 ;Вибір палітри

MOV BL,00 ; 0 (зелений, червоний, корич.)

INT 10H ;Викликати BIOS

Палітра, встановлена один раз, зберігається, поки не буде скасована іншою командою. При зміні палітри весь екран змінює колірну комбінацію. При використанні функції AH=0BH у текстовому режимі, значення, установлене для кольору 0 у палітрі, визначає колір бордюру.

AH=0CH: Виведення крапки на екран. Використання коду 0C у регістрі AH дозволяє вивести на екран крапку в обраному кольорі (фон і палітра). Наприклад, для дозволу 320х200 завантажимо в регістр DX вертикальну координату (від 0 до 199), а в регістр CX - горизонтальну координату (від 0 до 319). У регістр AL помістимо колір крапки (від 0 до 3):

MOV AH,0CH ;Функція висновку крапки

MOV AL,колір ;Колір крапки

MOV CX,стовпець ;Горизонтальна координата

MOV DX,рядок ;Вертикалькая координата

INT 10H ;Викликати BIOS

AH=0DH: Читання крапки з екрана. Дана функція дозволяє прочитати крапку для визначення її кольору. У регістр DX повинна бути завантажена вертикальна координата (від 0 до 199), а в регістр CX - горизонтальна (від 0 до 319). У регістрі AH повинне бути значення 0D. Функція повертає колір крапки в регістрі AL.

 


Лекція 11

 

1.         Поняття "середовища години виконання програми" та "системні змінні"

2.         PSP та отримання доступу до командної стрічки

3.         Доступ до системних змінних з програми

 

1. Поняття "середовища години виконання програми" та "системні змінні"

 

Середовищем години виконання називається адресний проміжок, у який завантажується сама програма, адресний проміжок, який виділяється їй для динамічних змінних, а також набір та значення системних змінних.

Системною змінною називається такий спеціальний іменований параметр, який існує в операційній системі протягом її роботи, і який задає певне значення, критичне для її роботи, або роботи якоїсь програми.

 

2. PSP та отримання доступу до командної стрічки

Префікс програмного сегмента (PSP) займає 256 (тичина 100) байт і завжди передує в пам'яті кожної COM- чи EXE-програмі, що повинна бути виконана. PSP містить наступні поля:

00 Команда INT 20H (тичина.CD20).

02 Загальний розмір доступної пам'яті у форматі хххх0. Наприклад, 512K вказується як 8000 замість 80000.

04 Зарезервовано.

05 Довгий виклик диспетчера функцій DOS.

OA Адреса підпрограми завершення.

OE Адреса підпрограми реакції на Ctrl/Break.

12 Адреса підпрограми реакції на фатальну помилку.

16 Зарезервовано.

2C Сегментна адреса середовища для збереження ASCIIZ рядків.

50 Виклик функцій DOS (INT 21H і RETF).

5C Параметрична область 1, форматована як стандартний невідкритий блок керування файлів (FCB№1).

6C Параметрична область 2, форматована як стандартний невідкритий блок керування файлім (FCB№2); перекривається, якщо блок FCB№1 відкритий.

80-FF Буфер передачі даних (DTA).

Буфер передачі даних DTA

Дана частина PSP починається за адресою тичина.80 і являє собою буферну область уведення-висновку для поточного дисковода. Вона містить у першому байті число, що вказує скільки разів були натиснуті клавіші на клавіатурі безпосередньо після введення імені програми. Починаючи з другого байта, знаходяться введені символи (якщо такі існують). Далі випливає всіляке "сміття", що залишилося в пам'яті після роботи попередньої програми. Наступні приклади демонструють призначення буфера DTA:

Приклад 1. Команда без операндів. Припустимо, що ви визвали програму CALCIT.EXE для виконання за допомогою команди CALCIT [return]. Після того, як DOS побудує PSP для цієї програми, він установить у буфері за адресою тичина.80 значення тичина.000D. Перший байт містить число символів, уведених із клавіатури після імені CALCIT, крім символу "повернення каретки". Оскільки крім клавіші Return не було натиснуто ні однієї, то число символів дорівнює нулю. Другий байт містить символ повернення каретки, тичина.0D. Таким чином, по адресах тичина.80 і 81 на ходятся 000D.

Приклад 2. Команда з текстовим операндом. Припустимо, що після команди був зазначений текст (але не ім'я файлу), наприклад, COLOR BY, що позначає виклик програми COLOR і передачу цій програмі параметра "BY" для установки блакитного кольору на жовтому фоні. У цьому випадку, починаючи з адреси тичина.80, DOS установить наступні значення байтів:

80:03 20 42 59 0D

Ці байти позначають довжину 3, пробіл, "BY" і повернення каретки.

Приклад 3. Команда з ім'ям файлу в операнде. Програми типу DEL (видалення файлу) припускають після імені програми введення імені файлу як параметр. Якщо буде введено, наприклад, DEL B:CALCIT.OBJ [return], то PSP, починаючи з адрес тичина.5C і тичина.80, буде містити:

5C: 02 43 41 4C 43 49 54 20 20 4F 42 4A

C A L C I T O B J

80: 0D 20 42 3A 43 41 4C 43 49 54 2E 4F 42 4A 0D B : C A L C I T . 0 B J

Починаючи з адреси 5C, знаходиться невідкритий блок FCB, що містить ім'я файлу, що був зазначений у параметрі, CALCIT.OBJ, але не ім'я виконуваної програми. Перший символ вказує номер дисковода (02=B у даному випадку). Слідом за CALCIT знаходяться два пробіли, що доповнюють ім'я файлу до восьми символів, і тип файлу, OBJ. Якщо ввести два параметри, наприклад:

progname A:FILEA,B:FILEB

тоді DOS побудує FCB для FILEA по зсуві тичина 5C і FCB для FILEB по зсуві тичина.6C. Починаючи з адреси 80 у цьому випадку міститься число введених символів (довжина параметрів) - 16, пробіл (тичина.20) A:FILEA,B:FILEB і символ повернення каретки (OD).

Оскільки PSP безпосередньо передує вашій програмі, то можливий доступ до області PSP для обробки зазначених чи файлів або для виконання визначених дій. Для локалізації буфера DTA COM-програма може просто помістити тичину.80 у регістр SI і одержати доступ у такий спосіб:

MOV SI,80H;Адреса DTA

CMP BYTE PTR [SI],0;У буфері нуль?

JE EXIT

Для EXE-програми не можна з упевненістю затверджувати, що кодовий сегмент безпосередньо розташовується після PSP. Однак, тут при ініціалізації регістри DS і ES містять адреса PSP, так що можна зберегти вміст регістра ES після завантаження регістра DS:

MOV AX,DSEG

MOV DS,AX

MOV SAVEPSP,ES

Пізніше можна використовувати збережена адреса для доступу до буфера PSP:

MOV SI,SAVEPSP

CMP BYTE PTR [SI+ 80H],0;У буфері нуль?

JE EXIT

DOS версії 3.0 і страше містить команду INT 62H, завантажую щую в регістр BX адреса поточного PSP, якому можна использо вать для доступу до даних у PSP.


Информация о работе «Мова програмування Assembler»
Раздел: Информатика, программирование
Количество знаков с пробелами: 206879
Количество таблиц: 0
Количество изображений: 16

Похожие работы

Скачать
32096
0
0

... кодами сканування клавіатури (scan-коды). Код віджимання є двобайтовим: перший байт рівний F0h, а другий байт збігається з кодом натиснення. Є три рівні програмування підсистеми клавіатури: 1) на фізичному рівні (програмування портів 60h і 64h контроллера клавіатури); 2) за допомогою BIOS ( INT 09h, INT 16h ); 3) за допомогою переривання DOS ( INT 21h ). Для виконання введення даних з клаві ...

Скачать
148745
30
12

... обміну даними з ПЭВМ у процесі виконання програми користувача; 11.      Вкажіть типи буферних схем, використаних в УУМС-2. Їх призначення та особливості роботи. 12.      Дайте визначення адресного простору мікропроцесорної системи та розпишіть його розподіл в УУМС-2. Адресний простір УУМС складається з областей, состав яких показаний у табл.2. Варто звернути увагу, що внутрішні адресні області ...

Скачать
70440
0
5

... Сван Том. – К.: Диалектика, 1997. – 480с., ил. 7.       Секреты Delphi 2: Пер. с англ./Рэй Лишнер. – К.: НИПФ «ДиаСофтЛтд.», 1996. – 800 с. ДОДАТОК ТЕКСТ ПРОГРАМИ “ВІЗУАЛЬНИЙ ОБЛІК ВХІДНИХ ДАНИХ ІНТЕРФЕЙСУ RS-232” Текст основної програми program Project1; uses Forms, MainForm in 'MainForm.pas' {Form1 Головна форма}, GraphicDiagram in 'GraphicDiagram.pas', Unit3 in 'Unit3.pas' ...

Скачать
25738
5
6

... CF (a+b+CF), і розміщує результат замість першого операнда. Обмеження на операнді такі ж, як і в команді ADD. Установлюються прапорці AF, CF, OF, FF, SF, ZF. Ця команда використовується для програмування арифметичних операцій над довгими цілими числами. ІNC a - Збільшення на 1. Команда додає 1 до значення операнда а. Операнд може знаходитися в пам'яті або в регістрі. Установлюються прапорці AF, ...

0 комментариев


Наверх