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


              

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

Первый вопрос, который задает себе
что программы на ассемблере трудно
Эта книга рассчитана на читателей

Что потребуется для работы с ассемблером

Биты, байты и слова
В компьютерах, использующих процессоры Intel,

Числа со знаком

Что потребуется для работы с ассемблером
и другие компиляторы, например бесплатно

Двоичная система счисления
Коды символов
Логические операции
Организация памяти
Представление данных в компьютерах
Шестнадцатеричная система счисления

Процессоры Intel в реальном режиме

Адресация по базе с индексированием
Адресация по базе с индексированием и масштабированием
Адресация по базе со сдвигом

Арифметические операции ММХ
Команды выполняют вычитание отдельных элементов
Умножает каждое из четырех слов

Базовая арифметика FPU
бесконечность соответствующего знака. Если оба
когда источником является 32- или
в разном определении значения частного.

Числа с плавающей запятой
Десятичная арифметика
а не 1Fh, как было
в АХ после выполнения команды

Другие команды
Результат работы CPUID зависит от
Процессор поддерживает физические адреса больше
CPUID на процессорах семейства Р6
номер модификации) или 061Хh для

Двоичная арифметика
Эта команда во всем аналогична
Выполняет целочисленное деление со знаком
операцию дополнения до двух. Эта

Исключения FPU

Команды передачи управления
Это набор команд, каждая из
Выполняет ближний переход на указанную
и передает управление по адресу,
Возврат управления из обработчика прерывания
Команда ENTER создает стековый кадр

Команды пересылки данных FPU
Если операнд не указан, обменивается

Команды пересылки данных ММХ

Команды преобразования типов ММХ
Команды распаковывают младшие элементы источника

Команды сравнения FPU
Эти команды сравнивают содержимое регистра

Команды сравнения ММХ

Команды управления FPU
в отличие от FNSTCW, проверяет
команды сохраняются первые два байта
Команда FXSAVE сохраняет все текущее

Команды управления состоянием ММХ
Константы FPU
Косвенная адресация
Косвенная адресация с масштабированием

Логические операции
Оба этих примера могут выполняться

Логические операции ММХ
Непосредственная адресация

Операции над битами и байтами
После выполнения команд BTS, BTR

Основные непривилегированные команды

Пересылка данных
к сравнению чисел без знака,
битном регистре, следует использовать команду
в следующем порядке: АХ, СХ,
в двойное слово, младшая половина
и расширяет нулями, то есть

Прямая адресация
Процессоры Intel в реальном режиме

Расширение AMD 3D
сравнение упакованных вещественных чисел: если

Расширение IА ММХ
Регистр флагов
Регистровая адресация

Регистры FPU
С3 употребляются так же, как
Биты PC определяют точность результатов

Регистры ММХ
Регистры общего назначения
Регистры процессора

Сдвиговые операции
В процессорах 8086 непосредственно можно

Сдвиговые операции ММХ
Сегментные регистры
Способы адресации
Стек

Строковые операции
в зависимости от разрядности адреса)
в зависимости от разрядности адреса)
При использовании формы записи INS

Типы данных FPU
то есть бит 63 равен

Типы данных ММХ

Трансцендентные операции FPU
FPATAN может выполняться над любыми

Управление флагами
в 0. После выполнения этой
Загрузка сегментных регистров

Директивы и операторы ассемблера

Глава 3. Директивы и операторы ассемблера
Структура программы
Структура программы - 2
Псевдокоманды определения переменных
Структуры
Сегменты
Сегменты - 2

Модели памяти и упрощенные директивы определения сегментов
Модели памяти и упрощенные директивы определения сегментов - 2
Порядок загрузки сегментов
Процедуры
Конец программы
Директивы задания набора допустимых команд
Директивы управления программным счетчиком
Глобальные объявления
Условное ассемблирование
Условное ассемблирование - 2

Выражения
Выражения - 2
Макроопределения
Блоки повторений
Макрооператоры
Другие директивы, используемые в макроопределениях
Управление файлами
Управление листингом
Комментарии

Основы программирования для MS-DOS

Чтение и запись в файл
Сброс файловых буферов DOS на

Интерфейс EMS
в реальном адресном пространстве приведет

Интерфейс XMS
Структура данных, адрес которой передается
адрес строки для output_info call
в ASCII mov byte ptr

Командные параметры и переменные среды
в переменную argc записывается число
адрес нашей области DTA int

