на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Мова програмування Assembler
p align="left">ФУНКЦІЇ ПЕЧАТКИ В РОЗШИРЕНІЙ ВЕРСІЇ DOS

В операційній системі DOS 2.0 наявні файлові покажчики, що були показані в главах по керуванню екраном дисплея і дискової печатки. Для висновку на друкуючий пристрій використовується функція DOS тичина.40 і стандартний файловий номер 04. Наступний приклад демонструє печатка 25 символів з області HEADG:

У випадку помилки операція встановлює прапор CF і повертає код помилки в регістрі AX.

ПРОГРАМА: ПОСТОРІНКОВА ПЕЧАТКА З ЗАГОЛОВКАМИ

Програма, приведена на рис.19.1, аналогічна програмі на рис.9.1, за винятком того, що після введення імен з клавіатури виводить їх не на екран, а на друкуючий пристрій. Кожна надрукована сторінка містить заголовок, і через подвійний інтервал список введених імен у наступному виді:

List of Employee Names Page 01

Clancy Alderson

Ianet Brown

David Christie

Програма підраховує число надрукованих рядків і при досягненні кінця сторінки виконує прогін до початку наступної сторінки. У програмі існують такі процедури:

D10INPT Видає на екран запит і потім вводить ім'я з клавиатури.

E10PRNT Виводить ім'я на друкуючий пристрій (довжина імені береться з вступного списку параметрів); у кінці сторінки викликає процедуру M10PAGE.

M10PAGE Виконує прогін на нову сторінку, друкує заголовок, скидає лічильник рядків і збільшує лічильник сторінок на одиницю.

P100UT Загальна підпрограма для безпосереднього висновку на друкува льний пристрій.

На початку виконання необхідно надрукувати заголовок, але не робити перед цим переклад сторінки. Процедура M10PAGE обходить переклад сторінки, якщо лічильник PAGECTR містить 01 (початкове значення). Поле PAGECTR - визначене як PAGECTR DB '01'. У результаті буде згенеровано число в ASCII коді - тичина. 3031. Процедура M10PAGE збільшує лічильник PAGECTR на 1 так, що значення стає послідовно 3032, 3033 і т.д. Ці значення коректні до 3039, далі випливає 303A, яке буде роздруковано, як двокрапка (:). Тому, якщо в правому байті лічильника PAGECTR з'являється тичина 3A, то це значення заміняється на тичину 30, а до лівого байта додається одиниця. У такий спосіб тичина 303A перекодується в тичину 3130, тобто в 10 у символьному представленні.

Перевірка на кінець сторінки до (але не після) печатки імені гарантує, що на останній сторінці буде надруковане по крайній мірі одне ім'я під заголовком.

ПЕЧАТКА ASCII-ФАЙЛІВ І ТАБУЛЯЦІЯ

Табуляція, яка забезпечується, наприклад, відеоадаптерами, полягає в заміні одного символу табуляції (код 09) декількома пробілами при висновку так, щоб наступна позиція була кратна 8. Таким чином, стандартні позиції табуляції є 8, 16, 24 і т.д. Багато принтерів, однак, ігнорують символи табуляції. Тому, така програма, як DOS PRINT, призначена для печатки ASCII файлів (наприклад асемблерних вихідних текстів) перевіряє кожен символ, посилається на принтер. І, якщо виявляється символ табуляції, то програма видає кілька пробілів до позиції кратної 8.

Програма, приведена на рис 19.2, виводить на екран запит на введення імені файлу і, потім, друкує вміст зазначеного файлу. Ця програма на відміну від приведеної на рис.17.3 (виведення файлів на екран) здійснює заміну виведених символів табуляції на відповідне число пробілів. У результаті символ табуляції в позиціях від 0 до 7 приводить до переходу на позицію 8, від 8 до 15 - на 16 і т.д. Команди, що реалізують дану логіку, знаходяться в процедурі G10XFER після мітки G60. Розглянемо три приклади обробки символу табуляції:

У програмі організовані наступні процедури:

З10PRMP Запитує введення імені файлу. Натискання тільки клавіші

Return приводить до завершення роботи програми.

E10OPEN Відкриває дисковий файл по зазначеному імені.

G10XFER Контролює кінець сектора, кінець файлу, кінець області висновку, символи "переклад рядка" і табуляціі. Пересилає звичайні символи в область висновку.

