AX, BX, CX, DX, флаговый регистр.




Флаги состояния. Управляющие флаги.

Процессоры i8086 и i8088 имели 14-цать программно-доступных 16-тиразрядных регистров. (Последние модели CPU включают в свой состав регистры с разрядностью до 128 (256) бит, и общее количество регистров достаточно велико.)

Четыре регистра из 14-ти являются регистрами общего назначения. В основном они используются для выполнения операций над данными. Т.е. их содержимое можно складывать, вычитать, сравнивать, умножать друг на друга и т.д. К ним относятся:

AX – (X – сокращение от extended, т.е. расширенный).Наиболее часто используют как аккумулятор – место, где накапливают результаты вычислений. Многие команды занимают меньше места в ОП и выполняются быстрее, если один из операндов находится в регистре AX. Операции ввода/вывода осуществляют только через этот регистр.

 

AH AL AX
15 High 8 7 Low 0

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

 

BH BL BX
15 High 8 7 Low 0

CX – обычно используется как регистр счетчика (counter). В нем хранят число, показывающее, сколько раз должна быть повторена некоторая операция. Когда число повторений достигает заранее определенного значения, в программе происходит передача управления в другую точку. Счетчиком может быть любой РОН, но только с регистром CX необходимые сравнения и переход осуществляются за одну инструкцию.

 

CH CL CX
15 High 8 7 Low 0

DX – регистр данных (data). Иногда он используется для хранения адреса порта. Иногда используется в паре с регистром AX для хранения 32-разрядного числа, получающегося, например, при умножении 2-х 16-тиразрядных чисел. (AX и DX выступают в качестве неявных операндов в операциях умножения и деления).

 

DH DL DX
15 High 8 7 Low 0

 

Итак, AX, BX, CX, DX включают в группу регистров данных. Если инструкция оперирует только с одним байтом данных, то этот байт может находиться в любой половине регистра данных, при этом содержимое второй половины после выполнения инструкции не изменяется. Когда требуется обратиться к одной из 8-миразрядных частей регистра, то младшие (правые) именуют AL, BL, CL, DL, а старшие (левые) AH, BH, CH, DH.

Регистр флагов (flags register).

 

Этот регистр эквивалентен регистру слова состояния процессора других вычислительных систем. Этот регистр содержит информацию о текущем состоянии процессора. Рассматривают его не как единое целое, а как набор 16-ти отдельных битов, каждый из которых указывает на определенный факт. Он включает 6 флагов состояний и 3 флага управления состоянием CPU.

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

 

        OF DF IF TF SF ZF   AF   PF   CF

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

 

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

CF (Carry Flag) – Флаг переноса. Устанавливается в 1 при возникновении переноса в результате выполнения арифметических операций. Перенос – ситуация, когда в результате выполнения верной операции получается число, не помещающееся в регистр или ячейку памяти. (При сложении – перенос из старшего разряда, при вычитании – заем в старший разряд устанавливают флаг CF).

PF (Parity Flag) – Флаг паритета. Устанавливается в 1, если в младшем байте результата выполнения операции содержится четное число двоичных единиц, иначе флаг сбрасывается в 0. Используется для поиска ошибок при передаче данных.

AF (Auxiliary Flag) – Флаг вспомогательного переноса. Используется в операциях над двоично-десятичными числами (BCD – формат). Устанавливается в 1, если при выполнении операции возникает перенос между младшими тетрадами (из разряда 3 в разряд 4) обрабатываемых операндов. Эта ситуация требует коррекции результата. Перед выполнением операций коррекции результата осуществляется анализ флага AF.

ZF (Zero Flag) – Флаг нуля. Устанавливается в 1, если результат операции равен 0, иначе флаг сбрасывается в 0.

SF (Sign Flag) – Флаг знака. Принимает значение старшего (знакового) разряда результата операции. SF=1, если число отрицательное, и SF=0, если число положительное. Следовательно, флаг учитывают при работе со знаковыми операндами.

OF (Overflow Flag) – Флаг переполнения. Устанавливается в 1, если происходит переполнение разрядной сетки при обработке операндов со знаком. Такая ситуация возникает в случае выхода результата за пределы допустимого диапазона значений для чисел со знаком. Положительные числа находятся в диапазоне 0000h – 7FFFh, отрицательные – в диапазоне 8000h – FFFFh (числа с установленным старшим битом). Т.О., если при сложении двух положительных чисел результат превышает число 7FFFh, или при вычитании из отрицательного числа результат получается меньше 8000h, флаг OF устанавливается в 1. Операцию вычитания из отрицательного числа можно рассматривать, как операцию сложения двух отрицательных чисел. Следовательно, можно сказать, что флаг OF определяется при сложении двух операндов, имеющих одинаковые знаки.

 

Управляющие флаги:

DF (Direction Flag) - Управляющий флаг направления. Устанавливается пользователем и задает порядок обработки строк символов при выполнении соответствующих команд. При DF=0 строка обрабатывается в прямом направлении от младших адресов к старшим (вызывает автоматический инкремент индексных регистров SI, DI). При DF=1 – наоборот – декремент индексных регистров и обработка строк ведется в обратном направлении от старших адресов к младшим.

TF (Trace Flag) – Управляющий флаг трассировки (ловушки). При TF=1 процессор переключается в режим пошагового выполнения команд с реализацией после каждой команды соответствующего прерывания. Используется в отладчиках.

IF (Interrupt Flag) – Управляющий флаг прерываний. При IF=1 процессору разрешено обслуживание запроса на прерывания от внешних устройств. При IF=0 прерывание хода выполнения программы запрещено.


Указатель команд (инструкций)

(IP – Instruction Pointer)

Хранит относительный адрес, по которому в RAM находится инструкция, следующая за исполняемой. Фактически этот регистр «следит» за ходом выполнения программы. Наращивание адреса выполняет CPU, в зависимости от длины текущей команды. Значение, хранящееся в IP, может изменяться в зависимости от структуры программы. Команды условных и безусловных переходов, циклов, вызова подпрограмм и т.д. изменяют содержимое IP, осуществляя переходы к требуемой точке команды. Разрядность регистра IP - 16 бит.

 

Регистры указатели

К ним относятся индексные регистры:

 

SI – Source ( Источник )

DI – Destination ( Приемник )

Используются в основном при перемещении цепочек данных (многобайтных последовательностей произвольной длины), но могут использоваться и произвольным образом. Основное их назначение – хранить индексы (смещения) относительно некоторой базы, (т.е., начала массива) при выборке операндов из памяти.

 

Регистр SI – регистр индекса источника (source index register). Он содержит относительный адрес начала цепочки, которую следует переместить.

Регистр DI – регистр индекса приемника (destination index register). Содержит относительный адрес, по которому нужно переместить цепочку. Число перемещаемых байт обычно хранится в регистре CX (счетчике). Кроме операций по перемещению цепочек данных, индексные регистры используют и для адресации внутри массивов числовых данных. Адрес базы при этом может находиться в базовых регистрах BX или BP (base pointer). Т.о., в этих регистрах хранится сегментная часть адреса.

Указатель стека

(SP – Stack Pointer)

Используется только как указатель вершины стека. В любом случае регистры BP и SP используются для указания на начало области памяти отведенной под стек, т.к. BP выступает как указатель базы при работе с данными в стековой структуре.

 

Сегментные регистры

Эти регистры используются только! при работе с адресами. Это важнейшие элементы в архитектуре CPU, т.к. обеспечивают 20-ти разрядную адресацию адресного пространства с помощью 16-ти разрядных операндов.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: