- •Классификация эвм, краткие характеристики суперЭвм, мейнфреймов и мини-эвм
- •Настольная вычислительная система.
- •Классификация процессоров.
- •Регистровая модель процессора x86.
- •Режимы работы процессора 80386.
- •1.Реальный режим
- •2. Защищенный режим
- •Процессор х86: непосредственная и регистровая адресация.
- •Процессор х86: прямая адресация и прямая со сдвигом.
- •Процессор х86: косвенная адресация и косвенная со сдвигом.
- •Процессор х86: регистровая адресация и регистровая с масштабированием.
- •Адресация с масштабированием
- •Размещение в памяти многомерных статических массивов и доступ к их элементам.
- •Размещение в памяти многомерных динамических массивов и доступ к их элементам.
- •Формирование исполнительного адреса из трех и четырех составляющих.
- •Процессор х86: инструкции копирования данных.
- •Процессор х86: инструкции ввода-вывода.
- •Представление целых чисел: прямой код, дополнительный код, bsd.
- •Процессор х86: инструкции сложения, сложения с переносом и сложение чисел в формате bcd.
- •Процессор х86: инструкции вычитания, вычитания с заемом и вычитание чисел в формате bcd.
- •Процессор х86: инструкции умножения.
- •Процессор х86: инструкция деления и операции расширения знакового бита.
- •Процессор х86: поразрядные логические инструкции, использование масок.
- •Процессор х86: инструкции сдвига. Умножение и деление на константы.
- •Процессор х86: инструкции цикла. Ожидание готовности пу с тайм-аутом.
- •Процессор х86: безусловный переход и виды меток.
- •Процессор х86: вызов процедуры; рамка стека функции в с.
- •Процессор х86: инструкции условного перехода.
- •Процессор х86: строковый примитив копирования данных.
- •Процессор х86: строковые примитивы сравнения данных, сканирования данных и заполнения данных.
- •Сегменты реального и защищенного режима. Глобальная и локальная таблицы дескрипторов.
- •Селектор сегмента. Механизм получения линейного адреса в защищенном режиме процессора x86.
- •Механизм преобразования линейного адреса в физический в процессоре x86.
- •Преимущества виртуального отображения страниц и адресное пространство процесса.
- •Формат дескриптора сегмента в процессорах x86. Прикладные сегменты.
- •Формат вентиля вызова и исключения. Область применения вентилей вызова.
- •Основные исключения защиты; обработка исключения отсутствие страницы в памяти.
- •Уровни привилегий и кольца защиты защищенного режима.
- •Аппаратная поддержка многозадачности, формат сегмента состояния задачи - tss.
- •Карта ввода/вывода. Прямой доступ к портам ввода/вывода в Windows и Linux.
- •Методы управления пу
- •Использование буферов при проведении обменов
- •Принципы, заложенные в подсистему управления вводом-выводом в ос unix
- •Система управления данными (файловая система)
- •Логическая организация файлов
- •1. Последовательная организация.
- •2. Библиотечная организация.
- •Физическая организация файлов
- •1. Распределение при помощи цепочек блоков.
- •2. Распределение при помощи цепочек индексов
- •Дескриптор файла (дф)
- •Матрица управления доступом (МтУд)
- •Управление доступом в зависимости от класса пользователей
- •Копирование и восстановление информации
- •Свопинг и пейджинг
- •2. Стратегии подкачки страниц
- •3. Стратегии размещения
Процессор х86: инструкции цикла. Ожидание готовности пу с тайм-аутом.
В процессоре х86 аппаратно реализован цикл со счетным параметром. В качестве счетчика цикла используется регистр ecx. Инструкция цикла имеет мнемокод loop. В нижеследующем примере участок кода, заключенный между меткой lpm и инструкцией loop lpm, будет выполнен 100 раз:
mov ecx, 100
lpm:
. . .
. . .
loop lpm
В ходе выполнения инструкции loop содержимое регистра ecx аппаратно уменьшается на единицу и после этого сравнивается с нулем. Поэтому, если перед началом цикла регистр ecx обнулить, то цикл выполнится 10000000h (4294967296) раз.
В программах, осуществляющих обмен данными с периферийными устройствами для организации тайма-аута используются инструкции цикла с дополнительной проверкой флага нуля loopz и loopnz или их эквиваленты loope и loopne.
При выполнении инструкции loopz/loope переход на метку осуществляется при одновременном выполнении двух условий: содержимое регистра ecx не равно 0 и флаг нуля установлен.
При выполнении инструкции loopnz/loopne переход на метку осуществляется при одновременном выполнении двух условий: содержимое регистра ecx не равно 0 и флаг нуля сброшен.
Процессор х86: безусловный переход и виды меток.
Инструкция безусловного перехода имеет мнемокод jmp, сокращение от jump - прыжок, и имеет один операнд – адрес перехода, задаваемый обычно при помощи метки.
В тексте программы на ассемблере меткой можно пометить любую инструкцию. Для именования меток используются те же правила, что и для задания имен переменных: последовательность из букв и цифр, начинающаяся с буквы. Компилятор создает таблицу меток, в которую помещает идентификаторы меток и адреса инструкций, которые отмечены данными метками, а затем в тексте программы во всех инструкциях управления ходом вычислительного процесса заменяет идентификаторы меток их значениями, т.е. адресами инструкций, на которые будет осуществляться переход. Например, если в тексте программы имеется следующий код, и инструкция, помеченная меткой m1, окажется размещенной по адресу 50637844h, то инструкция jmp m1, будет эквивалентной
jmp 50637844h.
Метки могут быть трех типов: дальние, ближние и короткие. Дальняя метка состоит из двух частей: сегмента и адреса в данном сегменте, ближняя метка содержит адрес в текущем сегменте кода, а короткая – содержит не абсолютный адрес, а относительный. Относительный адрес – это расстояний в байтах до точки перехода, т.е. это число со знаком, которое прибавляется к текущему значению программного счетчика. Дальние метки применялись в основном в 16-разрядном реальном режиме и в настоящее время в прикладном программировании не используются. Поэтому термин «ближняя» вышел из употребления и, когда говорят просто метка, то имеют в виду ближнюю метку. В примере, представленном выше, метка m1 рассматривается как ближняя. Короткие метки позволяют создавать позиционно-независимый код, т.е. код, который можно без изменения адресов перехода поместить в любое место адресного пространства процесса. Современные оптимизирующие компиляторы, как правило, генерируют короткие метки, и, более того, многие операционные системы требуют, чтобы прикладные программы использовали только короткие метки. Таким образом, в нашем примере, если инструкция
mov ebx, b имеет адрес 50637944h, оптимизирующий компилятор сгенерирует инструкцию jmp –100h.
В большинстве вычислительных систем продолжительность выполнения операций in и out составляет около 1 мкс и не зависит от частоты процессора и шины. В приведенном ниже примере проверяется регистр состояния ПУ, в котором готовности устройства соответствует установка в 1 бита № 2. Выход из цикла осуществляется или по готовности устройства или по выполнении заданного количества повторений. На выходе из цикла можно проверить флаг нуля. Если флаг сброшен, то устройство готово, если установлен, то прошло 2 миллисекунды (цикл выполнился 2000 раз), а устройство так и не готово, т.е. время ожидания истекло:
char *ps, srd[]="готово", stm[]="тайм-аут";
. . .
mov ecx, 2000
mov dx, <адр.рег.упр.>
m: in al, dx
test al, 0x04
loopz m
jnz r
lea ebx, stm
jmp c
r: lea ebx, srd
c: mov ps, ebx