Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АЭВМ(Ответы).doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
8.77 Mб
Скачать

Регистры сегментов

Ранее уже говорилось, что в ЭВМ, сконструированных на базе микропроцессоров 8086 и 8088, программы и данные хранятся в отдельных областях памяти. Эти области (или сегменты) могут иметь объем до 64 Кбайт. Микропроцессор 8088 может иметь дело одновременно с четырьмя сегментами. Начальные адреса этих сегментов содержатся в его четырех регистрах сегментов. Эти регистры выполняют следующие функции:

регистр сегмента команд CS (code segment) указывает на сегмент, содержащий текущую исполняемую программу. Для вычисления адреса следующей исполняемой команды микропроцессор 8088 добавляет к содержимому регистра CS (умноженному на 16) содержимое указателя команд IР;

регистр сегмента стека SS (stack segment) указывает на текущий сегмент стека. Стек представляет собой область памяти, используемую для временного хранения данных и адресов. Микропроцессор 8088 использует стек для хранения адреса возврата из текущей подпрограммы, но стек можно использовать также для восстановления содержимого регистров, изменяемых при работе программы;

регистр сегмента данных DS (data segment) указывает на текущий сегмент данных, обычно содержащий используемые в программе переменные;

регистр дополнительного сегмента ES (extra segment) указывает на текущий дополнительный сегмент, который используется при выполнении операций над строками.

Применение сегментных регистров, по существу, разделяет пространство памяти на перекрывающиеся сегменты, каждый из которых имеет размер 64К байт и начинается на 16-байтной границе (называемой границей параграфа), т.е. начинается с адреса, кратного 16. На рис.4 показаны возможные варианты расположения сегментов в физической памяти.

Наличие сегментных регистров обеспечивает следующие преимущества:

емкость памяти может доходить до 1М байт, хотя команды оперируют 16-битными адресами;

секции кода, данных и стека могут иметь длину более 64К байт благодаря использованию нескольких сегментов кода, данных или стека;

упрощается использование отдельных областей памяти для программы, ее данных и стека;

при каждом выполнении программы она сама и(или) ее данные могут размещаться в различных областях памяти.

Регистры указателей и индексов

Для вычисления адреса команды в сегменте команд микропроцессор 8088 извлекает номер блока памяти из регистра CS, а смещение - из регистра IP. Подобным образом за счет выбора номера блока из соответствующего регистра сегмента, а смещения - из другого регистра осуществляется доступ к данным других сегментов. Для доступа к сегменту данных микропроцессор 8088 извлекает номер блока из регистра DS, а смещение - из регистра BX или индексного регистра (SI или DI). Для доступа к сегменту стека микропроцессор 8088 извлекает номер блока из регистра SS, а смещение - из регистра указателя (SP или BP). Выбирая номер блока из регистра ES, микропроцессор может также получить доступ к дополнительному сегменту.

Указатель команд

Большинство микропроцессоров выполняют программу следующим образом: извлекают из памяти очередную команду, исполняют ее, затем извлекают следующую команду и т.д. Этот подход (при котором цепочка действий выполняется последовательно), естественно, приводит к простоям, так как микропроцессор должен перед исполнением команды подождать ее извлечения из памяти. В микропроцессоре 8088 большая часть этих простоев исключается за счет того, что эти две задачи - извлечение команды и ее исполнение - выполняются отдельными специализированными компонентами микросхемы.

Так как микропроцессор 8088 работает столь необычным образом, то специалисты фирмы Intel подчеркнули отличие своего регистра "следующего исполняемого адреса" от регистров "следующего извлекаемого адреса" других производителей микропроцессоров, назвав его указателем команд (IP – instruction pointer) вместо обычного счетчика команд (PC – program counter). Так как регистр IP имеет столь специфическое назначение, то нельзя выполнять арифметические операции над его содержимым. Однако микропроцессор 8088 имеет команды, одни из которых изменяют содержимое регистра IP, а другие помещают его в стек и извлекают обратно.

Флаги

