
- •Оглавление
- •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.Биты, сдвиг логический, арифметический и циклический
8 К любому из кодов основного цвета, получим яркое изображение.
Прибавив 16 к любому из кодов 0-15, получим мигающие символы.
Таким образом 7+8+16=31 дает яркое мигающее белое изображение.
Для фонового цвета допустимы только значения от 0 до 7.
Если Вы используете прямое отображение в память [4.3.1], то
оператор COLOR не влияет на вывод. Вместо этого Вы должны выбрать
требуемую установку атрибутов из таблиц и прямо присвоить значе-
ние соответствующего байта атрибутов оператором POKE. Помните,
что байты атрибутов всегда занимают нечетные позиции в видеобуфе-
ре. Отображение в память позволяет Вам иметь 16 фоновых цветов в
Бейсике (при условии, что Вам не нужны мигающие символы). Для
графического адаптора введите OUT &H3D8,8, чтобы старший бит
каждого атрибута действовал как бит яркости для фоновых цветов. В
следующем примере в центре экрана печатается яркокрасный "!" на
светлокрасном фоне.
100 DEF SEG = &HB800 'указываем на буфер цветного дисплея
110 OUT &H3D8,8 'используем 16 фоновых цветов
120 POKE 1000,33 'печатаем ! в центре экрана
130 POKE 1001,196 'красный на светлокрасном (11000100)
Как уже говорилось выше PCjr хранит бит мигания в массиве ворот
дисплея. Вот та же программа для PCjr (но она не будет работать в
режиме двухцветной графики):
100 DEF SEG = &HB800 'указываем на видеобуфер
110 X = INP(&H3AH) 'читаем из массива ворот дисплея
120 OUT &H3AH,3 'требуем доступ к регистру 3
130 OUT &H3AH,0 'сбрасываем все биты этого регистра
140 POKE 1000,33 'печатаем ! в центре экрана
150 POKE 1001,196 'красный на светлокрасном (11000100)
Приведем еще пример изменения назначения цвета регистра палетты.
Код цвета, который обычно выводится синим (0001) сделаем, чтобы
он выводил цвет магента (0101). Номер регистра массива ворот
дисплея, соответствующий коду цвета 1 равен 11H.
100 X = INP (&H3AH) 'читаем из массива ворот дисплея
110 OUT &H3AH,&H11 'требуем доступ к регистру 11H
120 OUT &H3AH,5 'помещаем туда код магенты (0101 = 5)
Средний уровень.
Прерывания DOS и BIOS предоставляют очень бедные возможности
для работы с цветным текстом. Только функция 9 прерывания 10H
принимает байт атрибутов при выводе символа. Функция A прерывания
10H выводит символ без указания цвета или атрибута; она просто
помещает символ в видеобуфер, не трогая байт атрибута, таким
образом атрибуты сохраняют свое старое значение. Функция D преры-
вания 10H также оставляет нетронутым байт атрибутов. Все эти
функции обсуждаются в [4.3.1].
Функции вывода на экран DOS прерывания 21H всегда выводят
белое на черном. Даже если для всего экрана установлен некоторый
фоновый цвет, то функции DOS устанавливают атрибут в нормальный
черный при выводе каждого символа. Однако имеется способ преодо-
леть это ограничение. MS DOS предоставляет драйвер устройства
ANSI.SYS, который может интерпретировать специальные Esc-последо-
вательности. В приложении Д объясняются основы его использования.
Esc-последовательности выводятся через функцию 9 прерывания 21H,
которые обычно выводят строку символов на экран. В этом случае
строка состоит из символа Esc, за которым следует [, а далее одно
или более кодовых чисел из нижеприведенного списка. Строка должна
кончаться символом m и обычным ограничителем $. Вот кодовые номе-
ра:
0 все атрибуты выключены (черный на белом)
1 включена повышенная интенсивность
4 включено подчеркивание
5 включено мигание
7 включено негативное изображение
8 все включено (при этом символы невидимы)
30 черный основной цвет 40 черный фон
31 красный основной цвет 41 красный фон
32 зеленый основной цвет 42 зеленый фон
33 желтый основной цвет 43 желтый фон
34 синий основной цвет 44 синий фон
35 основной цвет магента 45 фон магента
36 основной цвет циан 46 фон циан
37 белый основной цвет 40 белый фон
Отметим, что когда функции MS DOS выводят символы в графическом
режиме, то они обычно используют код 3 текущей палетты. С помощью
Esc-последовательностей можно установить цвет символа соответст-
вующим любому из цветов палетты. Надо указывать 30 или 31 для
фонового цвета, 32 или 33 - для кода 1, 34 или 35 - для кода 2 и
36 или 37 - для кода 3. В этом случае не надо указывать фоновый
цвет.
В следующем примере на экран выводятся две строки с помощью
функции 9 прерывания 21H. Первая выводится синим на красном, а
вторая - мигающим цианом на красном. Не надо переопределять крас-
ный в качестве фонового цвета для второй строки, поскольку назна-
чения цветов действуют на все последующие команды вывода (включая
функции BIOS прерывания 10H), до тех пор, пока не будут сделаны
другие назначения. Отметим, как просто перемешивать команды уп-
равления цветом с выводом самих строк.
;---в сегменте данных
STRING_1 DB 'The rain in Spain',0AH,0DH,'$'
STRING_2 DB 'Falls mainly on the plain$'
BLUE_RED DB 27,'[34;41m$'
BLINK_CYAN DB 27,'[5;36m$'
;---вывод строк
MOV AH,9 ;функция вывода строки
LEA DX,BLUE_RED ;адрес управляющей строки в DX
INT 21H ;все будет выдаваться синим на красном
LEA DX,STRING_1 ;указываем на первую строку
INT 21H ;печатаем строку
LEA DX,BLINK_CYAN ;адрес второй управляющей строки
INT 21H ;меняем цвет на мигающий циан
LEA DX,STRING_2 ;указываем на вторую строку
INT 21H ;печатаем строку
Вы всегда должны позаботиться о том, чтобы сбросить атрибуты
цвета в нормальное состояние перед завершением программы, пос-
кольку в противном случае они будут действовать и на вывод после-
дующих программ. В конце следует вывести Esc-последовательность,
использующую код номер 0, как указано выше.
PCjr и EGA имеют специальную функцию BIOS для установки содер-
жимого регистров палетты. Это подфункция 0 функции 10H прерывания