Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABA06_2012.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
442 Кб
Скачать
☆

Процедура вводу даних з клавіатури

Як видно з попереднього опису функцій вводу даних, єдине, що можна ввести з клавіатури це ASCII коди.

Тому якщо дані, які вводяться повинні в подальшому використовуватися для арифметичних обчислень, отримані в результаті вводу символи, слід перетворити у відповідні їм шістнадцяткові значення, а вже потім виконувати обчислення виразів з ними.

ASCII коди відрізняються від значень на певні константи: для цифр на 30h, для великих латинських літер – на 37h, для малих латинських літер – на 57h. Тому при вводі слід відняти ці значення від введених кодів, перевіривши що саме введено: цифра чи літера, а також проконтролювавши коректність вводу (наприклад чи не введена літера >F, або літера не латинського алфавіту, або символ що не є ні літерою ні цифрою).

Далі слід врахувати, що ввід здійснюється від старшої цифри до молодшої і кожен ASCII – код займає один байт, хоча в ньому міститься лише одна шістнадцяткова цифра. Тому треба «ущільнити» введені дані, починаючи з останнього введеного символу і розмістити в пам’яті за принципом молодша адреса – молодший байт.

В залежності від того яка функція вводу буде обрана, послідовність дій для перекодування буде різною.

При посимвольному вводу (функція 01 переривання 21h ) кожен введений ASCII – код одразу перевіряється на коректність, віднімається константа і записується у тимчасову область пам’яті як шістнадцяткове значення у форматі один байт – одна цифра. Далі, з тимчасової області зчитується по два байти, починаючи з наймолодшого (тобто з останнього введеного). Старший з байтів зсувається на чотири двійкові розряди вліво і результат додається до молодшого, таким чином відбувається «ущільнення», тобто утворення коректного шістнадцяткового значення, яке записується в пам’ять (блок схема алгоритму наведена далі).

При вводі рядка символів (функція 0Ah переривання 21h ) перевірка на коректність та віднімання константи відбуваються вже після закінчення вводу, а далі виконуються ті ж самі дії, що й при посимвольному вводі.

Для того, щоб визначити чи належить введений символ до шістнадцяткової системи числення, ASCII – код повинен лежати в таких межах: 30h ≤ {код}≤ 39h , або 41h ≤ {код} ≤ 46h , або 61h ≤ {код} ≤ 46h. В першому випадку символ є цифрою, в другому - великою латинською літерою від А до F, в третьому - малою латинською літерою від а до f. Різниця між ASCII – кодом і значенням становить відповідно, 30h, 37h(30h+7h), 57h(30h+7h+20h). Таким чином для перевірки символу на належність до шістнадцяткової системи числення треба:

  • від ASCII – коду відняти константу 30h;.

  • якщо отримане значення буде менше за нуль, то символ точно не є ні цифрою ні буквою (помилка при вводі);

  • якщо значення більше за нуль але менше за десять, то було введено цифру;

  • якщо значення більше за десять, то від нього треба відняти 07h;

  • якщо отриманий результат менший десяти, то введене значення не належить до шістнадцяткової системи числення;

  • якщо результат не менший від десяти(0Ah) і не більший від п’ятнадцяти (0Fh), то було введено введену велику латинську літеру в діапазоні від А до F;

  • якщо значення більше за десять, то від нього треба відняти 20h;

  • якщо отриманий результат менший десяти, то введене значення не належить до шістнадцяткової системи числення;

  • якщо результат не менший від десяти(0Ah) і не більший від п’ятнадцяти (0Fh), то було введено введену малу латинську літеру в діапазоні від А до F.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]