
- •Минобрнауки россии
- •Е.В. Грачева Системное программное обеспечение персональных эвм
- •1 Программирование в операционной среде
- •1.1 Программирование в среде однозадачной операционной системы
- •1.2 Программирование в среде ос Windows
- •1.2.1 Основные понятия
- •1.2.2 Программный интерфейс
- •1.2.2.1 Сообщения, очередь сообщений
- •1.2.2.2 Процедура окна
- •1.2.3 Использование динамических библиотек
- •1.2.3.1.Описание api-функции LoadLibrary
- •1.2.3.2 Описание функции GetProcAddress
- •1.2.3.3 Описание функции FreeLibrary
- •1.2.4 Описание некоторых api-функций
- •1.2.4.1.Функции для создания пользовательского интерфейса
- •1.2.4.1.1 Ввод данных с клавиатуры
- •1.2.4.1.2 Ввод данных с помощью "мыши"
- •1.2.4.1.3 Диалоговые окна
- •1.2.4.2 Функции для получения информации о системе
- •1.2.4.2.1 Информация об аппаратной конфигурации
- •1.2.4.2.3 Конфигурация ос
- •1.2.4.2.4 Системные параметры
- •1.2.4.2.5 Внешний вид системных элементов
- •1.2.4.3 Функции управления памятью
- •1.2.4.3.1 Основные функции управления памятью
- •1.2.4.4.Функции управления файлами
- •1.2.4.4 Функции управления некоторыми устройствами
- •Контрольные вопросы
- •35. Охарактеризовать функцию для определения конфигурации ос
- •36. Охарактеризовать функции об установке системных параметров.
- •2.Ассемблеры
- •2.1 Архитектура процессоров ia-32
- •2.1.1.Основная исполнительная среда микропроцессора с архитектурой ia32
- •2.1.2 Режимы работы и используемая модель памяти процессоров с архитектурой ia32
- •2.1.3 Архитектура ia-32 системного уровня
- •2.2.Программирование на языке ассемблера
- •2.2.1 Метки
- •2.2.2 Директивы
- •2.2.3 Формат команды
- •2.2.4 Система команд микропроцессоров с архитектурой ia32
- •2.2.4.1 Команды пересылки данных
- •Ins строка, dx
- •2.2.4.2 Арифметические операции
- •2.2.4.3 Операции сдвига
- •2.2.4.4 Битовые операции
- •2.2.4.5 Команды для организации циклов
- •1.3.1.1 Команды сравнения
- •2.2.4.6 Команды передачи управления
- •2.2.4.7 Системные команды
- •2.2.4.8 Команды математического сопроцессора
- •2.2.5 Технология программирования
- •2.3 Макроязыки
- •3.Трансляторы
- •3.1 Структура компиляторов и интерпретаторов, лексический, синтаксический и семантический анализаторы, генератор кода
- •3.1.1.Распределение памяти, виды переменных
- •3.1.2.Статическое и динамическое связывание
- •3.2 Загрузчики
- •3.2.1 Функции загрузчика
- •3.2.1 Настраивающий и динамический загрузчики
- •3.3 Подключение библиотек
- •4. Формальные языки и грамматики
- •4.1 Типы грамматик
- •4.1.1 Вывод цепочек
- •4.1.2 Конечный и магазинный автоматы, распознаватели и преобразователи, построение автомата по заданной грамматике
- •Приложения Приложение а
- •Оглавление
- •4. Формальные языки и грамматики
2.1 Архитектура процессоров ia-32
2.1.1.Основная исполнительная среда микропроцессора с архитектурой ia32
Современные процессоры, используемые в персональных ЭВМ построены на основе архитектуры, получившей название IA32 (32-х разрядная архитектура Intel). Отличия этой архитектуры от внедряемой в настоящее время 64-х разрядной архитектуры заключается лишь в добавлении в последней двух дополнительных режимов работы: режима совместимости и 64-битного режима. В последнем режиме, 64-х разрядным ОС позволяется запускать приложения в которых осуществляется обращение к линейному адресному пространству, адресуемому 64-х разрядным двоичным числом, увеличивается количество регистров общего назначения (РОНов) и их разрядность увеличивается до 64.
Основным источником информации по архитектуре и режимам работы микропроцессоров являются справочники, выпускаемые фирмами-производителями процессоров (Intel и AMD) и доступные для скачивания посредством глобальной сети Internet.
Основная исполнительная среда, в которой будет выполняться программное обеспечение формируется из:
Адресного пространства
Регистров общего назначения
Регистров сопроцессора
Регистров команд ОКМД
Стека
На рисунке 24 показана основная исполнительная среда микропроцессоров с архитектурой IA-32.
Tag register – регистр тега, используется при выборке данных из КЭШа. В зависимости от схемы кэширования тег может являться либо адресом данных в ОП, либо признаком по которому производится сравнение при ассоциативном поиске (как правило).
Основные регистры, используемые при выполнении программ
РОНы – 8 регистров EAX, EBX, ECX, EDX, ESI, EDI, EBP, и ESP являются 32-х битными и используются для хранения следующего:
Операнды для логических и арифметических операций
Операнды для вычисления адреса
Указатели на ячейки памяти
ESP используется для хранения указателя стека и, как правило, для других целей не используется.
При выполнении многих команд, неявно предполагается что операнды хранятся в специфичных регистрах: например, при выполнении строковых операций в качестве операндов используется содержимое регистров ECX, ESI, и EDI. При использовании сегментной модели памяти, некоторые команды принимают, что указатели в определенных регистрах относительны определенных сегментов. Например, некоторые команды принимают, что указатель в регистре ЕВХ указывает на сегмент, начало которого указано в сегменте DS .
EAX — аккумулятор для операнда и результата
EBX — указатель на данные в сегменте, адрес которого указан в регистре DS
ECX — счетчик для строковых и циклических операций
EDX — указатель для ввода/вывода
ESI — указатель на данные в сегменте, на который указывает DS. Указатель источника для строковых операций
EDI — указатель на данные (или местоположение) в сегменте, на который указывает регистр ES. Указатель местоположения результата для строковых операций
ESP — Указатель стека (в сегменте SS)
EBP — Указатель на данные в стеке (в сегменте SS)
В 64-х битном режиме те же регистры называются RAX и т.д. и к ним добавляются регистры R8R15, к которым также можно обращаться побайтно (R8L (байт), R8W (слово), R8D (двойное слово) и R8 (четверное слово, т.е. 64 бита))
Сегментные регистры – CS, DS, SS, ES, FS, и GS хранят 16-ти битный селектор сегмента. Селектор сегмента – специальный указатель, который идентифицирует сегмент в памяти. При использовании плоской модели памяти, сегментные регистры загружаются указателями, которые указывают на перекрывающиеся сегменты (одно и то же число). При сегментной модели памяти – в сегментные регистры записываются различные числа. Одновременно программа может использовать до 6 сегментов. Каждому сегментному регистру сопоставляется определенный тип данных:
CS – указывает на сегмент кода
SS – указывает на сегмент стека
DS, ES, FS, и GS – указывают на сегмент данных
В 64-х битном режиме CS, DS, ES, SS устанавливаются в 0, а FS и GS могут быть использованы как дополнительные базовые регистры при вычислении линейного адреса.
Регистр признаков (флагов)
32-х битный регистр EFLAGS содержит группу флагов состояния, управляющий флаг и группу системных флагов. Некоторые флаги могут быть изменены напрямую с помощью специальных команд. Полностью регистр флагов не изменяется. После включения питания в нем записано число 0000002h
Рисунок 3 – Основная исполнительная среда микропроцессора с архитектурой IA32
Флаги состояния:
CF – флаг переноса
PF – флаг четности, устанавливается в «1», если младший значащий байт результата содержит четное число единиц
AF – корректирующий флаг, устанавливается если был перенос или заем из младшей тетрады в старшую (из старшей в младшую). Используется при выполнении операций двоично-десятичной арифметики. В иных моделях процессоров может называться CY.
ZF – флаг равенства 0 результата операции.
SF – флаг знака результата. Устанавливается равным старшему значащему биту результата. (0 – положительный результат, 1 – отрицательный результат)
OF – флаг переполнения. Устанавливается, если результирующее целое положительное слишком большое или отрицательное слишком маленькое. Этот флаг показывает условия переполнения в арифметике для целых чисел со знаком (в дополнительном коде).
Из вышеперечисленных флагов только CF может быть напрямую изменен.
DF – флаг направления, управляет строковыми командами. Если DF установлен в «1»,то при операциях со строками адреса уменьшаются (обработки строки идет с конца), если DF сброшен в «0» – адреса увеличиваются (обработка строки одет с начала).
Системные флаги – управляют операционной системой и исполняемой программой. Они не должны меняться прикладным ПО.
TF – флаг трассировки (trap flag), когда установлен в «1» – разрешает пошаговое исполнение программы
IF – флаг разрешения прерываний
IOPL – 2 бита, используются для разрешения или запрещения доступа к адресному пространству ввода/вывода. Приложение, пытающееся обратиться к пространству ввода/вывода должно обладать уровнем привилегий не более (т.е. меньше или равным) чем записано в этих битах. Всего поддерживается 4 уровня привилегий: 0 (операционная система), 1,2, (драйвера и программы обслуживающие ОС), 3 (прикладное ПО). В операционной системе Windows используется только 2 уровня привилегий: 0 (ядро ОС, драйвера уровня ядра и т.п.) и 3 (прикладное ПО).
NT – управляет цепочкой прерванных задач или цепочкой вызовов подпрограмм. Установлен в «1», если текущая задача связана с предыдущей, и сброшен в «0», если связи нет.
RF – управляет ответом процессора на отладочные исключения.
VM – флаг виртуального I8086. Для разрешения режима виртуального I8086 устанавливается в «1», сброс в «0» приводит к возвращению в защищенный режим.
AC – проверяет выравнивание слов в памяти. Установка этого флага и бита AM в регистре CR0 разрешает проверку выравнивания ссылок памяти; сброс этого флага и/или бита AM - отменяет проверку выравнивания.
VIF – виртуальный флаг прерывания.
VIP – виртуальный флаг обработки прерывания. Устанавливается ПО, процессору этот флаг доступен только для чтения. Если установлен, то прерывание обрабатывается, сброшен – никакое прерывание не обрабатывается.
ID – флаг идентификации. Возможность сбрасывать или устанавливать этот флаг показывает, что команда CPUID поддерживается.
В 64-битном режиме используется регистр RFLAGS. Старшие 32 разряда которого зарезервированы, а младшие – аналогичны EFLAFS.
Кроме представленных на рисунке 24 регистров, системному программисту доступны и другие ресурсы процессора:
Порты ввода/вывода
Управляющие регистры: 5 штук (CR0÷CR4), определяют режимы работы процессора и характеристики текущей задачи. Описание и назначение этих регистров приводится в документации фирмы Intel [2].
Регистры управления памятью: регистры GDTR, IDTR, LDTR и регистр задачи (task register) определяют местоположение структур данных, используемых в управлении памятью в защищенном режиме. Описание и назначение этих регистров приводится в документации фирмы Intel.
Отладочный регистр: отладочные регистры DR0÷DR7 управляют и позволяют отлаживать выполнение операций процессором.
Регистры диапазона типа памяти (MTRR): используются для назначения областям памяти типа кэширования (от «ни в коем случае не кэшируемая – сразу запись/чтение» до «чтение и запись из кэша по мере возможности»), зависящего от типа памяти (ROM, RAM, отображенная на ОП память устройств и т.п.) и позволяющие оптимизировать работу с памятью.
Специфичные регистры: у процессора есть множество различных регистров, используемых для управления и отчета о производительности процессора. Виртуально, каждому из них соответствует какая то системная функция и программно они не доступны (единственное исключение – таймер).
Регистры проверки машины
Счетчики контроля производительности