<<
>>

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

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

Помимо локальных переменных, в стеках хранятся временные результаты выполнения.

В процессоре 8088 есть команда PUSH, которая помещает 16-разряд- ное слово на вершину стека. Для этого она сначала уменьшает значение регистра SP на 2, а затем сохраняет свой операнд по адресу, на который этот регистр указывает после обновления. Команда POP удаляет 16-разрядные слова с вершины стека аналогичным образом — выбирает размещенное на этой вершине значение и прибавляет к содержимому регистра SP двойку. Регистр SP, указывающий на вершину стека, можно изменить командами PUSH, POP и CALL; при этом PUSH и CALL уменьшают его значение, a POP, наоборот, увеличивает.

Следующий регистр в этой группе называется указателем базы (ВР). Обычно в него записывается некий адрес в стеке.

В отличие от регистра SP, который всегда указывает на вершину стека, ВР может указывать на любое место в стеке. Чаще всего регистр ВР применяется для указания на начало стекового фрейма текущей процедуры; тем самым упрощается задача поиска ее локальных переменных. Таким образом, ВР часто указывает дно текущего стекового фрейма (иными словами, на слово в стековом фрейме с наименьшим числовым значением), a SP — на его вершину (на слово в стековом фрейме с наибольшим числовым значением). Следовательно, границы текущего стекового фрейма определяются значениями регистров-указателей ВР и SP.

В этой группе есть два индексных регистра: SI (Source Index — индекс источника) и DI (Destination Index — индекс приемника). В сочетании с ВР эти регистры часто употребляются для адресации данных в стеке, а в сочетании с ВХ — для вычисления адресов памяти. Более подробно о применении этих регистров мы поговорим в разделе, посвященном режимам адресации.

Один из важнейших регистров, составляющий самодостаточную группу, называется указателем команд; этот термин введен Intel, в общем случае такой регистр называется счетчиком команд (PC). Команды обращаются к нему за адресами кодовых сегментов в памяти. Цикл выполнения команд процессором начинается с выборки команды, на которую указывает регистр PC. Перед выполнением последующих команд цикла к значению этого регистра прибавляется единица. Таким образом, счетчик команд всегда указывает на первую команду вслед за текущей.

Флаговый регистр, или регистр кода условия, по существу, представляет собой целый набор регистров, по одному биту каждый:

+ Z — нулевой результат;

+ S — отрицательный результат (знаковый бит);

+ V — результат породил переполнение;

+ С — результат породил перенос;

+ А — служебный перенос (из бита 3);

+ Р — четность результата.

Другие биты в этом регистре регулируют различные аспекты работы процессора. В частности, бит I включает прерывания, а бит Т — режим трассировки, применяемый для отладки программ. Наконец, бит D регулирует направление строковых операций. Не все 16 бит флагового регистра задействованы; неиспользуемые биты имеют фиксированное нулевое значение.

К группе сегментных регистров причисляется четыре регистра. Как вы помните, стек, данные и коды команд хранятся в разных областях основной памяти. Сегментные регистры объединяют эти области памяти, называемые сегментами. К сегментным регистрам относятся регистр кодового сегмента (СБ), регистр сегмента данных (ОБ), регистр стекового сегмента (ББ) и регистр дополнительного сегмента (ЕБ). Большую часть времени их значения остаются неизменными. На самом деле сегмент данных и стековый сегмент относятся к одной и той же области памяти, но данные хранятся на дне этого общего сегмента, а стек — на вершине. Более подробно о сегментах мы поговорим в подразделе «Организация памяти и сегменты» раздела «Память и адресация».

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Регистры-указатели:

  1. УКАЗАТЕЛЬ СОКРАЩЕНИЙ
  2. Алфавитно-предметный указатель
  3. Алфавитно-предметный указатель
  4. Алфавитно-предметный указатель
  5. АЛФАВИТНО-ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ
  6. ИНДЕКС
  7. Дополнительная литература
  8. СЛУХ АБСОЛЮТНЫЙ
  9. «Пристегнись!»
  10. ПАМЯТЬ: МОДЕЛЬ ТРЕХКОМПОНЕНТНАЯ
  11. Дополнительная литература
  12. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  13. Дополнительная литература
  14. Дополнительная литература
  15. Сигнификаторы