(4 Билет)
Директивы определения данных используются для выделения байт в сегменте. Вы можете также использовать их для заполнения этих байт начальными данными и определения переменных данных. Все директивы определения данных имеют некоторые общие средства. Во первых они могут генерировать инициализированные данные и резервировать место для неинициализированных данных. Для инициализированных данных определяется некоторое начальное значение. Неинициализированные данные определяются без задания начального значения (говорят, что их начальное значение является неопределенным). В директивах определения данных неинициализированные данные указываются с помощью символа?. Все прочее должно представлять значение инициализированных данных. Другим средством, которое применяется во всех директивах определения данных, является использование для указания повторения блока данных ключевого слова DUP. Турбо Ассемблер инициализирует "имя" таким образом, чтобы оно указывало на резервируемую директивой область. Тип данной переменной зависит от фактически используемой директивы.
2. Функции работы с клавиатурой. Сравнение функций 0Ah и 3Fh прерывания int 21h. (4 Билет)
Средства BIOS для работы с клавиатурой INT 16H: сервис клавиатуры.
Это - интерфейс прикладного уровня с клавиатурой. Нажатия клавиш на самом деле обрабатываются асинхронно на заднем плане. когда клавиша получена от клавиатуры, она обрабатывается прерыванием INT 09H и помещается в циклическую очередь.
AH сервис
--- ----------------------------------------------------
00H читать (ожидать) следующую нажатую клавишу
выход: AL = ASCII символ (если AL=0, AH содержит расширенный код ASCII)
AH = скэнкод или расширенный код ASCII
--- ----------------------------------------------------
01H проверить готовность символа (и показать его, если так)
выход: ZF = 1 если символ не готов. ZF = 0 если символ готов.
AX = как для подфункции 00H (но символ здесь не удаляется из очереди).
--- ----------------------------------------------------
02H читать состояние shift-клавиш. определить, какие shift-клавиши нажаты в данный момент, находится ли клавиатура в состоянии NumLock, и т.п. выход: AL = статус клавиатуры.
Средства MS-DOS для работы с клавиатурой
1. Буферизованный ввод с эхо-выводом
Функция 01h читает символы со стандартного устройства ввода/
Введенный символ выводится на стандартное устройство вывода. Если программа в качестве ASCII-кода получила 0, она должна вызвать эту функцию еще один раз.
2. Нефильтрованный ввод без эховывода
Функция 07h.
3. Ввод/вывод на консоль
Функция 06h может использоваться как для ввода с консоли, так и для вывода символов на консоль.
4. Ввод строки символов
Функция 0Ah предназначена для ввода с клавиатуры строки символов.
5. Проверка состояния стандартного ввода
Функция 0Bh проверяет состояние клавиатурного буфера.
6. Сброс буфера клавиатуры
Функция 0Ch очищает клавиатурный буфер, затем вызывает клавиатурную функцию MS-DOS, номер которой определяется содержимым регистра AL.
Функция 0Ah прерывания int 21h буферизованный ввод строки.
Символы считываются со стандартного ввода вплоть до CR (ASCII 0dH) или до достижения длины MAX-1. если достигнут MAX-1, включается консольный звонок для каждого очередного символа, пока не будет введен возврат каретки CR (нажатие Enter).
Второй байт буфера заполняется действительной длиной введенной строки, не считая завершающего CR. последний символ в буфере - всегда CR (который не засчитан в байте длины). символы в буфере (включая LEN) в момент вызова используются как "шаблон". В процессе ввода действительны обычные клавиши редактирования.
Функция 3Fh прерывания int 21h читать файл через описатель.
Вход: AH = 3fH; BX = описатель файла;
DS:DX = адрес буфера для чтения данных;
CX = число считываемых байт
Выход: AX = код ошибки.
CX байт данных считываются из файла или устройства с описателем, указанным в BX. данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.