Регистры указателей и индексов являются неделимыми. К ним относятся указатель стека SP, указатель базы BP, индекс источника SI и индекс приемника DI (рис. 9). Они используется для модификации адресов. Если в команде операнд извлекается из памяти, то сослаться на него можно, указав некоторый адрес и некоторый регистр. В этом случае команда работает с исполнительным адресом, который вычисляется как сумма адреса, указанного в команде, и текущего значения указанного регистра. Из ячейки с таким адресом команда и будет извлекать операнд. Замена адреса, указанного в команде, на исполнительный адрес называется модификацией адреса, а используемый регистр – регистром-модификатором.
Рис. 9. Регистры указателей и индексов.
Выгода от такого способа задания операнда заключается в том, что, меняя значение регистра, можно одну и ту же команду использовать для работы с разными ячейками памяти (например, при обработке массивов при доступе к разным элементам). Модификаторами могут быть только регистры ВХ, ВР, SI и DI. Модифицировать адрес можно не только по одному регистру, но и по двум сразу, в этом случае разрешено использовать не любую пару модификаторов, а только такую, где один из регистров – ВХ или ВР, а другой – SI или DI.
Регистры SI и DI используются также для поддержки цепочечных операций, т.е. операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит. Регистр SI содержит текущий адрес элемента в цепочке-источнике, а DI – текущий адрес в цепочке-приемнике.
Регистр SP используется при работе со стеком. В стековых командах предполагается, что регистр SP указывает на ячейку памяти, в которой находится элемент, записанный в стек последним.
Сегментные регистры предназначены для сегментирования адресов. К ним относятся сегментные регистры кода CS, данных DS, стека SS и дополнительный сегментный регистр ES (рис. 10). В регистре CS должен находиться начальный адрес сегмента команд – области памяти, где расположены команды. Регистр DS должен указывать на начало сегмента данных, в котором размещаются данные. Регистр SS должен указывать на начало области памяти, отведенной под стек.
В результате при ссылках на сегменты команд, данных и стека можно явно не указывать в командах соответствующие сегментные регистры, они будут подразумеваться по умолчанию. Дополнительный сегментный регистр ES может быть настроен на работу с любым сегментом. В микропроцессоре 386 и выше появились еще два сегментных регистра FS и GS.
Команды работают с исполнительным адресом, который совместно с содержимым сегментных регистров, участвует в формировании физического адреса.
Рис. 10. Сегментные регистры.
Do'stlaringiz bilan baham: |