Эти регистры можно использовать в любых арифметических, логических и прочих машинных операциях. В то же время каждый из этих регистров имеет определённую специализацию.
Регистры 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, просмотров: 498.