Ассемблер для Windows


         

Ассемблер для Windows

Прежде всего, как и полагается в предисловии, отвечу на возможное замечание: зачем нужен ассемблер в Windows, если есть, например, Си и другие языки. Зачем нужен ассемблер, я уже писал в упомянутой выше книге. Позволю себе процитировать ее: "Зачем нужен язык ассемблера? - спросят меня. Самой простой и убедительный ответ на поставленный вопрос такой - затем, что это язык процессора и, следовательно, он будет нужен до тех пор, пока будут существовать процессоры. Более пространный ответ на данный вопрос содержал бы в себе рассуждение о том, что ассемблер может понадобиться для оптимизации кода программ, написания драйверов, трансляторов, программирования некоторых внешних устройств и т.д. Для себя я, однако, имею и другой ответ: программирование на ассемблере дает ощущение власти над компьютером, а жажда власти - один из сильнейших инстинктов человека".

Введение
Хорошее знание ассемблера помогает легко разбираться в коде программ. Взломщики чужих программ всегда хорошо владеют ассемблером. Вопросы анализа кода программ не часто рассматривают в компьютерной литературе. Знание этого не только не помешает любому программисту, но и поможет ему защищать свои программы более эффективно.

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

Объединение модулей
Объединение модулей - 2
Пример программы c упрощенной сегментацией
Краткий обзор ряда других программ
Редакторы
Отладчики
Дизассемблеры
Пример дизассемблированш программы
Компиляторы ресурсов
Редакторы ресурсов

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

Вы начинаете программировать под Windows
Вы начинаете программировать под Windows - 2
Вы начинаете программировать под Windows - 3
Пример простейшей программы с текстом
Пример простейшей программы с текстом - 2
Текстовая строка все время в середине окна
Как выводить текстовую информацию
Как выводить текстовую информацию - 2
Фрагмент программы выводящей текст
Процедура копирования одной

Структура исполняемых модулей
Исполняемым форматом в Windows является формат PE. Сокращение PE означает Portable Executable, т.е. переносимый исполняемый формат. Этот формат имеют как ЕХЕ-файлы, так и динамические библиотеки. Важно, что сейчас фирма Microsoft ввела "новый" формат и для объектных модулей - это COFF-формат (COFF - Common Object File Format), который, однако, на поверку оказался, в сущности, все тем же PE-форматом.

Структура ЕХЕпрограммы для MS DOS
Общая структура РЕмодуля
Общая структура РЕзаголовка
Фрагмент РЕзаголовка
Описание заголовка РЕ
Описание заголовка РЕ - 2
Описание заголовка РЕ - 3
Описание заголовка РЕ - 4
Описание заголовка РЕ - 5
Описание заголовка РЕ - 6

Примеры программ использующих таймер
Таймер является одним из мощных инструментов, предоставляемых операционной системой и позволяющих решать самые разнообразные задачи. С таймером Вы познакомились, когда занимались консольными приложениями. Там мы пользовались функциями timeSetEvent и timeKillEvent. Для консольных приложений это очень удобные функции. В оконных приложениях чаще используют функции SetTimer и KillTimer.

Первый пример
Первый пример - 2
Пример реализации простейшего таймера
Следующая программа сложнее предыдущей
Следующая программа сложнее предыдущей - 2
Пример использования двух таймеров
Результат работы программы
Вопрос о всплывающих подсказках
Вопрос о всплывающих подсказках - 2
Вопрос о всплывающих подсказках - 3

Приложения
В силу ограниченного объема мы не можем дать полный список API-функций — их насчитывается более двух тысяч. Мы даем список API-функций, которые содержатся в данной книге с кратким комментарием и указанием глав, где они были использованы или хотя бы упомянуты. Вторая таблица посвящена сообщениям Windows.

Регистры общего назначения
Регистр флагов
Сегментные регистры
Регистр CR
Регистр CR
Регистр CR
Регистр CR
Системные адресные регистры
Регистры отладки
Команды пересылки данных

Сборник по задачам и примерам Assembler

Профессия программиста удивительна и уникальна. Давно уже настало время настоящего философского осмысления этой сферы человеческой деятельности, действительно обладающей какими-то особенными, для людей непосвященных чуть ли не магическими, свойствами. Если не брать в рассмотрение коммерческую сторону, то можно сказать, что чужих людей в этой области профессиональной деятельности нет. В чем же ее особенность? Наиболее точно по этому поводу высказался Фредерик Брукс в главе «Пятьдесят лет удивления, восхищения и радости» своей книги «Мифический человеко-месяц, или как создаются программные системы>: «Немногим Бог дает право зарабатывать на жизнь тем, чем они с радостью занимались бы по собственной воле, по увлечению. Я благодарен судьбе». И далее: «Область связанных с компьютерами знаний претерпела взрыв, как и соответстующая технология. Будучи аспирантом в середине 50-х, я мог прочесть все журналы и труды конференций. Я мог оставаться на современном уровне во всей научной дисциплине.