Область памяти HMA
Область памяти UMB
Обычная память
Основы программирования для MS-DOS
Параллельный порт

Поиск файлов
После того как DTA заполнена
в одном из двух форматов,
смещение имени файла int 21h

Последовательный порт
без FOSSIL: регистр сдвига передатчика
Чтение символа из последовательного порта

Прямая работа с видеопамятью
собственно вывод на экран mov

Программа типа ЕХЕ

Программа типа СОМ
COM размером 23 байта. Если

Работа с файлами

Работа с мышью
В большинстве случаев эта функция
Функция 0Ch используется так часто,
длина проекции прямой на ось
Процедура вывода точки на экран

Работа с SVGA-режимами
Стандартные графические режимы SVGA могут
битным цветом каждому пикселю на
бит 14 соответствует использованию LFB,
видеопамять не очищается при установке
С помощью этой функции можно
Процедура вывода точки на экран
если наклон положительный js slop_negative

Работа с VGA-режимами
заполнение массива ячеек псевдослучайными значениями
восстановить текстовый режим int 10h
сегментный адрес видеопамяти pop es

Системный таймер
в формате BCD, то есть
Программа может считывать значение этого
и больше не меняется) int
к длине питона mov byte

Создание и открытие файлов
в режиме совместимости, если не
Если функции открытия файлов возвращают

Средства BIOS

Средства BIOS
Если бит 15 регистра ВХ
в буфере клавиатуры, хотя некоторые
по умолчанию) или фон мигает
Оба этих байта постоянно располагаются
Функция 13h выводит на экран

Средства DOS
Средства DOS
Все функции DOS вывода на
вывод на экран строки message2
с помощью этой функции введенный
Функции посимвольного ввода без эха
стрелка вниз cmp byte ptr
поворот на 90 градусов вправо

Управление файловой системой
строка без имени диска, первого

Загрузка и выполнение программ
устанавливаемый функцией В711h прерывания 2Fh
сегментный адрес окружения, которое будет
и 01 требуется, чтобы было
освободить всю память после конца
подсказка для ввода drive_letter db

Закрытие и удаление файла

Более сложные приемы программирования/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

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

Программирование в защищенном режиме

Адресация в защищенном режиме
в этой структуре, которые нам
при загрузке селектора этого
db 0FFh, 0FFh, 0h, 0h,

Функции DPMI управления дескрипторами
селектор на один из первых

Интерфейс DPMI

Интерфейс VCPI
Перед передачей управления командой call
серверу новое отображение аппаратных прерываний
Обработчики прерываний

Передача управления между режимами в DPMI
Вызываемая процедура должна заканчиваться командой

Переключение в защищенный режим

Пример программы
в CS при помощи команды
значения селекторов selectors: Sel_flatDS dw

Программирование в защищенном режиме
Расширители DOS

Способы объединения программы с расширителем
obj form os2 le op

Управление памятью в DPMI

Нам потребуются еще две функции
Вывод на экран через линейный кадровый буфер
получить один новый дескриптор mov
псевдослучайная полоска внизу экрана, которая

Программирование для Windows 95 и Windows NT

Диалоги
В качестве простого примера использования
ECX будет хранить идентификатор диалога,

Динамические библиотеки
таблица для перевода символа из
Как видно из примера, нам

Драйверы устройств
которая включает файл, содержащий определения
чтобы эта процедура была вызвана

Программирование для Windows 95 и Windows NT

Консольные приложения
выведем строку greet_message на экран
идентификатор stdout или другого консольного
NTRESOURCE struc dwScope dd

Меню
сообщения от нашего меню ZZZ_OPEN
сообщение для MessageBox jmp short

Окна
и выход по WM_QUIT mov
h IDI_APPLICATION equ 32512 WM_DESTROY

Окно типа MessageBox

Первая программа
Прежде чем мы сможем скомпилировать
Кроме этого, все функции, работающие

Полноценное приложение
все эти определения можно заменить
получить нашу командную строку mov
если нужно, спрашивает, сохранить ли
обработчик IDM_ABOUT h_idm_about: push ebx
обработчик IDM_EXIT h_idm_exit: call save_contents
с учетом push ebp) ap_hDlg
h RECT struc left dd
Кроме того, нам потребуется новый

Ассемблер и языки высокого уровня

Ассемблер и языки высокого уровня
Передача параметров