В программе нередко требуется принять решение на основании результата только что исполненной микропроцессором 8088 команды. Например может понадобиться выполнить одни действия, если результат сложения оказался нулем (например, напечатать. "Баланс равен нулю!" в программе для бухгалтерских расчетов), и совсем другие действия в противном случае.

В 16-битовом регистре флагов фиксируется информация о текущем состоянии дел, которая может помочь Вашей программе принять решение. Шесть битов регистра служат для хранения состояний, а три других могут быть использованы для программного управления режимом работы микропроцессора 8088.

OF

DF

IF

TF

SF

ZF

AF

PF

CF

На рис.5 показано, как эти девять флагов размещены в регистре флагов. Флаги имеют следующие значения:

1.Бит 0, флаг переноса CF(carry flag), равен 1, если произошел перенос единицы при сложении или заем единицы при вычитании. В противном случае он равен нулю. Кроме того, CF содержит значение бита, который при сдвиге или циклическом сдвиге регистра или ячейки памяти вышел за их границы, и отражает результат операции сравнения. Наконец, СР служит индикатором результата умножения; детали см. в описании бита 11 (OF).

2.Бит 2, флаг четности PF (parity flag), равен 1, если в результате операции получено число с четным числом единиц в его битах. В противном случае он равен нулю. Флаг PF в основном используется в операциях обмена данными.

3. Бит 4, вспомогательный флаг переноса AF (auxiliary carry flag), аналогичен флагу CF, только контролирует перенос или заем для третьего бита данных. Полезен при выполнении операций над упакованными десятичными числами.

4. Бит 6, флаг нуля ZF (zero flag),равен 1, если в результате операции получен нуль; ненулевой результат сбрасывает ZF в нуль.

5. Бит 7, флаг знака SF (sign flag), имеет значение только при операциях над числами со знаком. Флаг SF равен 1, если в результате арифметической или логической операции, сдвига или циклического сдвига получено отрицательное число. В противном случае он равен нулю. Иными словами, SF дублирует старший (знаковый) бит результата независимо от того, имеет результат длину 8 или 16 битов.

6. Бит 8, флаг трассировки TF (trap flag), разрешает микропроцессору 8088 исполнять программу "по шагам" и используется при отладке программ.

7. Бит 9, флаг прерывания IF (interrupt enable flag), разрешает микропроцессору 8088 реагировать на прерывания от внешних устройств. Сбрасывание IF в нуль заставляет микропр-р 8088 игнорировать прерывания до тех пор, пока IF не станет равным 1.

8. Бит 10, флаг направления DF (direction flag), заставляет микропроцессор 8088 уменьшать на единицу (DF =1) или увеличивать на единицу (DF= 0) регистр(ы) индекса после выполнения команды для работы со строками. Если DF = 0, то микропроцессор 8088 будет обрабатывать строку "слева направо" (от младших адресов к старшим). Если DF = 1, то обработка пойдет в обратном направлении (от старших адресов к младшим или справа налево).

9. Бит 11, флаг переполнения OF (overflow flag), в первую очередь служит индикатором ошибки при выполнении операций над числами со знаком. Флаг OF равен 1, если результат сложения двух чисел с одинаковым знаком или результат вычитания двух чисел с противоположными знаками выйдет за пределы допустимого диапазона значений операндов. В противном случае он равен 0. Кроме того, OF = 1, если старший, (знаковый) бит операнда изменился в результате операции арифметического сдвига. В противном случае он равен 0. В сочетании с флагом CF флаг OF указывает длину результата умножения. Если старшая половина произведения отлична от нуля, то OF и CF равны 1; в противном случае оба эти флага равны 0.

Наконец, OF = 0, если частное от деления двух чисел переполняет результирующий регистр.

На рис.6 заштрихованы позиции неиспользуемых битов (1, .3, 5 и 12 - 15). У микропроцессора 8088 есть команды условной передачи управления, которые проверяют состояния флагов переноса CF, четности PF, нуля ZF, знака SF и переполнения OF. В зависимости от результата проверки выполнение программы продолжается либо со следующей команды, либо с некоторой другой ячейки памяти.