P10PRNT Роздруковує вивідний рядок і очищає область висновку.

R10READ Зчитує сектор з дискового файлу.

Коди "повернення каретки", "переклад рядка" і "прогін сторінки" дійсні для будь-яких принтерів. Можна модифікувати програму для підрахунку рядків, що роздруковуються, і виконання прогону сторінки (тичина.OC) при досягненні, наприклад, рядка 62.

Деякі користувачі воліють установлювати символи "прогін сторінки" у ASCII файлах за допомогою текстового редактора в конкретних місцях тексту, наприклад, наприкінці асемблерних процедур. Крім того, можна змінити програму для функції 05 базової версії DOS. Ця функція виконує виведення кожного символу безпосередньо на принтер. Таким чином можна виключити визначення і використання області висновку.

ПЕЧАТКА ПІД КЕРУВАННЯМ БАЗОВОЇ DOS

Для друку в базовій версії DOS необхідно встановити в регістрі AH код функції 05, а в регістр DL помістити символ, що роздруковується, і, потім, виконати команду INT 21H у такий спосіб:

MOV AH,05; Запит функції печатки

MOV DL,char; символ, ЩоРоздруковується

INT 21H; Виклик DOS

За допомогою цих команд можна передавати на принтер керуючі символи. Однак, печатка, звичайно, припускає виведення повного чи часткового рядка тексту і покрокову обробку області даних, відформатова- ної по рядках. Нижче показана програма печатки повного рядка. Спочатку в регістр SI завантажується початкова адреса області HEADG, а в регістр CX - довжина цієї області. Цикл, що починається по мітці P20, виділяє черговий символ з області HEADG і посилає його на принтер. Оскільки перший символ області HEADG - "прогін сторінки", а останні два - "переклади рядка", тому заголовок друкується на початку нової сторінки і після нього випливає подвійний інтервал.

HEADG DB 0CH,'Industrial Bicycle Mfrs',0DH,0AH,0AH

LEA SI,HEADG ;Установка адреси і

MOV CX,27 ; довжини заголовка

P20:

MOV AH,05 ;Запит функції печатки

MOV DL,[SI] ;Символ із заголовка

INT 21H ;Виклик DOS

INC SI ;Наступний символ

LOOP P20

Поки принтер не включений, DOS видає повідомлення "Out of paper". Після включення харчування програма починає працювати нормально. Для припинення печатки можна натиснути клавіші Ctrl/Break.

СПЕЦІАЛЬНІ КОМАНДИ ПРИНТЕРА

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

Є команди, що розпізнаються по попередньому символу Esc (тичина.IB). Деякі з них у залежності від друкуючого пристрою представлені нижче:

1B 30 Встановити щільність 8 рядків на дюйм

1B 32 Встановити щільність 6 рядків на дюйм

1B 45 Включити жирний формат

1B 46 Виключити жирний формат

Коди команд можна посилати на принтер двома різними способами:

1. Визначити команди в області даних. Наступний приклад установлює вузький формат, 8 рядків на дюйм, потім друкує заголовок із завершальними командами "повернення каретки" і " переклад рядка":

HEADG DB 0FH, 1BH, 30H, 'Title...', 0DH, 0AH

2. Використовувати команди з безпосередніми даними:

MOV AH,05 ;Запит функції печатки

MOV DL,0FH ;Уключити вузький формат

INT 21H

Усі наступні символи будуть друкуватися у вузькому форматі доти, поки програма не видасть на принтер команду, що виключає цей формат. Приведені команди не обов'язково працюють на принтерах будь-яких моделей. Для перевірки можливих команд керування варто ознайомитися з посібником конкретного друкуючого пристрою.

Команда BIOS INT 16H виконує спеціальну операцію, яка відповідно до коду в регістрі AH забезпечує наступні три функції введення з клавіатури.

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

AH=01: Визначення наявності введеного символу. Дана функція скидає прапор нуля (ZF=0), якщо є символ для читання з клавіатури; черговий символ і скен-код будуть поміщені в регістри AL і AH відповідно і даний елемент залишиться в буфері.

AH=02: Визначення поточного стану клавіатури. Дана функція повертає в регістрі AL стан клавіатури з адреси пам'яті тичина 417:

Біт

