- •В.Ф. Гузик, с.М. Гушанский, в.А. Каляев, а.О. Пьявченко, а.И. Костюк основы программирования на языке «ассемблер»
- •1. Введение для кого написано это учебное пособие.
- •2. Предварительные сведения или азы, которые необходимо знать!
- •2.1. Ассемблер, что это такое?
- •2.2. Как писать ассемблерную программу, и какие программы нужны для ее последующей трансляции.
- •2.3. Системы счисления
- •2.4. Оперативная память.
- •2.5. Стек
- •Сегментация памяти.
- •Программная модель процессора.
- •Система команд.
- •Inc word ptr [bx]
- •2.9 Выделение памяти под переменные и массивы
- •2.10 Exe и com программы
- •2.11 Трансляция ассемблерной программы
- •Passes: 1
- •Примеры программирования на ассемблере.
- •3.1. Наша первая программа.
- •3.2. Работа с клавиатурой и экраном.
- •Прерывания dos для работы с клавиатурой.
- •Функция 7 прерывания int 21h
- •Функция 6 прерывания int 21h.
- •Функция 0ah прерывания int 21h.
- •Прерывания bios для работы с клавиатурой
- •1. Функция 0 прерывания int 16h Входные параметры: нет
- •2. Функция 1 прерывание int 16h Входные параметры: нет
- •1. Функция 2 прерывания int 21h
- •2. Функция 9 прерывание int 21h
- •Функция 1 прерывание int 10h
- •Функция 2 прерывание int 10h
- •Функция 3 прерывание int 10h
- •Функция 6 прерывание int 10h
- •Функция 9 прерывание int 10h
- •Функция 0eh прерывания int 10h
- •Работа с гибкими дисками.
- •Inc nomber
- •3.4. Перехват прерываний и создание резидентных программ
- •Inst: mov ah, 9
- •Inst: mov ah,9
- •3.5. Работа со звуком.
- •Отладка программ.
- •Приложение
- •Сервисные прерывания dos.
- •Сервисные прерывания bios.
- •Int 10h, функция 07h. Инициализация или прокрутка окна вниз.
- •Int 10h, функция 08h. Чтение символа и атрибута в позиции курсора.
- •Int 10h, функция 09h. Запись символа и атрибута в позицию курсора.
- •Int 10h, функция 0ah. Запись символа в позицию курсора.
- •Int 10h, функция 0eh. Запись символа в режиме телетайпа.
- •Int 10h, функция 10h, подфункция 03h. Переключение бита «мерцание/яркость».
- •Int 10h, функция 13h. Запись строки в режиме телетайпа.
- •Int 15h, функция 86h. Программная задержка на заданное число микросекунд.
- •Int 16h, функция 00h (10h). Чтение символа с клавиатуры.
- •Int 16h, функция 01h (11h). Чтение символа с клавиатуры.
- •Int 16h, функция 02h (12h). Получение статуса клавиатуры.
- •Int 1ah, функция 0h. Число тиков таймера.
- •Коэффициенты пересчета для нот
- •Значение цветов в байте атрибута
- •Буфер клавиатуры.
- •Литература
- •7. Содержание
Int 16h, функция 02h (12h). Получение статуса клавиатуры.
Для функции 02h возвращает байт флагов, описывающий состояние управляющих клавиш клавиатуры. Для функции 12h возвращает слово флагов, при этом младший байт этого слова совпадает с байтом, возвращаемым функцией 02h.
При вызове: ah = 02h (или 12h)
При возврате: Функция 02h:
al = флаги
Функция 12h:
ax = флаги
Биты флагов имеют следующие значения:
бит 0 =1 – нажат правый SHIFT
бит 1 = 1 – нажат левый SHIFT
бит 2 = 1 – нажат CTRL
бит 3 = 1 – нажат ALT
бит 4 = 1 – включен режим SCROLL LOCK
бит 5 = 1 – включен режим NUM LOCK
бит 6 = 1 – включен режим CAPS LOCK
бит 7 = 1 – включен режим INSERT
(последующие флаги возвращает только функция 12h)
бит 8 = 1 - нажат левый CTRL
бит 9 = 1 – нажат левый ALT
бит 10 =1 – нажат правый CTRL
бит 11 = 1 – нажат правый ALT
бит 12 = 1 – нажат SCROLL LOCK
бит 13 = 1 – нажат NUM LOCK
бит 14 = 1 – нажат CAPS LOCK
бит 15 = 1 – нажат SYSREG.
Int 1ah, функция 0h. Число тиков таймера.
Возвращает число тиков таймера с момента последнего сброса системы. Таймер тикает через каждые 55 миллисекунд, то есть примерно 18 раз в секунду (1092 раза в минуту).
При вызове: ah = 00h
При возврате: cx,dx = число тиков (в сх – старшая часть)
al = 0, если системные часы не переходили через сутки.
Конечно, вышеперечисленные функции далеко не исчерпывают весь сервис, предоставляемый DOS и BIOS. Однако, для выполнения лабораторных работ приведенных выше функций вполне (даже с избытком) достаточно.
Коэффициенты пересчета для нот
Коэффициенты пересчета округлены до ближайшего целого.
МАЛАЯ ОКТАВА |
|||||||||||
до |
до# |
ре |
ре# |
ми |
фа |
фа# |
соль |
соль# |
ля |
ля# |
си |
7790 |
7353 |
6940 |
6551 |
6183 |
5836 |
5508 |
5199 |
4907 |
4632 |
4372 |
4127 |
ПЕРВАЯ ОКТАВА |
|||||||||||
до |
до# |
ре |
ре# |
ми |
фа |
фа# |
соль |
соль# |
ля |
ля# |
си |
3895 |
3676 |
3470 |
3275 |
3091 |
2918 |
2754 |
2599 |
2454 |
2316 |
2284 |
2063 |
ВТОРАЯ ОКТАВА |
|||||||||||
до |
до# |
ре |
ре# |
ми |
фа |
фа# |
соль |
соль# |
ля |
ля# |
си |
1947 |
1838 |
1735 |
1638 |
1546 |
1459 |
1377 |
1300 |
1227 |
1158 |
1093 |
1032 |
ТРЕТЬЯ ОКТАВА |
|||||||||||
до |
до# |
ре |
ре# |
ми |
фа |
фа# |
соль |
соль# |
ля |
ля# |
си |
974 |
919 |
867 |
819 |
773 |
729 |
689 |
650 |
613 |
579 |
546 |
516 |
Как правило, хорошо звучат ноты третьей октавы.