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




Универсальные регистры

Наиболее часто программист оперирует регистрами общего назначения (РОН). К ним относятся регистры AX, BX, CX, DX, а в процессорах, начиная с Intel 80386 и выше – EAX, EBX, ECX, EDX. Регистры ЕхХ – 32-разрядные, хХ – 16-разрядные. Каждый из последних в свою очередь состоит из двух 8-битовых регистров xL и xH. Нижеприведенный рисунок иллюстрирует общую структуру РОН на примере регистра АХ.

AH AL

AX

 
 


EAX

Рисунок 4.4. Общая структура РОН

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

- регистры АН, ВН, СН, DH - старшие байты (Hight);

- регистры AL, BL, CL, DL - младшие байты (Low) соответствующих 2-ух байтовых регистров.

Регистры AL, АН образуют соответственно младший и старший байты условного регистра АХ.

Всеми этими регистрами можно пользоваться при программировании, но ряд команд использует их неявным способом. Например:

регистр АХ, аккумулятор, используется при умножении и делении слов, в операциях ввода-вывода и в некоторых операциях над строками;

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

регистр АН используется при умножении и делении байтов;

регистр ВХ, базовый регистр, часто используется при адресации данных в памяти; регистр СХ, счетчик, используется как счетчик числа повторений цикла и в качестве номера позиции элемента данных при операциях над строками. Регистр CL используется как счетчик при операциях сдвига и циклического сдвига на несколько битов;

регистр DX, регистр данных, используется при умножении и делении слов. Кроме этого используется в операциях ввода-вывода как номер порта.

 

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

Регистры указателей также, как и сегментные регистры, предназначены для хранения составных частей адресов.

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

Регистр SP хранит значение смещения, которое вместе с регистром SS указывает на текущее слово в стеке.

Регистр BP обрабатывает ссылочные параметры (данные и адреса), которые передаются между программой и подпрограммой (процедурой) через стек. Также, как и другие регистры указателей, ВР содержит смещение. Процессор сочетает это смещение с адресом в SS.

Регистры индексов SI и DI используются для индексированной адресации, а также в строковых операциях.

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

Для доступа к сегменту данных процессор извлекает номер блока из регистра DS, а смещение из регистра ВХ или индексного регистра - SI или DI.

Следует отметить, что регистр ВХ – единственный из РОН – можно использовать в качестве указателя (индекса) для расширения адресации. С это целью он может использоваться в сочетании с регистрами SI и DI.

 

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

Регистр флагов представляет собой 16-битовый регистр, где фиксируется информация о текущем состоянии процессора.

15 0

                OF DF IF TF SF ZF     AF     PF     CF

Рисунок 4.5. Регистр флагов

Флаг OF называется флагом переполнения и его значение, равное 1, свидетельствует о наличии ошибки в операциях над числами со знаком.

Флаг DF называется флагом направления, используется в командах работы со строками. При DF=1 регистр индекса, используемый в командах работы со строками увеличивается на 1 при каждом следующем выполнении команды, при DF=0 - регистр индекса на 1 уменьшается.

Флаг IF называется флагом прерывания. Обычно он устанавливается в 1 и такое его значение позволяет исполняемой программе пользователя реагировать на прерывания. Однако, когда вызывается программа обработки прерывания, флаг IF устанавливается в 0, чтобы никакие другие прерывания не могли помешать текущей обработке прерывания.

Флаг TF называется флагом трассировки, при его значении, равном 1, разрешается выполнение программы по шагам.

Флаг SF называется флагом знака и в соответствии со своим названием устанавливается в 1, если в результате выполнения операции над числами со знаком, получается отрицательное число.

Флаг ZF называется флагом нуля. Этот флаг устанавливается, если результатом операции является нулевое значение (если результат выполненной перед проверкой флага операции равен 0, флаг устанавливается в 1).

Флаг AF называется флагом вспомогательного переноса. Используется в двоично-десятичной арифметике. Этот флаг устанавливается в 1, если арифметическая операция приводит к заему или переносу четвертого справа бита однобайтового операнда (иначе говоря, этот флаг содержит бит, переносимый из третьего бита в четвертый бит в специализированных арифметических операциях).

Флаг PF называется флагом четности, он устанавливается в 1, если результат операции имеет четное количество 1 в двоичном представлении результата.

Флаг CF называется флагом переноса и в него заносится перенос (или заем) из знакового (старшего) разряда числа (это заем или перенос за пределы разрядной сетки представления числа).

Нужно уяснить, что не все команды программы на Ассемблере устанавливают в 0 или в 1 флаги. Причем, выполнение тех или иных команд связано с установкой конкретных флагов. Обратите внимание на это обстоятельство при изучении команд Ассемблера.

Еще раз обращаю внимание на формирование физического адреса в памяти компьютера.

Изучаемый микропроцессор имеет 1 Мбайт памяти ОЗУ. Следовательно, для указания адреса информации в команде микропроцессора должен был иметь 20 разрядов. Однако такое количество разрядов микропроцессора не может обработать за 1 операцию 16-битового процессора. Чтобы разрешить это противоречие, было решено формировать физический адрес из 2-х 16-битовых слагаемых: базы (содержимое регистра сегмента) и смещения по правилу:

Физический Адрес = смещение (IP) +1б*(регистр сегмента -CS).

В действительности длинная операция умножения при вычислении физического адреса не выполняется по той причине, что микропроцессор использует содержимое 16-битового регистра так, как если бы оно имело 4 дополнительных нулевых бита 0010->0100(*2)->1000(*4)->10000(*8)->100000(*16).

Например, пусть смещение будет 10Н (в шестнадцатеричной системе счисления), а адрес начала размещения сегмента (содержимое регистра сегмента) равно 2000Н. Тогда,

0000 0000 0001 0000 (смещение)

+0010 0000 0000 0000 0000 (номер блока)

___________________________________________

0010 0000 0000 0001 0000 (физический адрес)

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

 



Поделиться:




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

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


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