- •Курс лекций по дисциплине: «Операционные системы» Введение Определение операционной системы
- •Выполнение программы
- •Флажковый регистр
- •Accемблер пэвм Формат операторов ассемблера
- •Определение полей памяти для размещения данных.
- •Операнды команд ассемблера.
- •3. Команда загрузки исполнительного адреса.
- •4. Команды загрузки указателя.
- •Команда записи в стек.
- •6. Команда восстановления из стека.
- •7. Команды сложения.
- •Команды пересылки / преобразования данных
- •1. Команда пересылки данных.
- •2. Команда обмена данных.
- •14. Команда деления.
- •15. Команда преобразования байта в слово, а слова - в двойное слово.
- •Команды передачи управления.
- •1. Команда безусловного перехода.
- •2. Команды условного перехода.
- •3. Команды организации циклической обработки.
- •4. Команды вызова подпрограмм.
- •Команды обработки строк.
- •Команды манипулирования битами.
- •1. Логические команды.
- •2. Команды сдвига.
- •Команды ввода - вывода.
Выполнение программы
Содержимое регистров СS и IP, в которых хранится базовый адрес сегмента кодов и смещение очередной команды относительно начала сегмента, определяет физический адрес команды, которая должна быть выполнена на следующем шаге.
По указанному адресу из основной памяти считывается команда и пересылается в микропроцессор. Команда длиной от 1 до 8 байт помещается в очередь команд, откуда поступает в устройство управления, где дешифрируется.
Если при выполнении команды требуются данные, расположенные в основной памяти, то специальные полем кода команды определяется способ адресации и вычисляется исполнительный, и затем и физический адрес данных.
Данные, считанные из основной памяти по указанному адресу, пересылаются в регистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается либо в регистры, либо (в соответствии с командой) в какую-либо область основной памяти.
Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае в регистр IP заносится исполнительный адрес команды, которая должна выполняться следующей.
Затем процесс повторяется.
Флажковый регистр
Флажковый регистр микропроцессора i8086, в котором в виде однобитовых признаков по принципу ДА - НЕТ (ВКЛЮЧЕНО - ВЫКЛЮЧЕНО) фиксирует информацию о результатах выполнения некоторых команд, например арифметических.
О - признак переполнения;
D - признак направления;
I - признак прерывания;
Т - признак трассировки;
S - признак знака: 1 - число < 0, 0 - число > 0
Z - признак нуля: 1 - число = 0
А - признак переноса из тетрады;
P - признак четности;
С - признак переноса.
В последующем эта информация может использоваться, например, командами условной передачи управления.
Система прерываний 32-разрядных микропроцессоров 180x86
В микропроцессорах семейства i80x86 система прерываний построена таким образом, чтобы, с одной стороны, обеспечить возможность создавать эффективные и надежные мультипрограммные операционные системы, которые должны функционировать в защищенном режиме, а с другой стороны — обеспечить возможность выполнять программы, разработанные для реального режима. Рассмотрим коротко оба режима.
В реальном режиме работы система прерываний использует понятие вектора прерывания. Термин «вектор прерываний» используется потому, что для указания адреса используется не одно значение, а два, то есть мы имеем дело не со скалярной величиной, а с «векторной».
Итак, каждый вектор прерываний состоит из 4 байтов или 2 слов: первые два содержат новое значение для регистра IP, а следующие два — новое значение регистра CS. Таблица векторов прерываний занимает 1024 байта. Таким образом, в ней может быть задано 256 векторов прерываний. В процессоре 18086 эта таблица располагается на адресах OQOOGH-003FFH. Расположение этой таблицы в процессорах i80286 и старше определяется значением регистра IDTR — Interrupt Descriptor Table Register. При включении или сбросе процессора i80x86 этот регистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и, таким образом, перейти на новую таблицу векторов прерываний.
Таблица векторов прерываний заполняется (инициализируется) при запуске системы, но в принципе может быть изменена или перемещена.
Каждый вектор прерывания имеет свой номер, называемый номером прерывания, который указывает его место в таблице. Этот номер, помноженный на четыре (сдвиг на два разряда влево и заполнение освободившихся битов нулями), и сложенный с содержимым регистра IDTR, дает абсолютный адрес первого байта вектора в оперативной памяти.
Подобно вызову процедуры, прерывание заставляет микропроцессор сохранить в стеке информацию для последующего возврата, а затем перейти к группе команд, адрес которых определяется вектором прерывания. Таким образом, прерывание вызывает косвенный переход к своей подпрограмме обработки за счет получения ее адреса из вектора прерывания.
В IBM PC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние.
Внутренние прерывания, как мы уже знаем, возникают в результате работы процессора. Они возникают в ситуациях, которые нуждаются в специальном обслуживании, или при выполнении специальных инструкций — INT или INTO. Это следующие прерывания:
U прерывание при делении на ноль; номер прерывания — 0;
G прерывание по флагу TF (trap flag). В этом случае прерывание обычно используется специальными программами отладки типа DEBUG, номер прерывания — 1;
Q инструкции INT (interrupt — выполнить прерывание с соответствующим номером) и INTO (interrupt if overflow — прерывание по переполнению). Эти прерывания называются программными. В качестве операнда команды INT указывается номер прерывания, которое нужно выполнить, например INT 10H.
Программные прерывания как средство перехода на соответствующую процедуру были введены для того, чтобы выполнение этой процедуры осуществлялось в привилегированном режиме, а не в обычном пользовательском.
Как известно, прерывания могут быть инициированы внешним устройством ПК или специальной командой прерывания из программы. В любом случае, если прерывания разрешены, то выполняется следующая процедура:
1. В стек помещается регистр флагов.
2. Флаг включения/выключения прерываний IF и флаг трассировки TF, находящиеся в регистре, обнуляются для блокировки других прерываний и исключения пошагового режима исполнения команд.
3. Значения регистров CS и IP сохраняются в стеке.
4. Вычисляется адрес вектора прерывания, и из вектора, соответствующего номеру прерывания, загружаются новые значения IP и CS.
Когда системная подпрограмма принимает управление, она может снова разрешить прерывания командой STI (set interrupt flag, установить флаг прерываний), которая переводит флаг IF в состояние 1, что разрешает микропроцессору вновь реагировать на прерывания, инициируемые внешними устройствами, поскольку стековая организация позволяет вложение прерываний друг в друга.
Закончив работу, подпрограмма обработки прерывания должна выполнить инструкцию IRET (interrupt return), которая извлекает из стека три 16-битовых значения и загружает их в указатель команд IP, регистр сегмента команд CS и регистр PSW соответственно. Таким образом, процессор сможет продолжить работу с того места, где он был прерван.
