47621 (Мова програмування Assembler), страница 13

2016-07-30СтудИзба

Описание файла

Документ из архива "Мова програмування Assembler", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47621"

Текст 13 страницы из документа "47621"

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

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

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. Функції переривання 21h

Переривання 21H є перериванням, через яке відбувається звертання до основним функціям DOS. Це переривання забезпечує доступ до системи введення-висновку, керованої DOS. На рис.5.4 представлені всі можливі функції, що використовують це переривання. Вибір функції в програмі здійснюється за допомогою запису в регістр AH потрібного значення перед виконанням переривання 21H.

ФУНКЦІЇ ПЕРЕРИВАННЯ DOS INT 21H

Нижче приведені базові функції для переривання DOS INT 21H. Код функції встановлюється в регістрі AH:

00 Завершення програми (аналогічно INT 20H).

01 Уведення символу з клавіатури з луною на екран.

02 Виведення символу на екран.

03 Уведення символу з асинх. комунікаційного каналу.

04 Виведення символу на асинх. комунікаційний канал.

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

ВИВЕДЕННЯ НА ЕКРАН: БАЗОВА ВЕРСІЯ DOS

Виведення на екран у базовій версії DOS вимагає визначення текстового повідомлення в області даних, установки в регістрі AH значення 09 (виклик функції DOS) і вказівки команди DOS INT 21H. В процесі виконання операції кінець повідомлення визначається по oбмежнику ($), як це показано нижче:

NAMPRMP DB 'Ім'я покупця?','$

MOV AH,09 ;Запит висновку на екран

LEA DX,NAMPRMP ;Завантаження адреси сообщ.

INT 21H ;Виклик DOS

Знак обмежувача "$" можна кодувати безпосередньо після cимвольного рядка (як показано в прикладі), усередині рядка:

Ім'я покупця?$', чи в наступному операторі DB '$'.

Використовуючи дану операцію, не можна вивести на екран символ долара "$". Крім того, якщо знак долара буде відсутній у кінці рядка, то на екран будуть виводитися всі наступні символи, поки знак "$" не зустрінеться в пам'яті.

Команда LEA завантажує адресу області NAMPRMP у регістр DX для передачі в DOS адреси виведеної інформації. Адреса NAMPRMP, що завантажується в DX по команді LEA, є oтносительным, тому для обчислення абсолютної адреси даних DOS складає значення регістрів DS і DX (DS:DX).

ПРОГРАМА: ВИВЕДЕННЯ НА ЕКРАН НАБОРУ СИМВОЛІВ КОДУ ASCII

Більшість з 256 кодів ASCII мають символьне позначення, і можуть бути виведені на екран. Коди 00 і FF не мають символів і виводяться на екран у виді пробілів, хоча символ пробілу має в ASCII шіст. код 20.

На рис. 8.1 показана COM-програма, що виводить на екран повний набір символів коду ASCII. Програма викликає три процедури; B10CLR, C10SET і D10DISP. Процедура B10CLR очищає екран, а процедура C10SET встановлює курсор у положення 00,00. Процедура D10DISP виводить вміст CTR, що на початку иніціалізується значенням 00 і потім збільшується на 1 при кожному висновку на екран, поки не досягне шіст. значення FF.

Оскільки символ долара не виводиться на екран і крім того коди від 08 до 0D є спеціальними керуючими cимволами, тому це приводить до переміщення курсору й іншим керуючим впливам. Завдання: уведіть програму, виконайте асемблювання, компоновку і перетворення в COM-файл. Для запуску програми введіть її ім'я, наприклад, У:ASCII.COM. Перший виведений рядок починається з пробільного символу (тичина.00), двох "усміхнених облич" (тичина. 01 і 02) і трьох карткових символів (тичина.03, 04 і 05). Код 07 видає звуковиття сигнал. Код 06 повинний відобразитися картковим символом "піки", але керуючі символи від тичина 08 до 0D зітруть його. Код 0D є "поверненням каретки" і приводить до переходу на новий (наступний) рядок. Код тичина 0E - представляється у виді музичної ноти. Символи після тичини 7F є графічними. Можна змінити програму для обходу керуючих символів. Нижче приведений приклад фрагмента програми, що дозволяє обійти усі символи між тичинами 08 і 0D. Ви можете поекспериментувати, oбходячи тільки, скажімо, тичину 08 (повернення на символ) і 0D (повернення каретки):

