Регистры указателей и индексов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

     Эти регистры можно использовать в любых арифметических, логических и прочих машинных операциях. В то же время каждый из этих регистров имеет определённую специализацию.

     ŸРегистры SI и DI в совокупности с BP и BX можно использовать для изменения (модификации) адресов памяти в командах пересылки и сравнения.

     ŸРегистр SР используется для работы со стэком. В нем хранится адрес вершины стэка.

     ŸРегистр BP используется для модификации адресов ячеек стэка.

Стек-это  адресуемый специальным образом сегмент памяти. Он ис­пользуется для временного хранения содержимого регистров и любых словных переменных, сохранения адреса возврата при вызове процедур, передачи параметров вызыва­емым подпрограммам. Легче всего представить стек в виде стопки листов бумаги (это одно из значений слова «stack» в английском языке) - вы можете класть и забирать листы только с вершины стопки. Поэтому, если записать в стек числа 1, 2, 3, то прочтутся они в обратном порядке-3, 2, 1. Стек располагается в сегменте па­мяти, описываемом регистром SS, а текущее смещение (относительный адрес) вершины стека отражено в регистре SP. Причем во время записи значение этого смещения уменьшается, то есть он «растет вниз» от максимально возможного адреса, до минимального. При вызове подпрограммы параметры основной программы  помещаются  в стек, а в ВР записывают текущее значение SP. Если подпрограмма использует стек для хранения локальных переменных, то SP изменится, но ВР можно будет ис­пользовать для того, чтобы считывать значения параметров напрямую из стека (их смещения запишутся как ВР + номер параметра).

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

     Регистр IP - в этом регистре находится относительный адрес той команды, которая должна быть выполнена процессором следующей за исполняемой. Содержимое  IP изменяется после дешифрации очередной команды, на величину равную количеству байт, отведенных в памяти для хранения этой команды. Исполнительный (физический) адрес команды определяется с помощью регистров CS и IP следующим образом:

           CS × 10Н + IP = АЕ.

 Из формулы видно, что изменение содержимого регистра IP, приводит к  переходу на другую команду, а изменение содержимого CS, означает переход в другую программу, или область памяти. Поэтому содержимое CS изменяется программистом или операционной системой только специальными командами.

Регистр флагов EF

     Специальный шестнадцатибитовый регистр, (рисунок 1.4) у которого каждый бит это флаг, то есть указатель, принимающий значение 1 (флаг установлен), или значение 0 (флаг сброшен), в зависимости от результата операции.

15  14 13  12 11 10 9  8 7 6    5 4 3  2      1     0

X X X X OF DF IF TF SF ZF X AF X PF X CF

Рисунок 1.4 - Регистр флагов

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

Флаги состояний

     Ÿ CF (Carry flag) – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос из старшего разряда регистра или требуется заём (при вычитании), в противном случае – в 0.

     Ÿ PF (parity flag) – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число бит, равных 1, и в 0-ecли нечетное. Это не то же самое, что делимость на два. Число делится на два без остатка, если его младший бит равен нулю, и не делится, когда равен 1.

     ŸAF (Auxiliary carry flag) – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически коман­дами двоично-десятичной коррекции.

     ŸZF (Zero flag) – флаг нуля. Устанавливается в 1, если результат предыдущей команды равен нулю.

     ŸSF (Sign flag) –  флаг знака. Он всегда равен старшему биту результата.

     ŸОF (overflow flag) – флаг переполнения. Он устанавливается в 1, если результат предыду­щей арифметической операции превысит одно или двухбайтовый диапазон для чисел со знаком. Например, если при сложении двух положительных чисел получается число, у которого старший бит равен единице, то есть отрица­тельное, и наоборот.

Флаги управления

ŸTF (Trap flag) – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды, управление временно передается отладчику программ.

     ŸIF (Interrupt flag) – флаг прерывании. Сброс этого флага в 0 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств (описание команды INT). Обычно его сбрасывают на короткое время для выполнения критических участков программ.

     ŸDF (Direction flag) – флаг направления. Контролирует поведение команд обработки строк. Когда он установлен в 1, индексные регистры, адресующие источник и приемник, после выполнения команды, уменьшаются на единицу. Это означает, что строки обрабатываются в сторону уменьшения адресов. Когда DF = 0 индексные регистры увеличиваются на единицу, и строки обрабатываются от старших адресов к младшим.

Дата: 2018-11-18, просмотров: 504.