Как стать программистом Как устроен компьютер. Что такое программа. Как написать свою программу. И многое другое узнаете вы из этой книги. Получить бесплатно! |
Ожидание нажатия клавиши
Лучшие книги по Ассемблеру
Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее... |
При общении с пользователем программа часто ожидает от него каких-то действий, чтобы продолжить выполнение или завершиться. Обычно это ввод каких-то данных. Однако бывает и так, что программа, например, выводит какое-то сообщение и приостанавливается, потому что ей важно, чтобы пользователь это сообщение прочитал.
В таких случаях обычно на экран выводится что-то типа “Нажмите любую клавишу для продолжения”, а программа приостанавливает работу и ждёт нажатия клавиши.
В ассемблере это можно сделать как с помощью функций 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
, которое выполняет функцию, номер которой записан в АН. То есть в нашем случае мы ждём нажатия клавиши - ввода с клавиатуры без эха.
Код очень простой, поэтому давать какие-то ещё пояснения не вижу смысла.
Так что на этом всё. Подключайтесь к группе Основы программирования в Телеграм, или к другим каналам (ссылки ниже), чтобы ничего не пропустить.
Подписаться на канал в РУТуб
Вступить в группу "Основы программирования" Подписаться на рассылки по программированию |