Главная / Ассемблер / Примеры (исходники) /

Ожидание нажатия клавиши


Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее...

При общении с пользователем программа часто ожидает от него каких-то действий, чтобы продолжить выполнение или завершиться. Обычно это ввод каких-то данных. Однако бывает и так, что программа, например, выводит какое-то сообщение и приостанавливается, потому что ей важно, чтобы пользователь это сообщение прочитал.

В таких случаях обычно на экран выводится что-то типа “Нажмите любую клавишу для продолжения”, а программа приостанавливает работу и ждёт нажатия клавиши.

В ассемблере это можно сделать как с помощью функций DOS, так и с помощью функций BIOS. Функции BIOS обычно более продвинуты, но они также не всегда поддерживаются эмуляторами, такими как emu8086, и чтобы проверить их работу нужна настоящая или виртуальная DOS-машина. Поэтому я приведу пример с использованием функции DOS.

Итак, в DOS есть две функции, которые могут читать ввод с клавиатуры - это 01h и 07h. Отличаются они тем, что первая читает клавишу с эхом, а вторая - без эха.

Что значит “с эхом”? А это значит, что функция читает нажатую клавишу, и выводит символ этой клавиши на экран (это относится только к клавишам, которые печатают какие-либо символы).

“Без эха” - в этом случае происходит только чтение клавиши без какого-либо вывода на экран.

Ну а теперь пример:

.model tiny
.code
ORG 100h

start:
  MOV  AH,  09h             ;Функция 09h - вывод строки
  MOV  DX,  offset Msg      ;Адрес строки записываем в DX
  INT  21h                  ;Выводим строку

  MOV  AH,  07h             ;Функция 07h - ввод с клавиатуры
  INT  21h                  ;Ждём нажатия клавиши

  RET                       ;Завершение СОМ-файла

Msg DB 'Press any key...$'  ;Строка для вывода

END	start

Здесь сначала мы выводим на экран сообщение “Нажмите любую клавишу…”. Ранее я рассказывал, как можно вывести строку.

А затем записываем в регистр АН номер функции 07h и вызываем прерывание 21h, которое выполняет функцию, номер которой записан в АН. То есть в нашем случае мы ждём нажатия клавиши - ввода с клавиатуры без эха.

Код очень простой, поэтому давать какие-то ещё пояснения не вижу смысла.

Так что на этом всё. Подключайтесь к группе Основы программирования в Телеграм, или к другим каналам (ссылки ниже), чтобы ничего не пропустить.



Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su