- •Классификация эвм, краткие характеристики суперЭвм, мейнфреймов и мини-эвм
- •Настольная вычислительная система.
- •Классификация процессоров.
- •Регистровая модель процессора 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: вызов процедуры; рамка стека функции в с.
Инструкция вызова функции или процедуры имеет мнемокод call и получает в качестве операнда адрес функции. Адрес функции, также как и адрес перехода в инструкции jmp может задаваться непосредственно через имя функции или же через регистр или же прямо или косвенно через ячейку памяти. При выполнении инструкции call, в отличие от инструкции jmp, помимо загрузки программного счетчика новым значением осуществляется аппаратное выталкивание в стек адреса инструкции, следующей непосредственно за call, т.е. той инструкции, которая будет выполнять после завершения функции. Последней инструкцией функции всегда является инструкция выхода из функции ret, которая снимает с верхушки стека хранящийся там адрес возврата и помещает его в программный счетчик. Инструкция ret имеет две формы: безоперандную и однооперандную. Однооперандная инструкция ret использует только непосредственное представление и прибавляет полученный операнд к указателю на верхушку стека, очищая тем самым стек от параметров функции. Передача параметров функции осуществляется как правило через стек. Поэтому перед вызовом функции программа должна при помощи инструкции push вытолкнуть в стек передаваемые ей параметры.
Если используется соглашение по вызовам С, то параметры выталкиваются в стек справа налево, от последнего к первому а функция завершается инструкцией ret без операндов. При этом очистка стека от параметров должна выполняться кодом, который осуществлял вызов функции.
Соглашение по вызовам С создает код чуть большего размера и выполняется чуть дольше, но позволяет использовать функции с переменным количеством параметров.
Вызов функции с использованием не непосредственного представления ее адреса, а через регистр или переменную в памяти используется в тех случаях, когда вызываемая функция неизвестна на момент написания программы и будет определяться в ходе ее выполнения. Такая ситуация типична при вызове виртуальных функций. Поскольку виртуальные функции имеют одинаковые сигнатуры, то код вызова такой функции готовит стек, отыскивает нужный адрес в таблице виртуальных методов и загружает его в регистр ebx, затем вызывает функцию через регистр и очищает стек, при необходимости извлекает из аккумулятора значение, возвращаемое функцией.
Процессор х86: инструкции условного перехода.
Инструкции условного перехода имеют мнемокод jX, где X задает условие, при выполнении которого, происходит переход на метку, если условие не выполняется, то переход не осуществляется и выполняется инструкция, следующая непосредственно за инструкцией условного перехода. В инструкциях условного перехода используются только короткие метки.
Условие – это состояние регистра флагов. Поэтому инструкции условного перехода, как правило, следуют непосредственно за инструкциями, при выполнении которых состояние регистра флагов изменяется. Проверяться может состояние как одного флага, так и нескольких. Если требуется проверить один флаг, то его буква помещается в мнемокод инструкции условного перехода. Кроме того, перед буквой флага может стоять префикс n, обозначающий обратное условие, т.е. инструкция jF проверяет установлен ли флаг F, а инструкция jnF – сброшен ли флаг F.
jc Переход, если установлен флаг переноса
jnc Переход, если сброшен флаг переноса
jz Переход, если установлен флаг нуля
jnz Переход, если сброшен флаг нуля
je Переход, если установлен флаг нуля
jne Переход, если сброшен флаг нуля
Jo Переход, если установлен флаг переполнения
jno Переход, если сброшен флаг переполнения
Js Переход, если установлен флаг знака
jns Переход, если сброшен флаг знака
В реальных программах очень часто встречаются инструкции условного перехода по результатам сравнения чисел. Например, if(a>b) then c:=12 else c:=0; . На ассемблере сравнение целых чисел осуществляется путем их вычитания с последующей проверкой флагов z,c и s. Причем выполнению условия > для знаковых и беззнаковых операндов будут соответствовать различные комбинации флагов c и s. Это же относится и к условиям < , >= , <= . Поэтому в набор команд процессора х86 внесли специальные инструкции условного перехода по результатам сравнения знаковых и беззнаковых чисел, проверяющие за один прием состояние нескольких флагов. В мнемокодах этих инструкций используются следующие буквы:
e Знаковые и беззнаковые = =
g Знаковые >
l Знаковые <
ge Знаковые >=
le Знаковые <=
a Беззнаковые >
b Беззнаковые <
ae Беззнаковые >=
be Беззнаковые <=
Кроме того, перед буквами условий, также как и перед буквами флагов, может стоять префикс n. В результате получается следующий набор инструкций, причем почти каждой машинной инструкции будет соответствовать 2 варианта мнемонического обозначения.
Вариант1 Вариант 2
je -
- jne
jg jnle
gl jnge
jge jnl
jle jng
ja jnbe
jb jnae
jae jnb
jbe jna
Поскольку для инструкций условного перехода значение имеет не результат вычитания, а состояние флагов, то непосредственно перед инструкциями перехода обычно размещается не инструкция sub, а инструкция cmp, которая не изменяет содержимое приемника, а только устанавливает флаги по результатам вычитания.
В инструкциях условного перехода используются только короткие метки.