Главная страница
Навигация по странице:

  • ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

  • СОДЕРЖАНИЕ ОТЧЕТА ПО РАБОТЕ

  • СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

  • ПРИЛОЖЕНИЯ 1. НЕКОТОРЫЕ КОМАНДЫ, СВЯЗАННЫЕ С ЗАЩИЩЕННЫМ РЕЖИМОМ

  • Команды LGDT и LIDT.

  • 2. ПРЕРЫВАНИЯ И ОСОБЫЕ СИТУАЦИИ В МИКРОПРОЦЕССОРАХ х86

  • Lab2. Защищенный режим микропроцессоров Intel x86. Лабораторная работа защищенный режим микропроцессоров intel x86 Основные сведения


    Скачать 0.54 Mb.
    НазваниеЛабораторная работа защищенный режим микропроцессоров intel x86 Основные сведения
    Дата17.11.2022
    Размер0.54 Mb.
    Формат файлаpdf
    Имя файлаLab2. Защищенный режим микропроцессоров Intel x86.pdf
    ТипЛабораторная работа
    #795112
    страница3 из 4
    1   2   3   4
    ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
    Модифицировать программу Demo в соответствии с заданием, соответствующим порядковому номеру студента в списке группы.
    1.
    Написать обработчик прерывания
    INT
    27d, выполняющий вывод содержимого 32-разрядного регистра на экран в шестнадцатеричном виде и вывести с его помощью содержимое нескольких регистров друг под другом.
    Координаты вывода указываются при вызове данного прерывания.
    2. Написать обработчик исключительной ситуации 0
    (ошибка деления), выводящий на экран сообщение. Проверить работу программы для двух случаев: а) нормальная работа; б) при выполнении ошибочной команды деления.
    3. Разделить сегменты кода и данных (так, чтобы их дескрипторы указывали не на одну и ту же область памяти). Для стекового сегмента организовать отдельный дескриптор.
    4. Написать обработчик прерывания INT 29d, выдающий звуковой сигнал в защищенном режиме.
    5. Написать обработчик особой ситуации 11 (сегмент не присутствует), выводящий соответствующее сообщение на экран. Для проверки его работы создать в GDT дескриптор не присутствующего сегмента и обратиться к нему.

    6. Написать обработчик прерывания INT 18d, выводящий на экран байт прав доступа заданного дескриптора в двоичной форме. Селектор дескриптора задается в качестве параметра при вызове этой функции. Для получения байта прав доступа можно воспользоваться командой LAR.
    7. Создать в таблице GDT дескриптор, описывающий таблицу GDT как сегмент данных. Написать процедуру, которая, используя этот дескриптор, будет выдавать базовый адрес любого сегмента, описанного в GDT. Селектор сегмента передается процедуре в качестве параметра в регистре AX.
    Процедура возвращает 32-разрядный линейный адрес в регистре
    EBX. Для проверки работы процедуры, после возврата в реальный режим вывести содержимое EBX на экран, используя стандартные функции DOS.
    8. Написать процедуру, меняющую в защищенном режиме предел сегмента в дескрипторе GDT. Для этого нужно внести в
    GDT дескриптор, описывающий GDT как сегмент данных, и, в дальнейшем, модифицировать содержимое GDT, пользуясь этим дескриптором. При вызове процедуры значение селектора и нового предела задается в регистрах. Для проверки работы считать новое значение предела командой LSL, и после выхода в реальный режим вывести его на экран, используя стандартные функции DOS.
    9. Написать обработчик ошибки неверного кода операции, выводящий информацию на экран. Для проверки вызвать генерацию данной особой ситуации.
    10.
    Написать обработчик ошибки переполнения, выводящий информацию на экран. Для проверки вызвать генерацию данной особой ситуации.
    11. Написать обработчик ошибки превышения диапазона, выводящий информацию на экран. Для проверки вызвать генерацию данной особой ситуации.
    12. Преобразовать программу DEMO из формата .COM в формат .EXE.
    13. Написать обработчик прерывания 30d, который в защищенном режиме выводит размер дескриптора GDT на экран. Селектор дескриптора передается в регистре DX.

    14. Написать обработчик прерывания 40d, который в защищенном режиме выводит содержимое дескриптора GDT на экран. Селектор дескриптора передается в регистре CX.
    15. Написать обработчик особой ситуации общей защиты, выводящий информацию из кода ошибки на экран. Для проверки вызвать генерацию данной особой ситуации.
    ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
    1. Изучить основные сведения по работе.
    2. В соответствии с заданием модифицировать программу
    Demo.
    3. Выполнить ввод, трансляцию, построение кода программы и получить результаты ее работы.
    СОДЕРЖАНИЕ ОТЧЕТА ПО РАБОТЕ
    1. Цель работы.
    2. Текст задания и общая схема решения задачи.
    3. Текст программы или подпрограммы.
    4. Результаты выполнения программы.
    5. Выводы по работе.
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1. Что такое дескриптор сегмента, какие поля он имеет?
    2. Назовите типы дескрипторных таблиц и различие между ними.
    3. Каково назначение полей селектора сегмента?
    4. Какие бывают типы системных дескрипторов и их назначение?
    5. Опишите механизм передачи управления при возникновении особой ситуации или прерывания.
    6. Поясните, как определяется максимальный объем виртуальной памяти в процессоре 80286 (1 Гбайт) и 80386 (64
    Тбайт).

    СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
    1. Брэй Б. Микропроцессоры Intel: 8086/8088…80486,
    Pentium: пер. с англ. СПб: BHV-Петербург, 2005. 1328 с
    2. Зубков С.В. Ассемблер для DOS, Windows и UNIX. М.:
    ДМК-Пресс, 2013. 638 с.
    3. Таненбаум Э. Архитектура компьютера: 5-е изд. пер. с англ. СПб.: Питер, 2013. 848 с.
    4. Юров В.И. Assembler: учебник для вузов. СПб.: Питер,
    2011. 640 с.
    5. Юров В.И. Assembler: практикум: учеб. Пособие для вузов. СПб.: Питер, 2007. 400 c.
    6. Андреева А.А. и др. Программирование на языке ассемблера в операционной системе Windows: лаб. практикум.
    Чебоксары: Изд-во Чуваш. ун-та, 2006. 104 с.
    7. Андреева
    А.А. и др.
    Программирование микропроцессоров семейства Intel 80х86: лаб. практикум.
    Чебоксары: Изд-во Чуваш. ун-та, 1996. 144 с.
    ПРИЛОЖЕНИЯ
    1. НЕКОТОРЫЕ КОМАНДЫ, СВЯЗАННЫЕ С
    ЗАЩИЩЕННЫМ РЕЖИМОМ
    При описании команд использованы следующие обозначения:
    - r8 : один из регистров AL, CL, DL, BL, AH, CH, DH, BH;
    - r16: один из регистров AX, CX, DX, BX, SP, BP, SI, DI;
    - r32: один из регистров EAX, ECX, EDX, EBX, ESP, EBP,
    ESI, EDI;
    - imm8, imm16, imm32: непосредственная одно-, двух- или четырехбайтная величина соответственно;
    - r/m8, r/m16, r/m32, r/m64: одно-, двух-, четырех- или восьмибайтный регистр или операнд в памяти;
    - m8, m16, m32: байт, слово или двойное слово в памяти.
    При описании особых ситуаций, в некоторых командах использовано выражение "стандартные". К стандартным особым ситуация здесь относится следующий набор:

    - реальный режим: прерывание 13, если любая часть операнда находится вне пространства эффективных адресов от 0 до 0FFFFh.
    - защищенный режим: особая ситуация 13 (общая защита), если результат находится в сегменте, запрещенном для записи, или если недопустимый эффективный адрес в сегментах
    CS, DS, ES, FS или GS; особая ситуация 12 (ошибка стека), если недопустимый адрес в сегменте SS; особая ситуация 14
    (страничная ошибка) при страничной ошибке.
    - виртуальный режим: то же, что и в реальном режиме; особая ситуация 12 при страничной ошибке.
    1 Команды LGDT и LIDT.
    LGDT - загрузить регистр глобальной дескрипторной таблицы;
    LIDT - загрузить регистр дескрипторной таблицы прерываний;
    Синтаксис: LGDT m48
    LIDT m48
    Действие: обе команды действуют совершенно одинаково и служат для загрузки регистров GDTR и IDTR из шестибайтного операнда в памяти. Если используется 16- битный операнд, то регистр загружается 16-битным пределом и
    24-битной базой, старшие 8 бит не используются. Этот вариант является единственным для процессора 80286. В случае использования 32-битного операнда загружается 16-битный предел и 32-битная база.
    Использование: эти команды используются обычно операционной системой; они могут применяться только на нулевом уровне привилегий.
    Изменяемые флаги: нет.
    Особые ситуации:
    - реальный режим: прерывание 13, если часть операнда лежит вне предела адресов 0..0FFFFh; прерывание 6, если операнд - регистр;
    - защищенный режим: особая ситуация 13, если текущий уровень привилегий не равен 0; 6 - если операнд - регистр; особая ситуация 13 при недопустимом эффективном адресе
    операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном; особая ситуация 14 при страничной ошибке.
    Пример:
    LGDT GlobalTable
    2. Команды SGDT и SIDT.
    SGDT - сохранить регистр глобальной дескрипторной таблицы;
    SIDT - сохранить регистр дескрипторной таблицы прерываний;
    Синтаксис:
    SGDT m48
    SIDT m48
    Действие: команды копируют содержимое соответствующего регистра дескрипторной таблицы в шесть байтов памяти, указанных операндом. Поле предела регистра помещается в самое младшее слово. Если атрибут размера операнда равен 16 бит, то следующим трем байтам присваивается значение поля базы, а четвертый байт не определен. Если размер 32 бита, то поле базы присваивается всем четырем байтам.
    Изменяемые флаги: нет.
    Особые ситуации: стандартные.
    Примеры:
    SIDT [bx+4]
    SGDT [ecx*2]+100h
    SGDT Qword Ptr Table
    3. Команды LLDT и LTR - загрузка регистров LDTR и
    TR.
    Синтаксис:
    LLDT r/m16
    LTR r/m16
    Действие: команда LLDT загружает регистр локальной дескрипторной таблицы значением двухбайтного операнда (в памяти или в регистре). Операнд должен обязательно содержать селектор таблицы GDT, причем элемент GDT должен быть
    дескриптором локальной дескрипторной таблицы. Команда LTR аналогичным образом загружает регистр задачи (TR) селектором сегмента TSS, причем загруженный TSS помечается как занятый.
    Использование: команды не используются в прикладных программах, поскольку являются системными. Атрибут размера операнда не воздействует на эти команды.
    Изменяемые флаги: нет.
    Особые ситуации:
    - реальный режим: прерывание 6, поскольку команды в реальном режиме не распознаются.
    - защищенный режим: особая ситуация 13, если текущий уровень привилегий не равен 0, если операнд не является селектором GDT, если запись в GDT - не дескриптор локальной дескрипторной таблицы (для LLDT) или не дескриптор сегмента
    TSS (для LTR), при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном режиме.
    Пример:
    LLDT [si]
    4. Команды SLDT и STR - сохранение регистров LDTR и
    TR.
    Синтаксис:
    SLDT r/m16
    STR r/m16
    Действие: команда SLDT сохраняет регистр локальной дескрипторной таблицы (LDTR) в двухбайтном регистре или слове памяти. Команда STR аналогичным образом сохраняет регистр TR.
    Использование: команды не используются в прикладных программах, поскольку являются системными.
    Изменяемые флаги: нет.
    Особые ситуации:
    - реальный режим: прерывание 6, поскольку команда в реальном режиме не распознается.

    - защищенный режим: особая ситуация 13, если результат находится в сегменте, запрещенном для записи; при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном режиме.
    Примеры:
    SLDT CX
    STR [bx]
    5. Команда LAR - загрузить байт прав доступа дескриптора.
    Синтаксис:
    LAR r16, r/m16
    LAR r32, r/m32
    Действие: если дескриптор доступен для чтения, то команда принимает второе двойное слово дескриптора, маскирует его значением 00FxFF00H, записывает результат в заданный 32-разрядный регистр назначения и устанавливает флаг ZF (x означает, что соответствующие четыре бита записанного значения не определены).
    Если указан 16-битный размер операнда, то 16-битный регистр назначения загружается младшими 16 битами старшего двойного слова дескриптора, маскированными FF00, и устанавливается флаг ZF.
    Изменяемые флаги: ZF.
    Особые ситуации:
    - реальный режим: прерывание 6, поскольку команда в реальном режиме не распознается;
    - защищенный режим: особая ситуация 13, если результат находится в сегменте, запрещенном для записи; при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном режиме.
    Пример:
    LAR EAX,ECX

    6. Команда LSL - загрузить границу сегмента.
    Синтаксис:
    LSL r16, r/m16
    LSL r32, r/m32
    Действие: команда загружает границу сегмента из дескриптора в операнд-приемник (первый операнд). Если размер операнда равен 16 бит, то старшие 16 бит двойного слова границы теряются.
    Команда действительна только для дескрипторов, описывающих сегменты (данных, кода, состояния задачи и таблиц дескрипторов); дескрипторы шлюзов таким способом недоступны.
    При успешном выполнении команды устанавливается флаг ZF.
    Изменяемые флаги: ZF.
    Особые ситуации:
    - реальный режим: прерывание 6, поскольку команда в реальном режиме не распознается;
    - защищенный режим: особая ситуация 13, сли результат находится в сегменте, запрещенном для записи; при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном режиме.
    Пример:
    LAR AX,BX
    7. Команда ARPL - коррекция поля RPL селектора.
    Синтаксис: ARPL r/m16, r16
    Действие: первый операнд команды - 16-битная переменная в памяти или двухбайтный регистр, который содержит значение селектора. Второй операнд - всегда 16- битный регистр. Если поле RPL (запрашиваемый уровень привилегий, младшие два бита) первого операнда меньше, чем поле RPL второго операнда, то устанавливается флаг ZF, и поле RPL первого операнда увеличивается до значения поля
    RPL второго операнда. В противном случае сбрасывается флаг
    ZF, и первый операнд не изменяется.

    Изменяемые флаги: ZF.
    Особые ситуации:
    - реальный режим: прерывание 6, поскольку команда в реальном режиме не распознается.
    - защищенный режим: особая ситуация 13, если результат находится в сегменте, запрещенном для записи; при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, ES, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном режиме.
    Пример:
    ARPL AX, BX
    8. Команды VERR и VERW – проверка сегмента на возможность чтения или записи.
    VERR (Verify Read) - проверить сегмент на чтение;
    VERW (Verify Write) - проверить сегмент на запись.
    Синтаксис:
    VERR r/m16
    VERW r/m16
    Действие: двухбайтный операнд этих команд содержит значение селектора проверяемого сегмента.
    Команды проверяют, доступен ли сегмент для чтения (VERR) или записи
    (VERW). Если сегмент доступен, то устанавливается флаг ZF, в противном случае флаг ZF очищается. Для того чтобы флаг ZF установился необходимо выполнение следующих условий:
    - селектор должен попадать в пределы таблиц GDT или
    LDT;
    - селектор должен индексировать дескриптор сегмента кода или данных, а не системный дескриптор.
    Использование: значение проверяемого селектора не приводит к возникновению особых ситуаций защиты, предоставляя возможность программному обеспечению выявлять проблемы доступа к сегменту.
    Изменяемые флаги: ZF.
    Особые ситуации:
    - реальный режим: всегда вырабатывается прерывание 6, поскольку команды не распознаются в реальном режиме;

    - защищенный режим: особая ситуация 13 при недопустимом эффективном адресе операнда в памяти в сегментах CS, DS, FS, GS или FS; особая ситуация 12 при недопустимом адресе в сегменте SS; особая ситуация 14 при страничной ошибке;
    - виртуальный режим: то же, что и в реальном; особая ситуация 14 при страничной ошибке.
    Примеры:
    MOV AX, Selector
    VERR AX
    2. ПРЕРЫВАНИЯ И ОСОБЫЕ СИТУАЦИИ В
    МИКРОПРОЦЕССОРАХ х86
    Таблица П1
    ┌─────┬──────────────────┬────────────┬─────────┬─────────────┐
    │Номер│ Название │ Тип │ Код │ Появилось в │
    │ │

    │ ошибки │ процессоре │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 0 │ Ошибка деления │ Ошибка │ Нет │ 8086 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 1 │ Отладка

    │ Нет │ 8086 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 2 │ Немаскируемое
    │ Прерывание │ Нет │ 8086 │
    │ │ прерывание │
    │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 3 │ Точка останова │ Ловушка │ Нет │ 8086 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 4 │ Переполнение
    │ Ловушка │ Нет │ 8086 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 5 │ Проверка границ │ Ошибка │ Нет │ 80186 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 6 │ Неверный код
    │ Ошибка │ Нет │ 80286 │
    │ │ операции │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 7 │ Сопроцессор │ Ошибка │ Нет │ 80286 │
    │ │ недоступен │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 8 │ Двойная ошибка │ Сбой │ Есть (0)│ 80286 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 9 │ Резерв │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 10 │ Неверный TSS
    │ Ошибка │ Есть │ 80286 │
    └─────┴──────────────────┴────────────┴─────────┴─────────────┘
    │ 11 │ Сегмент │ Ошибка │ Есть │ 80286 │
    │ │ не присутствует │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 12 │ Ошибка при работе│ Ошибка │ Есть │ 80286 │

    │ │ со стеком │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 13 │ Общая защита
    │ Ошибка │ Есть │ 80286 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 14 │ Страничная ошибка│ Ошибка │ Есть │ 80386 │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 15 │ Зарезервировано │ │ │ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 16 │ Ошибка │ Ошибка │ Нет │ 80286 │
    │ │ сопроцессора
    │ │ │ │
    ├─────┼─────────────── ──┼────────────┼─────────┼─────────────┤
    │ 17 │ Контроль │ Ошибка │ Есть │ 80486 │
    │ │ выравнивания

    │(всегда0)│ │
    ├─────┼──────────────────┼────────────┼─────────┼─────────────┤
    │ 18 │ Контроль машины │

    │ PENTIUM │
    └─────┴──────────────────┴────────────┴─────────┴─────────────┘
    Прерывания
    10-12,
    14 определены только для защищенного режима.
    1   2   3   4


    написать администратору сайта