Введение
Эту книгу можно рассматривать как своеобразную форму программного продукта. Даже беглое ее пролистывание показывает, как много в ней программного кода. Более того, так как ассемблерный код неэк'ономичен с точки зрения использования поверхности листа бумаги для его записи, то в тексте книги приведены лишь значимые для каждого конкретного контекста изложения фрагменты программ. Полные тексты этих программ содержатся на дискете. Некоторые наиболее объемные по размеру исходного текста программы целиком вынесены на дискету без приведения их фрагментов в тексте книги. Для эффективной работы с ними читателю следует внимательно следить за ссылками на них и соответствующими пояснениями.

Структура раздела
Структура раздела - 2
Структура раздела - 3
Структура раздела - 4

Программирование целочисленных арифметических операций
Всякое математическое доказательство, за которым мы можем следить, выразимо конечным числом символов. Эти символы, правда, могут быть связаны с понятием бесконечности, но связь эта такова, что ее можно установить за конечное число шагов. Так, когда в случае математической индукции мы доказываем теорему, зависящую от параметра n, мы доказываем ее сначала для n=0 и затем устанавливаем, что случай, когда параметр имеет значение n+1, вытекает из случая, когда параметр имеет значение n.

Двоичные числа
Сложение чисел размером 1 байт без учета знака
Сложение чисел размером N байт без учета знака
Сложение чисел размером 1 байт с учетом знака
Сложение с учетом знака чисел размером N байт
Вычисление дополнения числа размером N байт
Вычисление модуля числа размером N байт
Вычитание двоичных чисел
Вычитание чисел размером N байт без знака
Вычитание чисел размером 1 байт с учетом знака

Сложные структуры данных
Процесс разработки программы на ассемблере традиционно осложняется тем, что в этом языке ограничены средства описания данных, привычные для языков программирования высокого уровня. В уроке 12 «Сложные структуры данных» учебника были рассмотрены средства, которые поддерживает ассемблер для работы с данными. Но это деление весьма условно и не дает представления о том, как реализуется общая концепция понятий «данное», «тип данных» и «структура данных» в контексте программирования на языке ассемблера.

Основные понятия
Основные понятия - 2
Основные понятия - 3
Основные понятия - 4
Способы распределения памяти
Механизм виртуальной памяти Windows
Механизм работы с кучами Windows
Механизм работы с кучами Windows - 2
Множество
Множество - 2

Процедуры в программах ассемблера
В учебнике достаточно полно был рассмотрен вопрос организации работы с процедурами, но некоторые проблемы остались за кадром. В этой главе мы остановимся на трех из них: реализации рекурсивных и вложенных процедур на ассемблере, а также разработке динамических (DLL) библиотек.

Реализация рекурсивных процедур
Реализация рекурсивных процедур - 2
Реализация рекурсивных процедур - 3
Реализация рекурсивных процедур - 4
Реализация вложенных процедур
Реализация вложенных процедур - 2
Реализация вложенных процедур - 3
Разработка динамических (DLL) библиотек
Разработка текста DLL-библиотеки
Разработка текста DLL-библиотеки - 2

Обработка цепочек элементов
Материал этой главы является дополнением к уроку 11 «Цепочечные команды» учебника. Из этого урока следуют выводы о том, что, во-первых, цепочечные команды являются мощным инструментом обработки последовательностей элементов размером 1/2/4 байт и, во-вторых, это единственное средство микропроцессора для обработки данных по схеме память-память. В процессе разработки программ для учебника и этой книги мы достаточно часто использовали команды микропроцессора этой группы.

Обработка цепочек элементов
Прямой поиск в текстовой строке
Прямой поиск в текстовой строке - 2
Прямой поиск в текстовой строке - 3
Прямой поиск в текстовой строке - 4
Поиск с анализом искомой подстроки

Работа с консолью в программах на ассемблере
На практике редко возникает необходимость разработки программы как «вещи в себе». В подавляющем большинстве случаев программа должна взаимодействовать с пользователем, получая от него данные посредством клавиатуры и выдавая результаты своей работы на экран. При знакомстве с новым языком программирования одним из первых вопросов, на которые ищет ответа программист, является выяснение средств этого языка для выполнения операций обмена с консолью (консоль — клавиатура и монитор). Что касается языка ассемблера, то собственных средств обмена с консолью у него нет.

Функции BIOS для работы с консолью
Функции BIOS для работы с клавиатурой
Проверка наличия символа
Получение состояния флагов клавиатуры
Запись символа в буфер клавиатуры
Функции BIOS для работы с экраном
Установка видеорежима
Установка позиции курсора
Получение позиции курсора
Запись символа и его атрибута в видеопамять

