Assembler - язык неограниченных возможностей


              

Более сложные приемы программирования/h1> Блочные устройства
DOS выделяет пространство на диске
в поле буфера запроса со
и 18h позволяют DOS обращаться

Более сложные приемы программирования
Целочисленная арифметика повышенной точности

Часы реального времени и CMOS-память
то же или FFh, если
0Dh только для чтения: регистр
тип второго жесткого диска, если

Циклы

Деление
Деление
Динамик

Драйверы устройств в DOS
код драйвера устройства представляет собой

Джойстик
как все это можно реализовать
Генераторы случайных чисел
push ds push 0040h pop
ax pop edx pop si

Клавиатура
он должен сообщить контроллеру прерываний,
Клавиатура отвечает на все команды,

Команды DSP
По окончании каждого блока будет
в DSP, придется перепрограммировать канал
в звуковую плату int08h_handler proc
системного таймера на новую

Команды инициализации
на этот адрес процедура pic_init
Команды управления
Если бы контроллер был инициализирован
Конечные автоматы

Контроллер DMA
Младшие 16 бит адреса записывают
D4h для записи: регистр маски
asm так, чтобы она использовала
в DSP dsp_write proc near
сообщение об ошибке notopenmsg db

Контроллер прерываний
Локальные переменные

Мультиплексорное прерывание
что такого уровня спецификации совершенно
по первым шестнадцати байтам которой
адрес списка прерываний, состоящего из
Теперь можно написать резидентную программу,
адрес верхнего левого угла окна
Сюда передается управление, если программа
в буфере screen_buffer содержимое области
увеличить DI до начала push
ISP: минимальный hw_reset
сигнатура для резидентных программ amis_sign
сюда передается управление, если все

Обработчики прерываний
Хотя прямое изменение таблицы векторов
сравнить АХ со значениями upper_bound

Параллельный порт

Пассивная резидентная программа
initialize proc near cmp byte
Прежде чем это сделать, заметим,
initialize proc near cmp byte

Передача параметров
Передача параметров отложенным вычислением
Передача параметров по имени
Передача параметров по результату
Передача параметров по ссылке
Передача параметров по возвращаемому значению
Передача параметров по значению
Передача параметров в блоке параметров
Передача параметров в глобальных переменных
Передача параметров в потоке кода
Передача параметров в регистрах
Передача параметров в стеке
Перехват прерываний

Полурезидентные программы
загрузить программу без выполнения mov
запускаемый файл получает среду DOS
выполняет поиск строки от заданного

Последовательный порт
состояние BREAK или ошибка. Сбрасывается
должна быть 1, чтобы работали
следующие четыре директивы определяют, для
эта процедура вызывается при изменении
любое число со старшим битом

Повторная входимость
DOS самый важный обработчик прерываний
Пример вызова DOS из обработчика

Прерывания от внешних устройств
мышь на системах PS используется
как работает перехват прерывания от
в СХ push 0B800h pop

Процедуры и функции
Программирование на уровне портов ввода-вывода

Регистры графического контроллера (03CEh– 03CFH)
четные адреса соответствуют плоскостям 0,
Регистры контроллера атрибутов (03C0h– 03C1h)

Регистры контроллера CRT (03D4h– 03D5H)
Начало вертикального обратного хода луча
BIOS заполняет регистры этого контроллера
переместить начальный адрес на начало

Регистры синхронизатора (03C4h– 03C5h)
Установка нового режима выполняется почти
с настройками режимов x_modes dw
putpixel_x proc near pusha mov

Регистры VGA DAC (03C6h– 03C9h)
для команд строковой обработки mov

Резидентные программы

Символьные устройства
адрес первого байта из той
вызывается только раз при загрузке
к тому, что текст из
и категории устройства не поддерживается
сюда процедура стратегии будет писать
преобразование над буфером cld rot13_loop:

Сложение и вычитание
Сложение и вычитание

Сортировки
к следующему снизу элементу jmp
в качестве примера самый простой

Сравнение
Структуры CASE
Структуры IF.. THEN... ELSE

Таймер
6 равны 11, считается, что
для канала 0) 0011011h, то
для команды shld org 100h

Трансцендентные функции
в фигуре по горизонтали SCALE_V
display_picture proc near call move_point
процедура вывода точки на экран

Умножение
Умножение
Видеоадаптеры VGA
Вложенные процедуры
Вложенные процедуры с дисплеями
Вложенные процедуры со статическими ссылками
Внешние регистры контроллера VGA (03C2h – 03CFh)
Вычисления с фиксированной запятой

Вычисления с плавающей запятой
Это уравнение интересно тем, что
текстовый режим int 10h ret
сохранить регистры push bx xor

Выгрузка резидентной программы из памяти
Программа занимает первую свободную функцию
int08h_handler proc far jmp short
do_grab proc near push cs
do_io proc near push cs
адрес флагов занятости DOS io_needed
восстановить старые обработчики прерываний mov
initialize proc near jmp short
и если нас вызвали для
получить адреса флага занятости DOS
сегментный адрес окружения DOS int
В этом примере, достаточно сложном

Взаимодействие между процессами
Эта простота оборачивается сложностью написания
изменить направление движения случайным образом
выводит на экран нашу змейку
обе нити init_threads proc near
переменные для временного хранения save_si

Звуковые платы

Содержание