MS-DOS має цілу групу
функцій переривання 21h для виконання вводу інформації з
клавіатури. Послідовність дій системи при вводі з клавіатури така. Функція MS-DOS викликає драйвер клавіатури (див. 2.1),
передаючи йому запит на ввід одного символу із буферу клавіатури. Драйвер, виконуючи запит, звертається до потрібної функції
переривання 16h BIOS. ISR BIOS переривання 16h читає із буферу клавіатури потрібне
слово і передає в драйвер. Драйвер повертає
байт (зазвичай молодший) в MS-DOS. Таким чином, функції MS-DOS
і функції бібліотеки Turbo C, що на них спираються слабо залежать
від особливостей апаратури, оскільки система від неї ізольована двома слоями програмного забезпечення – драйверами і
BIOSом.
Далі приводиться характеристика функцій MS-DOS, що використовуються для вводу з клавіатури.
AH=01h- ввід з
затримкою від стандартного пристрою вводу (клавіатури). Виконується “ехо” на екран символів, що вводяться. Якщо проходить
натиснення комбінації клавіш Ctrl-Braek, викликається переривання 23h. ASCII- код прочитаного символупоміщається в AL. Якщо натискається спеціальна клавіша,
в
AH=07h – ввід – вивід з консолі. Якщо DF=FFh, виконується ввід із стандартного пристрою вводу без затримки.
Якщо буфер пустий, функція оповіщає про це
встановленим в 1 флагом нуля (ZF). В противному випадку в регістрі AL повертається ASCII- код
прочитаного символу. Не виконує перевірку нативнення комбінації клавіш Ctrl-Break.
AH=07h – ввід з консолі з затримкою без “еха” на єкран. ASCII- код прочитаного символу повертаєтьс в AL. Якщо натиснена спеціальна клавіша, значеня,що передаєьтся в
AH=08h – подібна AH=07h, за виключенням того, якщо виявляється
натиснення клавіш Ctrl-Break, викликається переривання 23h.
AH-0Ah – буферизований ввід
строки з консолі. DS:DX вказують на початок буферу ддля прийому строки. Буфер має структуру приведену на рис. 7.2.
ASCII- коди символів із стандартного
вводу поміщаються в буфер до отримання символу
повернення каретки CR (ASCII- код 0Dh) або або до досягнення умови len=max-1. В цьому випадку при кожному
новому вводі символу звучить сигнал динаміка і символ поміщається в буфер. Так продовжується до тих пір, поки не буде ввдений символ CR, після чого функція повертається в
точку виклику. Таким чином, останнім символом завжди буде символ CR. MS-DOS використовує другий байт буферу як
лічильник числа введених символів. Символи, вже поміщені в буфер,
використовуються як „шаблон” (template), і дйють клавіші редактування MS-DOS. Якщо натсискається клавіша ESC, на екран „дублюється” символ ‘\’ і ввод стрки починається з початку; натискання
клавіші F5 „дублюється” символом ‘@’, а поточна строка запам’ятовується як поточний шаблон; натиснення клавіші F3 „дублює” на екран залишену частину
шаблону. Всі остальні спеціальні клавіші ігноруються. Якщо
відбувається натиснення клавіш Ctrl-Break, викликається переривання 23h.
AH=0Bh – перевірка стану стандартного вводу. Повертає в регістрі AL значення FFh, якщо буфер клавіатури не пустий, і 0 в
противному випадку. Якщо відбувається натиснення клавіш Ctrl-Break, викликається переривання 23h. Функцію слід використовувати перед
виконанням функціїй AH=01, 07h і 08h для того, щоб уникнути затримки вводу, якщо він відсутній. Крім того
функція використовується як засіб
перевірки того, чи натиснута комбінація клавіш Ctrl-Break, якщо програма довгий час виконує роботу, не зв’язану зі зверненням до функцій
MS-DOS. Періодичне виконання
функції дозволяє аварійно завершувати програму,
наприклад, у випадку її зациклювання.
AH=0Ch – ввід
з клавіатури з очисткою буферу. Значення в буфері AL вміщує номер функції, що
виконується: 01, 06, 07, 08 або 0Ah. Поведінка функції і значення, що повертаються, описані раніше в
специфікації функцій AH=01, 06, 07, 08 або 0Ah.
Крім перелічених функцій MS-DOS, ввід з клавіатури
виконує і функція MS-DOS префіксного читання читання файлу або притрою AH=3Fh, якщо в регістрі BX заданий префікс 0,
закріплений за стандартним вводом (див. 2.1).
Переглянуті функцій MS-DOS для вводу з клавіатури
можуть викликатися напряму із Сі- програми через функції Turbo C geninterrupt(), int86(), intr() і т.д., або неявно
функціями вводу Turbo C.
![]() |
![]() |
![]() |