
- •Оглавление
- •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.Биты, сдвиг логический, арифметический и циклический
130 Poke(&h17,newbyte) 'посылаем новое значение статуса
Чтобы, наоборот, включить этот бит:
120 NEWBYTE=STATUSBYTE OR 32 'устанавливаем бит 5
130 Poke(&h17,newbyte) 'посылаем новое значение статуса
Строки 110-130 могут быть уплотнены к виду:
110 POKE(&H417,PEEK(&H417)AND 223)
или
110 POKE(&H417,PEEK(&H417)OR 223)
Средний уровень.
Функция 2 прерывания 16H предоставляет доступ к одному - но
только одному - из байтов статуса. Это байт по адресу 0040:0017,
который содержит больше полезной информации. Байт возвращается в
AL.
;---проверка статуса клавиши вставки
MOV AH,2 ;номер функции
Int 16h ;получаем байт статуса
TEST AL,10000000B ;проверяем бит 7
JZ INSERT_OFF ;если 0, то INSERT выключен
Низкий уровень.
В данном примере устанавливается режим вставки, за счет уста-
новки бита 7 байта статуса по адресу 0040:0017 (который адресует-
ся как 0000:0417).
SUB AX,AX ;устанавливаем добавочный сегмент на
MOV ES,AX ;начало памяти
MOV AL,10000000B ;готовим бит 7 к установке
OR ES:[417H],AL ;меняем байт статуса
7.Установка атрибутов/цветов символов. Вывод символов на экран.
7.1.Установка атрибутов/цветов символов.
Когда дисплей установлен в текстовый режим в любой из видео
систем, то каждой позиции символа на экране отводится два байта
памяти. Первый байт содержит номер кода ASCII кода символа, а
второй - атрибуты символа. Цветной адаптор и PCjr могут выводить
в цвете, как сам символ, так и всю область, отведенную данному
символу (фоновый цвет). Монохромный адаптор ограничен только
черным и белым цветом, но он может генерировать подчеркнутые
символы, чего не могут делать цветной адаптор и PCjr. Все три
системы могут выдавать мигающие символы и негативное изображение.
Все три системы могут также создавать символы с высокой интенсив-
ностью, хотя для цветного адаптора и PCjr повышенная интенсив-
ность символа на самом деле приводит к другому цвету (восемь
основных цветов имеют версии с повышенной интенсивностью, что
дает набор 16 цветов). EGA умеет делать все, что могут все ос-
тальные системы и многое другое. В частности, на улучшенном дисп-
лее он может выводить подчеркнутые цветные символы, поскольку
матрица изображения символов 8*14 дает такую возможность.
Атрибуты цвета:
Для указания цветов экрана одни и те же номера кодов исполь-
зуются в Бейсике и прерываниями операционной системы. Они такие:
0 - черный 8 - серый
1 - синий 9 - голубой
2 - зеленый 10 - светлозеленый
3 - циан 11 - светлый циан
4 - красный 12 - светлокрасный
5 - магента 13 - светлая магента
6 - коричневый 14 - желтый
7 - белый 15 - яркобелый
Младшие четыре бита байта атрибутов устанавливают цвет самого
символа (бит 3 включает высокую интенсивность). Следующие три
бита устанавливают фон символа. И при обычных обстоятельствах
старший бит включает и выключает мигание. Таким образом:
когда бит 0 = 1, синий включается в основной цвет
1 = 1, зеленый включается в основной цвет
2 = 1, красный включается в основной цвет
3 = 1, символ выводится с высокой интенсивностью
4 = 1, синий включается в фоновый цвет
5 = 1, зеленый включается в фоновый цвет
6 = 1, красный включается в фоновый цвет
7 = 1, символы мигают
Биты 0-2 и 4-6 содержат одни и те же компоненты цветов для
самих символов и фона. Эти трехбитные группы позволяют 8 возмож-
ных комбинаций. Когда включается бит высокой интенсивности, то
добавляются еще 8 цветов. Шестнадцать возможных цветов получаются
из этих установок битов следующим образом:
Красный Зеленый Синий Низкая интенсивность Высокая
0 0 0 черный серый
0 0 1 синий светлосиний
0 1 0 зеленый светлозеленый
0 1 1 циан светлый циан
1 0 0 красный светлокрасный
1 0 1 магента светлая магента
1 1 0 коричневый желтый
1 1 1 белый яркобелый
Можно иметь 16 цветов и для фонового цвета. В этом случае бит 7
должен служить указателем высокой интенсивности для фона, а не
указателем мигания символов. Для цветного адаптора надо изменить
бит 5 порта с адресом 3D8H в 0, как показано ниже. Поскольку этот
порт доступен только для записи, то все остальные биты должны
быть переустановлены. Эта возможность доступна только в двух
случаях: текстовых режимов с 40 и с 80 символами в строке. Для
режима с 80 символами надо послать в порт число 9, а для режима с