CMP CTR,08H ; Менше ніж 08?

JB D30 ; так - прийняти

CMP CTR,0DH ; Менше/дорівнює 0D?

JBE D40 ; так - обійти

D30:

MOV AH,40H ; Виведення символів < 08

INT 21H ; і > 0D

D40:

INC CTR

УВЕДЕННЯ ДАНИХ ІЗ КЛАВІАТУРИ: БАЗОВА ВЕРСІЯ DOS

Процедура введення даних із клавіатури простіше, ніж виведення на екран. Для введення, що використовує базову DOS, область уведення вимагає наявності cписка параметрів, що містить поля, що необхідні при виконанні команди INT. По-перше, повинна бути визначена максимальна довжина тексту, що вводиться. Це необхідно для попередження користувача звуковим сигна брухт, якщо набраний занадто довгий текст; символи, що перевищують максимальну довжину не приймаються. По-друге, у списку параметрів повинне бути визначене поле, куди команда повертає дійсну довжину введеного тексту в байтах. Нижче приведений приклад, у якому визначений список параметрів для області введення. LABEL являє собою директиву з атрибутом BYTE. Перший байт містить максимальну довжину даних, що вводяться. Оскільки це однобайтове поле, то можливо його максимальне значення - тичина FF чи 255. Другий байт необхідний DOS для занесення в нього дійсного числа введених символів. Третім байтом починається поле, що буде містити введені символи.

NAMEPAR LABEL BYTE ;Список параметрів:

MAXLEN DB 20 ; Максимальна довжина

ACTLEN DB ? ; Реальна довжина

NAMEFLD DB 20 DUP (' ') ; Уведені символи

Оскільки в списку параметрів директива LABEL не займає місця, то NAMEPAR і MAXLEN вказують на той самий aдрес пам'яті. У трансляторі MASM для визначення списку параметрів у виді структури може використовуватися також директива STRUC. Однак, у зв'язку з тим, що посилання на імена, визначені всередині, вимагають спеціальної адресації, утримаємося cейчас від розгляду даної теми до глави 24 "Директиви асемблера". Для запиту на введення необхідно помістити в регістр AH номер функції - 10 (тичина. 0AH), завантажити адреса списку параметрів (NAMEPAR у нашому прикладі) у регістр DX і виконати INT 21H:

MOV AH,0AH ;Запит функції введення

LEA DX,NAMEPAR ;Завантажити адреси списку параметрів

INT 21H ;Викликати DOS

Команда INT очікує поки користувач не введе з клавіатури текст, перевіряючи при цьому, щоб число введених cимволів не перевищувало максимального значення, зазначеного в списку параметрів (20 у нашому прикладі). Для вказівки кінця введення користувач натискає клавішу Return. Код цієї клавіші (тичина. 0D) також заноситься в поле введення (NAMEFLD у нашому прикладі). Якщо, наприклад, користувач ввів ім'я BROWN (Return), то cписок параметрів буде містити інформацію:

дес.: :20:5: В: R: O: W: N: #: : : : : ...

шіст.: :14:05:42:52:4F:57:4E:0D:20:20:20:20: ...

В другий байт списку параметрів (ACTLEN у нашому прикладі) команда заносить довжину введеного імені - 05. Код Return знаходиться за адресою NAMEFLD +5. Символ # використаний тут для індикації кінця даних, тому що 0D не має відображуваного символу. Оскільки максимальна довжина в 20 символів включає тичина.0D, то дійсна довжина що вводиться текстом може бути тільки 19 символів.

ПРОГРАМА: ВВЕДЕННЯ І ВИВЕДЕННЯ ІМЕН

EXE-програма, приведена на рис. 8.2, запитує введення імені, потім відображає в середині екрана введене ім'я і включає звуковий сигнал. Програма продовжує запитувати і відображати імена, поки користувач не натисне Return у відповідь на черговий запит. Розглянемо ситуацію, коли користувач ввів ім'я TED SMITH:

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:

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее