Cтраница 4
В состав третьей группы входят команды обслуживания регистров SP и X. Команды четвертой группы используют для обращения к элементам массива и другим данным косвенную адресацию, реализуемую с помощью указателей, значения которых вычисляются во время прогона программы. Если адрес переменной находится в верхушке стека, то с помощью команды VAL производится его замена на значение самой переменной. Команда STOW служит для выполнения операции инверсии. При этом слово данных, хранимое в верхушке стека, записывается в ячейку памяти, адрес которой содержится во втором слове стека, начиная с верхушки. [46]
Оператор вызова значений по 14-разрядному адресу, формируемому из двух слогов, производит обращение к слову, указанному в этом адресе. Данное слово может оказаться значением. В этом случае оно помещается в верхушку стека. Но выбранное слово может оказаться, в свою очередь, косвенной ссылкой или дескриптором. В этом случае аппаратура продолжает поиск нужного значения, последовательно вызывая косвенные ссылки или выполняя извлечение операнда, согласно той управляющей информации, которая указана в дескрипторе. [47]
Восстанавливает контекст, сохраняемый SaveDC из стека контекстов. Указатель определяет объект для восстановления. Контекст должен быть - 1 для его восстановления из верхушки стека. [48]
![]() |
Использование стека для хранения счетчиков. [49] |
На рис. 3.8 показан стек до и после операции исключения. Отметим, что операция исключения не разрушает информацию в верхушке стека; при этом информация просто передается в нужные регистры и производится инкремент указателя стека. При включении в стек новой информации будет замещаться старая информация, находящаяся сразу над верхушкой стека. Отметим также, что содержимое регистров исключается в обратном порядке. [50]
Алгоритм посещения верхнего узла и заталкивания всех его соседей - простая формулировка поиска в глубину, но из рис. 5.34 понятно, что этому метод присущ недостаток возможного оставления в стеке нескольких копий каждого узла. Это происходит даже в случае проверки, посещался ли каждый узел, который должен быть помещен в стек, и если да, то отказа от занесения в стек такого узла. Во избежание упомянутой проблемы можно воспользоваться реализацией стека, которая запрещает дублирование за счет применения стратегии забывания старого элемента: поскольку ближайшая к верхушке стека копия всегда посещается первой, все остальные копии просто выталкиваются из стека. [51]
Оператор вызова имени формирует слово косвенного обращения ( Indirect Reference Word - IRW) и помещает его в верхушку магазина. Из шести младших разрядов первого слога и восьми разрядов второго слога данного оператора образуется 14-разрядный адрес, который размещается в младших разрядах формируемого слога. К полученному слову приформировываются разряды тега, обозначающие, что это слово есть косвенная ссылка. Полученное слово помещается в верхушку стека. Таким образом, в магазине оказывается ссылка, состоящая из указания номера базы и относительного адреса элемента или ссылки на описатели ( дескрипторы) переменных и массивов. В дескрипторах указывается абсолютный адрес по памяти искомой величины или база ( адрес нулевого элемента) массива, к которому предполагается обращение. [52]
В каждом графе выделяют начальную и множество конечных вершин. Метки на дугах могут быть как терминальными символами, так и именами состояний. Во втором случае интерпретация дуги заключается в том, что состояние, к которому она ведет, запоминается в стековой памяти, а управление передается в состояние, являющееся меткой этой дуги. При достижении конечного состояния стек выталкивается и активным становится состояние из верхушки стека. [53]
Например, чтобы стек мог элегантно увеличиваться и уменьшаться, можно было бы отдать Предпочтение связному списку, как в программе 4.8. Стек организован в обратном порядке по сравнению с реализацией на базе массива - начиная с последнего занесенного элемента и завершая первым. Этот ( см. рис. 4.5) позволяет более просто реализовать базовые стековые операции. Чтобы вытолкнуть элемент, удаляется узел в начале списка и извлекается из него элемент; чтобы втолкнуть элемент, создается новый узел и добавляется в начало списка. Поскольку все операции связного списка выполняются в начале списка, узел, соответствующий верхушке стека, не требуется. [54]
Аппарат дескрипторов является очень интересной особенностью машин фирмы Барроуз, и далее мы подробнее рассмотрим их назначение и функции. Косвенная ссылка может быть обращена к слову, которое, в свою очередь, само есть косвенная ссылка. Таким путем достигается многоуровневая косвенная адресация, причем длина цепочки косвенных ссылок ничем не ограничена. Следует подчеркнуть еще раз, что команда вызова имени завершает свою работу размещением косвенной ссылки в стеке, в отличие от оператора вызова значения, для выполнения которого может потребоваться аппаратный анализ цепочки косвенных ссылок, многократные обращения в память, в результате чего в верхушке стека должен оказаться операнд. [55]
![]() |
Реализация команды записи в стек. [56] |
Применительно к МП под стеком понимается любая область ОЗУ, ячейки которой заполняются последовательно друг за другом. Аналогично происходит и вывод информации из стека - ячейка за ячейкой. Достоинством команд со стековой адресацией является то, что программист может не заботиться о конкретных адресах ячеек памяти, куда записываются и откуда считываются данные. Достаточно знать код адреса начала стековой области ОЗУ. Этот код ( код верхушки стека) предварительно записывается в указатель стека. [57]