7 Стан вставки активно (Ins)

6 Стан фіксації верхнього регістра (Caps Lock) переключено

5 Стан фіксації цифрової клавіатури (Num Lock) переключено

4 Стан фіксації прокручування (Scroll Lock) переключено

3 Натиснута комбінація клавішею Alt/Shift

2 Натиснута комбінація клавішею Ctrl/Shift

1 Натиснута ліва клавіша Shift

0 Натиснута права клавіша Shift

ФУНКЦІОНАЛЬНІ КЛАВІШІ

Клавіатура має три основні типи клавіш:

1. Символьні (алфавітно-цифрові) клавіші: букви від a до z, цифри від 0 до 9, символи %, $, # і т.д.

2. Функціональні клавіші: Ноmе, End, Повернення на позицію, стрілки, Return, Del, Ins, PgUp, PgDn і програмно- функціональні клавіші.

3. Керуючі клавіші: Alt, Ctrl і Shift, що працюють разом з іншими клавішами.

Функціональна клавіша не виробляє який-небудь символ, але частіше формує запит на деякі дії. Апаратна реалізація не жадає від функціональних клавіш виконання яких-небудь специфічних дій. Задачею програміста є визначити, наприклад, що натискання клавіші Ноmе повинно привести до установки курсору у верхній лівий кут екрана, або натискання клавіші End повинне установити курсор у кінець тексту на екрані. Можна легко запрограмувати функціональні клавіші для виконання всіляких дій.

Кожна клавіша має власний скен-код від 1 (Esc) до 83 (Del) чи від тичина 01 до тичина 53. За допомогою цих скен-кодів програма може визначити натискання будь-якої клавіші. Наприклад, запит на введення одного символу з клавіатури включає завантаження 00 у регістр AH і звертання до BIOS через INT 16H:

MOV AH,00 ;Функція введення з клавіатури

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

Дана операція має два типи відповідей у залежності від того, натиснута символьна чи функціональна клавіша. Для символу (наприклад, буква A) клавіатура посилає в комп'ютер два елементи інформації:

1. ASCII-код символу A (тичина 41) у регістрі AL;

2. Скен-код для клавіші A (тичина 1E) у регістрі AH.

Якщо натиснута функціональна клавіша (наприклад, Ins) клавіатура також передає два елементи:

1. Нуль у регістрі AL;

2. Скен-код для клавіші Ins (тичина.52) у регістрі AH.

Таким чином, після виконання команди INT 16H необхідно колись перевірити вміст регістра AL. Якщо AL містить нуль, то була натиснута функціональна клавіша, якщо не нуль, то отриманий код - символьної клавіші. Нижче приведений приклад такої перевірки:

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

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

CMP AL,00 ;Функціональна клавіша?

JZ exit ; так - вийти

Скен-Коди

Клавіатура має по дві клавіші для таких символів як *, + і -. Натискання "зірочки", наприклад, встановлює код символу тичина 2A у регістрі AL і один із двох скен-кодів у регістрі AH в залежності від того, яка з клавіш була натиснута: тичина 09 для зірочки над цифрою 8 чи тичина 29 для зірочки на клавіші PrtSc. Нижче приведена логіка перевірки скен-коду для зірочки:

Приведемо приклад програми для установки курсору в рядок 0 і cтовбця 0 при натисканні клавіші Ноmе (скен-код 47):

MOV AH,00 ; Виконати введення з клавіатури

INT 16H ;

CMP AL,00 ; Функціональна клавіша?

JNE EXIT1 ; немає -і вийти

CMP AH,47H ; Скен-код для клавіші Home?

JNE EXIT2 ; немає -і вийти

MOV AH,02 ;

MOV BH,00 ; Установити курсор

MOV DX,00 ; по координатах 0,0

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

Функціональні клавіші F1 - F10 генерують скен-коди від тичини 3B до тичини 44. Наступний приклад виконує перевірку на функціональну клавішу F10:

CMP AH,44H ; Клавіша F10?

JE EXIT1 ; Так

За адресою EXIT1 програма може виконати будь-яку необхідну дію. Повний список скен-кодів приводиться в посібнику з мови BASIC. Технічний опис IBM PC містить докладний опис усіх скен-кодів, а також опис використання клавіш Alt, Ctrl і Shift.

Лекція 9

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

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

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

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.