
- •Оглавление
- •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.Биты, сдвиг логический, арифметический и циклический
Int 1ah ;получаем значение счетчика
ADD DX,91 ;добавляем 5 сек. к младшему слову
MOV BX,DX ;запоминаем требуемое значение в BX
;---постоянная проверка значения счетчика времени суток BIOS
REPEAT: INT 1AH ;получаем значение счетчика
CMP DX,BX ;сравниваем с искомым
JNE REPEAT ;если неравен, то повторяем снова
;иначе, задержка окончена
AT имеет добавочную функцию прерывания 15H, которая позволяет
осуществить задержку на указанное время. Поместите 86H в AH, а
число микросекунд задержки в CX:DX. После этого выполните преры-
вание.
3.Генерация тона по второму каналу таймера.
Как мы уже говорили, канал 2 микросхемы 8254 связан с громкоговорителем компьютера. Однако громкоговоритель не просто соединен с выходом OUT канала 2. Порт вывода 61h также используется для управления громкоговорителем. Младший бит порта 61h подключен ко входу GATE канала 2 таймера. Этот бит при установке в 1 разрешает работу канала, то есть генерацию импульсов для громкоговорителя.
Дополнительно для управления громкоговорителем используется бит 1 порта 61h. Если этот бит установлен, импульсы от канала 2 таймера смогут проходить на громкоговоритель.
Таким образом, для включения звука надо выполнить следующие действия:
· запрограммировать канал 2 таймера на нужную частоту (загрузить регистр счетчика канала нужным значением);
· для включения звука установить два младших бита порта 61h.
Так как остальные 6 битов порта 61h используются для других целей, установка младших битов должна выполняться таким образом, чтобы значения остальных битов не были изменены. Для этого вначале надо считать байт из порта 61h в рабочую ячейку памяти, установить там нужные биты, затем вывести новое значение байта в порт 61h.
Для выключения звука надо сбросить два младших бита порта 61h, при этом нельзя изменять значение остальных битов этого порта.
Одноголосая мелодия состоит из нот, разделенных или не разделенных паузами. При проигрывании мелодии необходимо для каждой ноты программировать соответствующим образом канал 2 таймера и включать громкоговоритель (с помощью порта 61h) на определенное время, равное длительности ноты. Затем программа должна выключить динамик и выдержать паузу перед проигрыванием следующей ноты, если такая пауза требуется.
4.Клавиатура. Типы клавиш и управление ими.
КЛАВИАТУРА
[ Оглавление ]
Клавиатура - это одно из основных звеньев взаимодействия человека и компьютера. В этой главе мы подробно рассмотрим работу клавиатуры Персонального компьютера фирмы "ИБМ" и методы управления этой работой. Клавиатура IBM/PC имеет ряд интересных особенностей, которые мы сейчас изучим.
10.1. Основные принципы функционирования клавиатуры
На мой взгляд, один из наиболее впечатляющих моментов конструкции IBM/PC - это способ работы с клавиатурой. Выбранный подход в равной мере прост и элегантен и программистам необходимо знать две вещи, связанные с вводом
информации от клавиатуры, следующие из этого конструктивного подхода.
На электронном уровне клавиатура IBM/PC представляет собой небольшой самостоятельный компьютер. Внутри блока клавиатуры размещается микропроцессор 8048 фирмы "Интел", который выполняет задачу слежения за нажатиями клавиш и передачи их состояния. Микропроцессор 8048 выполняет различные функции, включая самодиагностику (после включения питания компьютера), проверку нажатия клавиш и противодребезговую защиту (что не позволяет воспринимать одну нажатую клавишу как две).
Микропроцессор 8048 позволяет также буферизовать до 20 нажатий клавиш, если центральный процессор не может их принять сразу. Обычно этот буфер совершенно пуст, поскольку ситуации, когда центральный процессор не успевает отреагировать на запрос клавиатуры.
Вы, вероятно, слышали предупреждающий звуковой сигнал, когда нажатие Вами клавиш опережало возможности программы по их вводу. Это не связано с заполнением буфера клавиатуры. Процедура ввода с клавиатуры системы BIOS в ПЗУ имеет собственный буфер и звуковой сигнал раздается в случае заполнения этого буфера. Буфер клавиатуры может содержать 20 символов, а буфер системы BIOS - только 15. По мере изучения клавиатуры мы рассмотрим как код нажатой клавиши попадает сначала в буфер клавиатуры, затем в буфер BIOS и, наконец, в программу.
Блок клавиатуры не связывает с клавишами никаких конкретных значений. Вместо этого, блок клавиатуры идентифицирует по ее номеру или коду сканирования. Все клавиши имеют коды сканирования от 1 до 83. На рис. 10.1. показаны коды, соответствующие всем клавишам.
При нажатии клавиши блок клавиатуры передает ее код сканирования центральному процессору. Когда клавиша отпускается, клавиатура снова передает ее код, но увеличенный на 128 (или шестнадцатиричное значение 80). Таким образом, имеются различные коды для нажатия и освобождения клавиш.
Для работы с клавиатурой используются порты и прерывания. Когда выполняется какое-либо действие с клавишей (нажатие или освобождение), процессор клавиатуры обнаруживает
его и запоминает в своем буфере. Затем, процессор клавиатуры формирует прерывание с номером 9. В ответ на прерывание служебная процедура системы BIOS в ПЗУ считывает код сканирования клавиши из порта клавиатуры (порт номер 96) и затем пересылает в порт клавиатуры команду очистить буфер процессора клавиатуры. Если системный блок не реагирует на прерывания клавиатуры, то коды сканирования накапливаются в буфере процессора клавиатуры, хотя при нормальной работе этого не должно происходить. Специальный код сканирования 255, шестнадцатиричное значение FF, используется блоком клавиатуры, для сообщения, что его буфер заполнен.
Поскольку информация о нажатии клавиши поступает в системный блок от клавиатуры через порт, любая программа, имеющая доступ к порту, может непосредственно общаться с клавиатурой. На практике, однако, это неприменимо, так как блок клавиатуры вырабатывает еще и прерывания, которы обрабатываются системой BIOS в ПЗУ. Однако, просто из любопытства, можно написать небольшую программу на Бейсике, читающую порт клавиатуры и сообщающую, что она там находит. Ниже приведен фрагмент этой программы.
Поскольку эта программа состязается с системой BIOS за получение информации от клавиатуры, ее работа несколько хаотична. Но если запустить эту программу и нажимать на клавиши, она все же зарегистрирует несколько кодов сканирования.