
- •В.Ф. Гузик, с.М. Гушанский, в.А. Каляев, а.О. Пьявченко, а.И. Костюк основы программирования на языке «ассемблер»
- •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 10h, функция 0ah. Запись символа в позицию курсора.
Записывает ASCII код символа в текущую позицию курсора. Символ принимает атрибут, установленный ранее для этой позиции. Курсор при выводе не смещается, а остается в исходной позиции. Коэффициент повторения позволяет выводить строки одинаковых символов (но курсор не смещается!). Если коэффициент повторения равен 0, на экран ничего не выводится.
При вызове: ah = 0ah
bh = № видеостраницы
al = ASCII код символа
cx = коэффициент повторения.
Int 10h, функция 0eh. Запись символа в режиме телетайпа.
Записывает ASCII код символа в текущую позицию курсора на активной видеостранице. Курсор после вывода автоматически смещается к следующей позиции. Коды ASCII: 07 – звонок, 08 – шаг назад, 0ah – перевод строки, 0dh – возврат каретки, рассматриваются как управляющие и выполняют соответствующие действия. Действует автоматический перевод курсора на следующую строку и скроллинг экрана. Атрибут символа задать нельзя, действует атрибут, установленный ранее для этой позиции.
При вызове: ah = 0eh
al –ASCII код символа
Int 10h, функция 10h, подфункция 03h. Переключение бита «мерцание/яркость».
Определяет назначение старшего (7-го) бита атрибута символа: мерцание символа или яркость фона.
При вызове: ax = 1003h
bl = назначение старшего бита атрибута:
0 – яркость фона
1 – мерцание символа
Int 10h, функция 13h. Запись строки в режиме телетайпа.
Записывает строку символов в заданную видеостраницу, начиная с указанной позиции. Коды ASCII: 07 – звонок, 08 – шаг назад, 09 – табуляция, 0ah – перевод строки, 0dh – возврат каретки, рассматриваются как управляющие и выполняют соответствующие действия.
При вызове: ah = 13h
al = режим записи:
0 – атрибут в bl, строка содержит только коды символов, курсор после вывода не смещается;
1 - атрибут в bl, строка содержит только коды символов, курсор после вывода смещается;
2 - строка содержит попеременно коды символов и атрибутов, курсор после вывода не смещается;
3 - строка содержит попеременно коды символов и атрибутов, курсор после вывода смещается;
bh = № видеостраницы
bl = атрибуты ( если в al 0 или 1)
cx = число выводимых символов (атрибуты не учитываются)
dh = номер строки на экране
dl = номер столбца на экране
es:bp = адрес строки в памяти.
Int 15h, функция 86h. Программная задержка на заданное число микросекунд.
Выполняет задержку на число микросекунд, заданное в регистрах cx (старшая часть) и dx (младшая часть).
При вызове: ah = 86h
cx,dx = микросекунды
Int 16h, функция 00h (10h). Чтение символа с клавиатуры.
Читает из кольцевого буфера клавиатуры ASCII и СКЭН коды нажатой клавиши. Если буфер пуст, ждет нажатия клавиши. Функция 10h предназначена для расширенной клавиатуры (101 клавиша), функция 0h – для 84 клавишной.
При вызове: ah = 00h (или 10h)
При возврате: ah = СКЭН код
al = ASCII код.
Int 16h, функция 01h (11h). Чтение символа с клавиатуры.
Определяет, есть ли в буфере клавиатуры ожидающие ввода символы. Если есть, читает из кольцевого буфера клавиатуры ASCII и СКЭН коды нажатой клавиши, однако при этом из буфера эти коды не удаляются и будут снова получены при обращении к буферу. Если буфер пуст, управление передается следующей команде программы. Функция 11h предназначена для расширенной клавиатуры (101 клавиша), функция 1h – для 84 клавишной.
При вызове: ah = 01h (или 11h)
При возврате: Если символ ожидает:
zf = 0
ah = СКЭН код
al = ASCII код.
Если буфер пуст:
zf = 1