- •Оглавление
- •1.Таймер. Установка и чтение таймера.
- •2.Установка/чтение времени и даты. Установка/чтение часов реального времени. Задержка программных операций.
- •5:10 Вы должны вырезать строку символов, соответствующую часам,
- •12, А затем представить результат опять в виде строки:
- •Int 21h ;устанавливаем время
- •Int 21h ;получаем время
- •2.1.4 Установка/чтение часов реального времени.
- •Ibm pc имеют часы реального времени, но, к сожалению, нет стан-
- •6 Устанавливает флаг переноса.
- •2.1.5 Задержка программных операций.
- •100 Sound 32767,91 'останавливает программу на 5 секунд
- •1Ah возвращает два младших байта в dx (большинство задержек укла-
- •Int 1ah ;получаем значение счетчика
- •3.Генерация тона по второму каналу таймера.
- •4.Клавиатура. Типы клавиш и управление ими.
- •10.1. Основные принципы функционирования клавиатуры
- •100 Rem Программа на Бейсике, пытающаяся считывать
- •150 Print "Код сканирования клавиатуры"; xmod128;'сооб-
- •10.2. Определение смысла нажатых клавиш
- •10.3.Символьные клавиши
- •256. Например, если ввести Alt-1000, то будет сгенерирован
- •Ibm/pc указывают, что нулевой код генерируется нажатием
- •10.4. Процедура обслуживания клавиатуры в системе bios
- •5000 Rem Подпрограмма ожидания завершения работы
- •5035 Return 'Нажата клавиша Ins
- •9999 Rem Конец программы 10-1
- •5.Буфер клавиатуры. Очистка буфера клавиатуры. Проверка символов в буфере.
- •Раздел 1. Управление клавиатурой.
- •3.1.1 Очистка буфера клавиатуры.
- •110 Poke &h1c, peek(&h1a) 'выравниваем указатели
- •Int 21h ;чистим буфер, ждем ввода
- •3.1.2 Проверка символов в буфере.
- •0040:001C. (Нельзя просто проверить символ, находящийся в голове
- •Int 21h ;вызываем прерывание 21h
- •Int 16h ;проверка наличия символа
- •3.1.3 Ожидать ввод символа и не выводить его на экран.
- •If...Then проверяет получившееся число на соответствующие Alt-a,
- •0, То получен расширенный код. Повторите прерывание и в al поя-
- •Int 21h ;ожидаем ввод символа
- •Int 16h ;получаем введенный код
- •6.Прием символов с клавиатуры. Проверка/установка статуса клавиш-переключателей.
- •3.1.5 Прием символа без ожидания.
- •120 ... 'Иначе нет символа в буфере
- •Int 21h ;получение символа
- •3.1.6 Получение строки символов.
- •Input может выдавать на экран строку, запрашивающую пользователя
- •120 Input "Enter your age: ",age% 'принимает возраст как число
- •254 Символов, выдавая эхо на терминал. Эта процедура продолжает
- •Int 21h ;получаем строку
- •130 Poke(&h17,newbyte) 'посылаем новое значение статуса
- •130 Poke(&h17,newbyte) 'посылаем новое значение статуса
- •Int 16h ;получаем байт статуса
- •7.Установка атрибутов/цветов символов. Вывод символов на экран.
- •7.1.Установка атрибутов/цветов символов.
- •40 Символами - число 8. Чтобы вернуть мигание надо добавить к
- •3C0h 10h, чтобы указать соответствующий регистр. Наконец, надо
- •1 Они белые. Процедуры вывода символов bios (прерывание 10h),
- •8 К любому из кодов основного цвета, получим яркое изображение.
- •10H. Надо поместить номер регистра палетты (от 0 до 15) в bl, а
- •Inc bx ;увеличиваем указатель на атрибуты
- •7.2.Вывод символов на экран.
- •4.3.1 Вывод на экран одного символа.
- •6 Вывод символа без атрибутов
- •9 Вывод строки символов
- •Int 10h ;вывод строки
- •Inc bx ;переходим к следующему символу
- •Int 21h ;выполняем прерывание
- •Int 21h ;и выводим его на экран
- •Inc di ;увеличиваем указатель на 2
- •Inc bx ;переходим к обработке следу-
- •Inc bx ;увеличиваем указатель строки
- •Inc di ;увеличиваем указатель буфера
- •4.3.2 Вывод строки символов на экран.
- •Int 21h ;печатаем строку с позиции курсора
- •Int 21h ;печатаем строку с начала новой строки
- •8.Управление распределением диска Чтение таблицы размещения файлов fat.
- •40 Дорожек и в системе ms dos 2.0 каждая дорожка разбита на 9
- •360K. Все типы дисков используют размер сектора 512 байт в ms
- •Ibmdos.Com, которые считываются при старте и обеспечивают компью-
- •5.1.1 Чтение таблицы размещения файлов.
- •3 Занимают вторую тройку байт таблицы.
- •10M, которые имеют больше, чем 4086 кластеров. На рис. 5-1 пока-
- •100 '''Чтение секторов fat
- •190 Read q: poke n,q 'переносим их в память
- •270 '''Определяем номер следующего кластера файла
- •380 '''Проверяем кластер на четность
- •Int 25h ;читаем сектора
- •9.Прерывания. Bios прерывания. Dos прерывания. Hаписание собственного прерывания
- •9.1.Написание собственного прерывания.
- •Int 21h ;меняем прерывание
- •Int 21h ;теперь сегмент в es, смещение в bx
- •Int 21h ;восстанавливаем вектор
- •10.Общая структура программы на языке assembler. Различия между exe- и com-файлами
- •10.1.Различия между exe- и com-файлами
- •11.Регистры, флаги, распределение памяти.
- •12.Директивы процессора. Метки. Данные.
- •12.1.Метка
- •1. Неявная адресация
- •2. Непосредственная адресация
- •3. Абсолютная прямая адресация
- •4. Относительная прямая адресация
- •13.Адресация. Группа команд пересылки данных
- •14.Арифметические операции - add, sub, mul, div.
- •Xor (не или) устанавливает бит результата в 1, если бит источника отличается от бита приемника.
- •15.Биты, сдвиг логический, арифметический и циклический
6 Вывод символа без атрибутов
9 Вывод строки символов
Функции 9 и A прерывания 10H вообще не интерпретируют управ-
ляющие символы. Функции DOS интерпретируют управляющие коды,
приведенные в следующей таблице. Функция E прерывания 10H интерп-
ретирует все коды таблицы, кроме ASCII 9.
ASCII 7 звонок
ASCII 8 возврат на шаг (BackSpace)
ASCII 9 табуляция
ASCII 10 перевод строки
ASCII 13 возврат каретки
Первые две функции прерывания 10H не передвигают курсор после
вывода символа. Функция 9 этого прерывания выводит на экран с
указанием атрибутов, а функция A - без указания, при этом сохра-
няется текущее значение байта атрибутов для этого символа. AL
должен содержать выводимый символ, а BL - атрибуты. Номер страни-
цы дисплея содержится в BH. Он должен указываться даже для монох-
ромного дисплея, который имеет только одну страницу памяти дисп-
лея. В этом случае должна быть установлена первая страница, кото-
рой соответствует номер 0. Особое свойство этих двух функций BIOS
состоит в том, что символ выводится такое число раз, какое указа-
но в CX. Обычно указывают CX равным 1, но эти функции могут легко
выводить целые строки символов, если указать большее значение
счетчика - полезное свойство при создании рамок. Отметим, что
даже если выводится много символов, то позиция курсора не изме-
няется. Когда строка выводимых символов займет все свободное
пространство экрана справа-вниз от курсора, то вывод будет пере-
несен в первые позиции экрана.
;---вывод символа в негативе
MOV AH,9 ;функция записи с атрибутами
MOV AL,THE_CHARACTER ;символ в AL
MOV BL,112 ;атрибуты в BL
MOV BH,0 ;страница 1
MOV CX,1 ;вывести один раз
INT 10H
Вместо того, чтобы постоянно восстанавливать значение счетчика в
CX прерывание BIOS предоставляет также телетайпную процедуру,
которая больше подходит для вывода строки символов. Она выпол-
няется функцией E. Она готовится так же, как и функция A, но не
надо засылать значение в CX. Строка выводится просто за счет
изменения символа в AL и повторного вызова прерывания. При ис-
пользовании в графическом режиме в BL устанавливается цвет палет-
ты, в противном случае сохраняется старый атрибут.
;---вывод строки с помощью телетайпной процедуры
MOV AH,0EH ;номер функции
MOV BH,0 ;номер страницы
LEA BX,STRING ;BX указывает на строку
NEXT_CHAR: MOV AL,[BX] ;берем символ в AL
CMP AL,'$' ;проверка на конец строки
JE ALL_DONE ;если да, то выход
Int 10h ;вывод строки
Inc bx ;переходим к следующему символу
JMP SHORT NEXT_CHAR ;повторяем процедуру
ALL_DONE:
Прерывание DOS 21H как правило предоставляет более полезные
процедуры, поскольку они перемещают курсор и приводят к сдвигу
экрана при достижении нижней строки, а также интерпретируют неко-
торые из обычных управляющих кодов. Функции DOS выводят на стра-
ницу, которая должна быть установлена функцией 5 прерывания 10H
[4.5.3]. Предоставляются две функции для вывода символа, с номе-
рами 2 и 6. Первая из них распознает Ctrl-Break [3.2.8], а вторая
- нет. (Когда с клавиатуры вводится Ctrl-Break, то процедура
обработки Ctrl-Break не выполняется до тех пор, пока не исполь-
зуется функция, которая распознает его наличие).
Обе функции выводят белые символы на черном фоне, до тех пор,
пока не сделана специальная установка цвета с помощью драйвера
устройства ANSI.SYS [4.1.3]. В общем необходимо только поместить
символ в DL, номер функции в AH и вызвать прерывание 21H. Однако
функция 6 особенная в том смысле, что она имеет второе назначение
в качестве функции ввода с клавиатуры. Она выступает в этой роли
только если в DL помещен код FF [3.1.5]. Во всех остальных слу-
чаях она выводит на экран содержимое DL. В следующем примере
функция 6 поочередно принимает и печатает символ (в [3.1.4] об-
суждается процедура, которая комбинирует оба этих свойства).
MOV AH,6 ;номер функции
NEXT: MOV DL,0FFH ;при этом значении принимаем ввод
