
- •Оглавление
- •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.Метка
- •13.Адресация. Группа команд пересылки данных
- •1. Неявная адресация
- •2. Непосредственная адресация
- •3. Абсолютная прямая адресация
- •4. Относительная прямая адресация
- •14.Арифметические операции - add, sub, mul, div.
- •Xor (не или) устанавливает бит результата в 1, если бит источника отличается от бита приемника.
- •15.Биты, сдвиг логический, арифметический и циклический
6 Устанавливает флаг переноса.
2.1.5 Задержка программных операций.
Если Вы осуществляете задержку в программе посредством пустого
цикла, то Вам может потребоваться много времени для того, чтобы
добиться нужного времени задержки. Даже если Вы определите тре-
буемую длительность, то нельзя быть уверенным, что Ваша программа
будет давать нужное время задержки при всех условиях. Длитель-
ность цикла может меняться в зависимости от используемого компи-
лятора (или, для Бейсика, от того, компилируется программа или
нет). А в наше время, когда имеется большой набор машин совмести-
мых с IBM PC - имеющих широкий диапазон скорости процессора -
даже цикл на языке ассемблера может приводить к различным време-
нам задержки. Поэтому разумно определять время программной за-
держки непосредственно по часам. Частота отсчета 18.2 раза в
секунду, используемая для модификации счетчика времени суток,
должна вполне удовлетворять большинство потребностей (как увели-
чить частоту отсчетов см. [2.1.1]).
Чтобы обеспечить задержку данной продолжительности, программа
должна подсчитать требуемое число импульсов счетчика времени
суток. Это значение добавляется к считанному текущему значению
счетчика. Затем программа постоянно считывает значение счетчика и
сравнивает его с запомненным. Когда достигается равенство, то
требуемая задержка прошла и можно продолжать выполнение програм-
мы. Четыре байта, в которых хранится значение счетчика времени
суток хранятся, начиная с адреса 0040:006C (как обычно, начиная с
младшего байта). Для задержек меньших 14 секунд можно пользовать-
ся только младшим байтом. Два младших байта позволяют задержки до
одного часа (точнее, на пол-секунды меньше, чем час).
Высокий уровень.
В Бейсике можно использовать оператор SOUND [2.2.2] со значе-
нием частоты, равным 32767. В этом случае звук не будет генериро-
ваться вообще. Это отсутствие звука будет длиться столько отсче-
тов времени суток, сколько Вы укажете. Для 5-секундной задержки
нужен 91 отсчет (5 * 18.2). Поэтому
100 Sound 32767,91 'останавливает программу на 5 секунд
Для прямого чтения счетчика времени суток нужно:
100 DEF SEG = 0 'установка сегмента на начало памяти
110 LOWBYTE = PEEK(&H46C) 'получение младшего байта
120 NEXTBYTE = PEEK(&H46D) 'получение следующего байта
130 LOWCOUNT = NEXTBYTE*256 + LOWBYTE 'значение двух байтов
Средний уровень.
Прочитайте значение счетчика времени суток BIOS, используя
функцию 0 прерывания 1AH и добавьте к нему необходимое число
импульсов по 1/18 секунды. После этого считывайте текущие значе-
ния счетчика времени суток, постоянно сравнивая с требуемой вели-
чиной. При достижении равенства надо кончать задержку. Прерывание
1Ah возвращает два младших байта в dx (большинство задержек укла-
дываются в этих пределах), поэтому два старших байта, возвращае-
мые в CX, могут игнорироваться, что позволит Вам избежать
32-байтных операций. В данном примере установлена задержка на 5
секунд, что соответствует 91 отсчету.
;---получение значения счетчика и установка задержки
MOV AH,0 ;номер функции для "чтения"