Конвенция Pascal
Конвенция С
Смешанные конвенции
Искажение имен
Встроенный ассемблер
Встроенный ассемблер в Pascal
Встроенный ассемблер в С

Оптимизация

Оптимизация
Высокоуровневая оптимизация
Оптимизация на среднем уровне

Вычисление констант вне цикла
Перенос проверки условия в конец цикла
Выполнение цикла задом наперед
Разворачивание циклов
Общие принципы низкоуровневой оптимизации
Основные рекомендации
Команда LEA
Выравнивание
AGI
Обращение к частичному регистру

Префиксы
Выполнение команд
Кэш-память
Очередь предвыборки
Конвейер FPU
Конвейер ММХ
Особенности архитектуры процессоров PentiumPro и Pentium II
Выполнение команд
Выполнение команд - 2
Кэш-память

Очередь предвыборки
Предсказание переходов

Процессоры Intel в защищенном режиме

Дескрипторы
Дальние CALL или JMP на

Машинно-специфичные регистры
Механизм защиты
Модель памяти в защищенном режиме

Нереальный режим
в этот режим можно воспользоваться,

Обработка прерываний и исключений
386р RM_seg segment para public
битный сегмент PM_seg segment para
в вечный цикл jmp short
битной части stack_seg segment para
в том виде, как они
если одновременно произошли два исключения,
Это исключение вызывается при попытке
основное исключение для создания виртуальной

Отладочные регистры
биты 8, 6, 4, 2,

Переключение задач
подготовить сегментные регистры
таблица глобальных дескрипторов GDT label
вывести символ на экран

Если происходит прерывание или исключение

Пример программы
может быть, это Windows 95
SEL_flatCS equ 00001000b SEL_flatDS equ

Процессоры Intel в защищенном режиме
Проверка лимитов
Проверка привилегий
Проверка типа сегмента
Регистры
Регистры управления памятью

Регистры управления процессором
и программы не должны изменять

в которой флаг VM регистра
Сегмент состояния задачи
Селектор
Системные флаги

Системные и привилегированные команды
Этот селектор указывает на дескриптор
Копирует младшие четыре бита источника
Копирует байты, отвечающие за права
Эти команды объявляют все содержимое
в данной модели MSR приводит
в регистр CS число из

Страничная адресация
и таблиц страниц имеют общий
Для расширенных страниц формат элемента
Кроме того, система может периодически
что мы не под Windows
загрузить сегментные регистры, включая стек

Управление задачами
Вход и выход из защищенного режима
о том, что процессор, обращаясь
В режиме V86 текущий уровень
Выполнение привилегированных команд
Защита на уровне страниц

Программирование на ассемблере в среде UNIX

Программирование на ассемблере в среде UNIX

Синтаксис AT&T
Основные правила
Запись команд
Адресация
Операторы ассемблера
Префиксные, или унарные операторы
Инфиксные, или бинарные операторы
Директивы ассемблера
Директивы определения данных
Директивы управления символами

Директивы определения секций
Директивы управления разрядностью
Директивы управления программным указателем
Директивы управления листингом
Директивы управления ассемблированием
Блоки повторения
Макроопределения
Программирование с использованием libc
Программирование с использованием libc - 2
Программирование без использования libc

Программирование без использования libc - 2

Символы ASCII

последовательность блоков процессора, которая задействуется
превращение циклов, выполняющихся известное число
Кодировки второй половины ASCII
Коды символов расширенного ASCII
Команды процессоров Intel 8088– Pentium II

Общая информация о скоростях выполнения
Для команд условных переходов приводятся

Общий формат команды процессора Intel
Префиксы
В этом приложении приведены скорости
Символы ASCII
Скан-коды клавиатуры

Список используемых сокращений
один из интерфейсов для жестких
запрос на прерывание
один из интерфейсов для жестких

Управляющие символы ASCII
Значения полей кода команды
Значения поля ModRM
Значения поля SIB


История денег - перейти
История финансовых потрясений - перейти
История реформ - перейти

Покупательная способность денег - перейти
Способности денег - перейти
История менеджмента - перейти
История экономики - перейти
История мировой экономики - перейти
Службы Интернета - перейти
Основные концепции Active Directory - перейти
Домены и развертывание Active Directory - перейти
Администрирование доменов - перейти
Использование групповых политик - перейти

Средства безопасности Windows Server 2003 - перейти
Восстановление системы - перейти