Мова програмування Assembler
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
ті від друкуючого пристрою представлені нижче:
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 містить докладний опис усіх скен-кодів, а також опис використання