- •Введение
- •Сведения об архитектуре процессоров intel 80х86 и операционной системе windows, необходимые для программирования на ассемблере
- •1.1. Программно доступные регистры
- •1.2. Организация памяти [5]
- •1.2.1. Сегментация
- •1.2.2. Дескрипторы сегментов
- •1.2.3 Адресное пространство режима реального адреса
- •1.2.4. Адресное пространство защищенного режима [6]
- •1.2.5. Виртуальное адресное пространство
- •1.2.6. Способы адресации операндов
- •Регистровый операнд
- •Непосредственный операнд
- •1.3. Организация ввода – вывода
- •1.3.1. Консоль
- •1.3.2. Графический интерфейс пользователя
- •1.4. Система команд
- •Команды пересылки данных
- •Команды ввода/вывода
- •Команды целочисленной арифметики
- •Логические операции
- •Операции сдвигов
- •Команды передачи управления
- •Командные прерывания
- •Команды управления процессором
- •Команды обработки последовательности кодов
- •Команды для работы со стеком
- •2. Описание языка ассемблера
- •2.1. Алфавит языка ассемблера
- •2.2. Лексемы
- •2.3. Имена
- •2.3.1. Ключевые слова
- •2.3.2. Имена пользователя
- •2.4. Константы
- •2.4.1.Целые числа
- •2.4.2. Вещественные числа
- •2.4.3. Символьные и строковые константы
- •2.5. Структура строки языка ассемблера
- •2.5.1. Структура строки, содержащей машинную команду
- •2.6.3. Директивы упрощенного определения сегментов
- •2.6.4. Директивы определения сегментов и групп
- •2.6.5. Директивы описания процедуры
- •2.6.6. Директивы определения данных
- •2.6.7. Директивы определения имен
- •2.6.8. Директивы внешних ссылок
- •2.6.7. Директивы управления трансляцией
- •2.6.8. Макросредства
- •2.7. Операции в выражениях
- •2.7.1. Арифметические операции
- •2.7.2. Логические операции
- •2.7.3. Операции отношения
- •2.7.4. Операции, возвращающие значения
- •2.7.5. Операции присваивания атрибута
- •Трансляция программ
- •. Компиляция
- •3.2. Компоновка
- •Библиографический список
- •Функции api
- •1. Функция GetModuleHandleA
- •2. Функция LoadIcon
- •3. Функция LoadCursor
- •4. Функция Register Class
- •5. Функция CreateWindowExA
- •6. Функция ShowWindow
- •7. Функция UpdateWindow
- •8. Функция GetMessage
- •9. Функция DispatchMessage
- •10. Функция ExitProcess
- •11. Функция BeginPaint
- •12. Функция TextOutA
- •13. Функция EndPaint
- •Описание структур, определенных в фале win32.Inc
- •1. Структура wndclass
- •2. Структура сообщения
- •3. Структура paintstruct
- •Продолжение прил. 4
- •4. Структура rect
- •Формат командной строки и ключи транслятора tasm32
- •Формат командной строки и ключи компоновщика tlink32
- •Оглавление
Введение
Известно, что к программированию на языке ассемблера обращаются тогда, когда от программы требуется максимальная скорость исполнения, когда необходимо обеспечить взаимодействие с нестандартными внешними устройствами, когда необходимо полностью использовать возможности процессора и операционной системы. На языке ассемблера можно запрограммировать все, на что способна соответствующая вычислительная машина, то есть ассемблер является машинно-ориентированным языком программирования. Программируя на ассемблере иногда в силу привычки, иногда в силу необходимости, особенно при организации интерфейса пользователя, приходится многократно программировать одни и те же элементарные задачи. В языках высокого уровня эта проблема решена применением стандартных функций и процедур. В ассемблере эта проблема могла бы быть решена за счет библиотек стандартных функций как на уровне исходных текстов, так и объектных кодов, но такие библиотеки не были стандартизованы и не распространялись вместе с компиляторами. С появлением Windows 95 ситуация изменилась. Создание приложения на языке ассемблера представляет собой весьма сложную задачу в связи с высоким уровнем интеграции прикладной программы и операционной системы, но теперь нет необходимости многократно решать проблемы пользовательского интерфейса и управления исполнением программы на уровне машинных команд [1]. Они решаются теперь с помощью операционной системы за счет обращения к функциям интерфейса прикладного программирования - Application Programming Interface (WIN32 API).
Создание приложений на ассемблере в среде Windows скорее всего оправдано в учебных целях, так как должно способствовать глубокому изучению архитектуры ПЭВМ и операционной системы, помочь осознанию принципов объектно-ориентированного программирования и места функций API в общем ряду инструментальных средств разработки прикладного программного обеспечения. С точки зрения практического применения программирование на ассемблере имеет смысл при написании динамических библиотек и драйверов. Для успешного решения системных задач такого типа необходимы знания программирования процессоров в защищенном режиме и архитектуры операционной системы Windows.
Сведения об архитектуре процессоров intel 80х86 и операционной системе windows, необходимые для программирования на ассемблере
Как известно, 32-разрядные процессоры Intel (386, 486, Pentium) могут работать в трех режимах: реального адреса, защищенном и виртуального процессора 8086. При включении процессор работает в режиме реального адреса. В этом режиме 32-разрядные процессоры работают как процессор 8086 с повышенным быстродействием и расширенной системой команд. Переход в защищенный режим осуществляется программным путем.
Принципиально новыми чертами процессора 80386 относительно предыдущих моделей являются 32-разрядные регистры и аппаратно поддерживаемый механизм виртуальной памяти и мультизадачности.
Виртуальная память отличается от обычной оперативной памяти тем, что информация, содержащаяся в ее редко используемых фрагментах, может находиться на диске и подгружаться в реальную оперативную память по мере необходимости. Такая организация памяти позволяет снять ограничение, накладываемое на размеры программ объемом физической оперативной памяти, установленной на компьютере.
Мультизадачность при наличии в системе одного процессора означает, что процессор последовательно-параллельно выполнят несколько программ. Операционные системы (ОС), поддерживающие многозадачность, выполняют периодическое переключение между задачами, учитывая их приоритет. При этом каждой задаче может отводиться вся доступная данной ОС виртуальная память. Важным достоинством мультизадачной ОС является то, что она выполняет диспетчеризацию задач в защищенном режиме работы процессора, аварийное завершение одной задачи не приводит к остановке других задач и зависанию системы.
Кроме двух управляющих регистров, имеющихся в процессоре 8086 (IP и FLAGS), в защищенном режиме для программ, имеющих наивысший уровень привилегий, доступны регистры CR0-CR4 (Control Registers), содержащие информацию о состоянии процессора. Регистр CR1 зарезервирован. Для определенности далее будем основываться на архитектуре процессора Intel Pentium.
