Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЭВМ и ПУ.doc
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

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

Для 16-разрядных микропроцессоров регистр флагов имеет размер 16 битов и использует в реальном режиме работы 9 флагов: 6-статусных флагов (отражают результаты арифметических и логических операций) и 3-управляющих флага (изменяют режим работы процессора).

Начиная с микропроцессора 80386 регистр флагов имеет размер 32-бита, но в реальном режиме используются тоже только 9 флагов из младшего слова:

CF - флаг переноса, указывает на арифметический перенос разряда. CF также может содержать значение бита, который при сдвиге или циклическом сдвиге вышел за границы регистра. CF=1, если перенос был (0 разряд).

PF - флаг четности, указывает на четность единичных разрядов в результате операции. Используется в основ­ном в операциях обмена данными (2 разряд).

AF - вспомогательный флаг переноса, указывает на корректировку, необходимую при двоично-десятичных арифметических операциях (фиксирует факт переноса из младшего полубайта в старший полубайт). Упакованное число - 2 цифры в байте. В микропроцессоре нет десятичного сумматора. Сложение и вычитание десятичных чисел производится как сложение и вычитание двоичных чисел. Результат может быть неверным десятеричным числом, поэтому существуют команды преобразования результата в правильное десятеричное число. Чтобы это сделать, надо знать, был ли перенос (4 разряд).

ZF - флаг нуля. Указывает на нулевой результат или равенство при сравнении (6 разряд).

SF - флаг знака. Указывает на отрицательный результат в арифметической операции, логической, операциях сдвига или циклического сдвига (7 разряд).

OF - флаг переполнения. Указывает на арифметическое переполнение при операции (выход за пределы допустимых значений) (11 разряд).

TF - флаг трассировки (ловушки). Управляет одношаговыми операциями (при использовании отладчика), генерируя программные прерывания в конце каждой команды (8 разряд).

IF - флаг прерываний. Управляет разрешением и запретом прерываний от внешних устройств. Блокирует все прерывания, за исключением немаскируемых прерываний (NMI) (9 разряд).

DF - флаг направления. Управляет направлением влево и вправо в операциях со строками. При DF=1 микропроцессор уменьшает на 1 содержимое регистров индекса SI и DI после выполнения команды, а при DF=0 увели­чивает на 1 содержимое регистра индексов (10 разряд).

Регистр флагов не имеет имени, однако, часто 16-разрядный регистр флагов называют FLAGS, а 32-разрядный регистр флагов - EFLAGS.

Формат 16-разрядного регистра флагов

16

11

10

9

8

7

6

4

2

0

OF

DF

IF

TF

SF

ZF

AF

PF

CF

2.4.Режимы адресации

Обычно выделяют семь режимов адресации, которые определяют способ вычисления смещения адреса операнда :

Регистровая адресация.

Непосредственная адресация.

Прямая адресация.

Косвенная регистровая адресация.

Базовая адресация.

Прямая адресация с индексированием.

Базовая адресация с индексированием.

2.4.1.Регистровая адресация.

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

Примеры использования регистровой адресации:

MOVAX,CX

ADDAX,BX

2.4.2.Непосредственная адресация

При таком способе адресации операндом - источником является непосредственное значение (константа).

Пример использования непосредственной адресации:

MOVCX, 5 илиKEQU-8

MOV CX, K

2.4.3.Прямая адресация

При прямой адресации смещение адреса операнда (исполнительный адрес) содержится в самой команде, например:

.data

T DB 3

.code

MOV AL, T

Т - имя ячейки памяти , значение которой загружается в регистр AX.

2.4.4.Косвенная регистровая адресация

В данном случае регистр содержит не значение операнд, а его смещение в памяти. При этом для адресации операнда могут использоваться регистры BX, DI и SI, если операнд берется из сегмента данных (DS). Регистр ВР используется для косвенной адресации, если операнд находится в сегменте стека (SS). При использовании команд работы с цепочками регистр DI всегда адресует операнд в дополнительном сегменте памяти (ES).

Начиная с микропроцессора 80386 для косвенной регистровой адресации могут быть использованы все 32-разрядные регистры общего назначения: EAX, EBX, ECX, EDX.

Примеры использования косвенной регистровой адресации:

MOVAX,[BX].

Смещение адреса может быть загружено в регистр при помощи операции OFFSET, а адрес сегмента - операцией SEG.

MOV BX, OFFSET T

MOV DS, SEG T

Если требуется, можно изменить адрес сегмента ячейки памяти, используя префикс сегмента, например:

MOV AX, ES:[BX] - пересылает в AX операнд, адрес которого складывается из содержимого регистров ES и BX.