Преобразование чисел
Отдельный предмет обсуждения при этом — процесс ввода-вывода числовой информации. В каждом языке программирования он реализован по-своему. Одна из целей, к которой стремятся разработчики компиляторов, — по возможности сделать этот процесс прозрачным для программиста. Язык ассемблера в отличие от языков высокого уровня не обладает средствами такого прозрачного ввода-вывода числовой информации. Но в этом и состоит его достоинство, так как при определенном опыте и квалификации программиста появляется хорошая возможность повышения эффективности конечного кода.

Ввод чисел с консоли
Ввод целых десятичных чисел 0..99
Ввод целых десятичных чисел 0..99 - 2
Ввод целых десятичных чисел 0..999 999
Ввод целых десятичных чисел 0..999 999 - 2
Ввод целых десятичных 0..до бесконечности
Ввод целых десятичных 0..до бесконечности - 2
Ввод вещественных чисел
Вывод чисел на консоль
Вывод чисел на консоль - 2

Работа с файлами в программах на ассемблере
Язык ассемблера не содержит средств для работы с файлами. Если такая необходимость возникает, то программа должна содержать фрагменты кода, в которых производится обращение к средствам операционной системы, осуществляющим взаимодействие с файловой системой. Это лишний раз подтверждает тот факт, что в области взаимодействия с внешним миром программа на ассемблере оказывается привязанной как к конкретной аппаратной, так и конкретной операционной платформам. В сегодняшней ситуации программисту все еще приходится сталкиваться с необходимостью программирования для MS DOS.

Создание, открытие, закрытие и удаление файла
Создание файла с усечением существующего
Открытие файла с расширенными возможностями
Закрытие файла
Чтение, запись, позиционирование в файле
Установка текущей файловой позиции
Запись в файл или устройство
Запись в файл или устройство - 2
Запись в файл или устройство - 3
Запись в файл или устройство - 4

Профайлер
В этой главе мы рассмотрим проблему измерения скоросгн работы программ. Интерес к данной теме у программистов всегда повышен и подобен интересу рыболовов к размерам выловленной рыбы. Когда программист разрабатывает алгоритм реализации некоторой задачи, то он обязательно пытается оценить скорость, с которой будет работать программа по этому алгоритму. Б процессе изложения материала мы уже не раз предлагали для решения одной задачи несколько способов, но при этом оставляли открытым вопрос об оценке их эффективности.

Профайлер
Расширение традиционной архитектуры Intel
Команды RDMSR и WRMSR
CPUID — информация о текущем процессоре
CPUID — информация о текущем процессоре - 2
CPUID — информация о текущем процессоре - 3
Счетчик меток реального времени TSC
Счетчик меток реального времени TSC - 2
Счетчик меток реального времени TSC - 3
Счетчик меток реального времени TSC - 4

Вычисление CRC
В своей практической работе каждый пользователь наверняка сталкивался с ситуацией, когда неблагоприятные условия перемещения файлов (любым способом) приводили к порче последних. Типичное проявление этой ситуации — сообщение об ошибке при попытке чтения некоторого файла. Причина — внесенная извне техническая ошибка, приведшая к нарушению целостности исходной информации. Существует много методов для исправления подобных ошибок, но прежде чем исправлять, необходимо эти ошибки обнаружить

Вычисление CRC
Вычисление CRC - 2
Вычисление CRC - 3
Вычисление CRC - 4
CRC-арифметика
CRC-арифметика - 2
CRC-арифметика - 3
CRC-арифметика - 4
CRC-арифметика - 5
CRC-арифметика - 6

Программирование ХММ-расширения
В этой главе мы рассмотрим практические вопросы программирования ХММ-расширения микропроцессора Pentium III. Программирование целочисленного MMX-расширения рассмотрено в уроке 20 «ММХ-технология микропроцессоров Intel» учебника. Там же рассмотрены архитектура и система команд ХММ-расширения, но остались «за бортом» вопросы организации практической работы с ними. Кроме учебника архитектура и система команд ХММ-расширения рассмотрены в литературе.

Программирование ХММ-расширения
Программирование ХММ-расширения
Программирование ХММ-расширения - 2
Программирование ХММ-расширения - 3
Описание упакованных и скалярных данных
Описание упакованных и скалярных данных - 2
Примеры использования команд ХММ-расширения
Сложение и умножение ХММ-значений
Умножение матрицы на вектор
Умножение матрицы 4x4 на вектор


МТС пакета MetaStock - перейти
Экономика - перейти
Что такое финансы - перейти
Банки России - перейти
Статистика - перейти
Статистика - перейти
Биржевая статистика - перейти
Задачи статистики в пакете SPSS - перейти
Web-разработка с Macromedia Studio MX - перейти
Планирование узла - перейти
Управление содержанием - перейти
Совместная работа - перейти
Проверка своих идей на модели узла - перейти
Каркасная модель узла - перейти
Создание динамических страниц - перейти