Автор: Пользователь скрыл имя, 13 Декабря 2011 в 21:28, реферат
По мере повышения нашей зависимости от компьютеров пользователям необходимы все более надежные и защищенные системы, способные выполнять несколько задач одновременно.
Процессоры могут работать в различных режимах. Под термином «режим» подразумевается способы, которым процессор создает (и обеспечивает) для себя рабочую среду. Режим работы процессора задает способ адресации к оперативной памяти и способ управления отдельными задачами. Процессоры персональных компьютеров могут работать в трех режимах: реальном, защищенном и виртуальном режимах.
Максимальный режим работы ЦП. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
Уровни привилегий. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Адресация памяти в защищенном режиме. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Работа прерываний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Список литературы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Компиляция и отладка ассемблерных программ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Общие сведения о языке ассемблера. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Процесс разработки программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Компиляция программы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Отладка программы. . . . . . . . . . . . . . . . . . . . .
41-43: Тип сегмента (табл.1)
44: S – бит системного сегмента (System)
45-46: DPL – уровень привелегий (Descriptor Privelege Level )
47: P – бит присутствия (Present) сегмента в ОЗУ
Таблица 1
|
Тетрада флагов (52-55) G,D,X,U имеет формат:
52: бит U – пользователь (User)
53: бит X – зарезервирован
54: бит D – размерность (Default size) операндов
55: бит G –
бит гранулярности (
При адресации
памяти в защищённом режиме команды
ссылаются на сегменты, указывая не
их адреса (как в режиме реальных
адресов), а описания сегментов (их дескрипторы).
Указатель на описание сегмента называется
селектор. Другими словами, селектор
- это номер дескриптора из таблицы дескрипторов.
Адресация производится через пару регистров
сегмент:смещение, причём, в качестве
сегментного регистра используются обычные
CS, SS, DS, ES, FS и GS (последние два появились
в ЦП Intel 80386), но в них указывается не адрес
сегмента, а селектор дескриптора.
Селекторы нужны,
по крайней мере, по трём причинам:
Адрес памяти можно
указывать не только через пару регистров,
но и в переменных, через пару
значений селектор:смещение.
Селектор имеет
следующий формат:
Рис. 2. Формат селектора.
Двухбитовое поле RPL (Requested Privilege Level) содержит номер уровня привилегий, которое имеет текущая программа. Значение этого поля процессор использует для защиты по привилегиям. К одному и тому же дескриптору можно обращаться, используя селекторы с разными значениями RPL, но процессор позволит доступ только при определённых условиях.
Бит TI (Table Indicator) определяет таблицу, из которой выбирается нужный дескриптор. Если бит TI = 0, то обращение производится к глобальной дескрипторной таблице GDT (она одна на всю систему), если TI = 1 - то к текущей локальной дескрипторной таблице LDT (таких может быть много).
Index - это собственный
номер дескриптора, от 0 до 8191. Так как поле
индекса состоит из 13 бит, то максимальное
число дескрипторов, одновременно существующих
в системе равно 2 13, т.е. 8192. Это довольно-таки
много и вполне удовлетворяет любым системным
запросам. На самом деле, число дескрипторов
можно значительно увеличить за счёт использования
множества дополнительных локальных дескрипторных
таблиц.
Использование
селекторов достаточно просто. Для
тех дескрипторов, которые будут
определены заранее, например, сегментов
кода, стека и данных, селекторы
подготавливаются как константы
и затем используются для загрузки
в сегментные регистры. Для дескрипторов,
которые программа будет
Обращение к
дескрипторной таблице
При загрузке недопустимого
значения селектора процессор будет
генерировать исключение, даже если вы
не обращались через него к памяти.
Работа
прерываний
В защищённом режиме
работа прерываний происходит следующим
образом:
Во-первых, вводится
новый класс прерываний, генерируемых
самим процессором при нарушениях условий
защиты - так называемые исключения (
Во-вторых, вместо дальних адресов в таблице прерываний используются дескрипторы специальных системных объектов, так называемых шлюзов.
В-третьих, сама таблица прерываний, которая называется IDT (Interrupt Descriptors Table), может находится по любому адресу памяти.
Все эти особенности появились в процессоре Intel80386 и в полном объёме, с небольшими дополнениями, используются во всех 32-разрядных процессорах. Прерывания с векторами от 00 до 1Fh, т.е. исключения - это основа защищённого режима. Благодаря исключениям процессор автоматически реагирует на любые попытки нарушить защиту системы и позволяет их корректно обработать. Благодаря разделению кода и данных по уровням привилегий, обработчики прерываний можно надёжно изолировать от других программ. В грамотно построенной операционной системе никакая программа не сможет перехватить прерывание, изменить код или даже просто прочитать его, выйти за предел отведённых ей адресов и пр. Благодаря исключениям, операционная система может контролировать любые нарушения условий, поставленных ею. Когда срабатывает прерывание, процессор должен передать управление соответствующей процедуре-обработчику. В режиме реальных адресов это происходит сразу - из памяти выбирается вектор и по dw:dw адресу происходит переход. В защищённом режиме ситуация обстоит сложнее - перед передачей управления процессор производит множество проверок возможности доступа к обработчику прерывания - обеспечивает защиту.
Адрес, по которому
произойдёт переход на обработчик прерывания,
находится в дескрипторе прерывания. Каждому
вектору прерыванию соответствует свой
дескриптор, все они (до 256) объединяются
в специальную таблицу дескрипторов прерываний
(IDT) и по формату похожи на дескрипторы
сегментов.
Список
использованной литературы:
Компиляция и отладка ассемблерных программ.
Общие сведения о языке Ассемблера.
Машинный язык – это комбинации, в виде строго организованных последовательностей нулей и единиц. Таким образом, внешне являясь полиглотом, компьютер понимает только один язык — язык машинных команд.
Ассемблер стал следующей ступенью в развитии программирования, поскольку дал возможность писать программы намного быстрее и легче, нежели это происходило на языках машинных кодов, хотя по легкости, ему далеко до языков высокого уровня. Язык ассемблера – это символический аналог машинного языка. Этот язык точно отражает все особенности машинного языка. Именно поэтому, в отличие от языков высокого уровня, язык ассемблера для каждого типа компьютеров свой. Главным его достоинством является то, что на языке ассемблера все элементы программы представлены в символической форме. Преобразование символических имен команд в их двоичные коды возлагаются на специальную программу – ассемблер, которая освобождает программиста от трудоемкой работы и исключает неизбежные при этом ошибки.
Символические имена, вводимые при программировании на языке ассемблера, как правило, отражают семантику программы, а аббревиатура команд – их основную функцию.
Например:
PARAM – параметр;
TABLE – таблица;
MASK – маска;
ADD – сложение;
SUB – вычитание;
MUL – умножение
Язык ассемблера
позволяет эффективно писать и отлаживать
значительно более сложные
Языки ассемблера являются машинно-ориентированными, т. е. зависимыми от машинного языка и структуры соответствующего микропроцессора, так как в них каждой команде микропроцессора присваивается определенное символическое имя.
Языки ассемблера обеспечивают существенное повышение производительности труда программистов по сравнению с машинными языками и в то же время сохраняют возможность использовать все программно-доступные аппаратные ресурсы микропроцессора. Это дает возможность квалифицированным программистам составлять программы, выполняемые за более короткое время и занимающие меньший объем памяти по сравнению с программами, создаваемыми на языке высокого уровня.
В связи с
этим практически все программы
управления устройствами ввода/вывода
(драйверы ) пишутся на языке ассемблера
не смотря на наличие достаточно большой
номенклатуры языков высокого уровня.
С помощью языка
ассемблера программист может задать
следующие параметры:
На языке ассемблера программа записывается построчно, т. е. для каждой команды отводится одна строка.
Для микро –
ЭВМ, построенных на базе наиболее распространенных
типов микропроцессоров, может существовать
несколько вариантов языка
Каждая строка написанной на языке ассемблера программы содержит четыре поля:
МЕТКА
КОД ОПЕРАНД КОММЕНТАРИЙ
Поле МЕТКА не является обязательным, оно помечает адрес той ячейки памяти, в которой размещен первый байт отмеченной команды. Метки используются в качестве адресов перехода команд передачи управления, и благодаря их наличию программист может не оперировать абсолютными адресами, а использовать символические адреса, что значительно удобнее. Метка может иметь длину от одного до шести символов, первым из которых должна быть буква. Во многих ассемблерах допускается использование меток любой длины, но распознаются только первые шесть символов. Метка не должна содержать пробелов и знаков пунктуации. В некоторых ассемблерах за последним символом метки должно следовать двоеточие.