Cтраница 3
Для устранения этого недостатка многие реальные машины со стековой организацией проектируются таким образом, чтобы программист мог помещать несколько верхних элементов стека в сверхоперативные регистры процессора. Когда программа обращается к верхушке стека, аппаратный доступ к памяти осуществляется только в том случае, если регистры стека процессора становятся заполненными или пустыми из-за превышения числа операций загрузки в стек над числом извлечений из стека или наоборот. Даже устранив таким способом упомянутый выше недостаток, разработчики ЭВМ до сих пор спорят, можно ли создать машину со стековой организацией памяти, обладающую таким же быстродействием, как и машина с регистрами общего назначения, при равных затратах на аппаратные средства и тех же усилиях технических работников. [31]
Мы можем производить загрузку этого регистра, записывать его содержимое в память, осуществлять положительное или отрицательное приращение, а также сравнивать с другой 16-разрядной величиной. Регистр SP всегда указывает на верхушку стека адресов возврата, используемых командами вызова подпрограмм и возврата в исходную программу. Команда LDS может использоваться для начальной установки указателя стека SP в начале программы. [32]
В стеке stackH числа располагаются в порядке их убывания - в верхушке этого стека находится наименьшее число. Кроме того, число в верхушке стека stackL всегда либо меньше, чем число в верхушке стека stackH, либо равно ему. Теперь можно поместить новое число в любой стек ( в программе для этого использован стек stackL); при этом числа в стеках остаются упорядоченными. [33]
В примере этот оператор используется следующим образом: файл для readhexstring - currentfile и строка - pixbuf. Поскольку оператор readhexstring оставляет логическое значение на верхушке стека, который изображение не использует, оператор выталкивание применяется для удаления этого логического значения. [34]
![]() |
Использование стека для хранения счетчиков. [35] |
На рис. 3.8 показан стек до и после операции исключения. Отметим, что операция исключения не разрушает информацию в верхушке стека; при этом информация просто передается в нужные регистры и производится инкремент указателя стека. При включении в стек новой информации будет замещаться старая информация, находящаяся сразу над верхушкой стека. Отметим также, что содержимое регистров исключается в обратном порядке. [36]
Набор операций сравнения, выполняемых процессором, соответствует полному списку операций отношений алгола: больше, больше или равно, равно, меньше или равно, меньше, не равно, эквивалентно. Эти операции отношений выполняются над двумя операндами, находящимися в верхушке стека. Результатом операции является булево значение, разряд, принимающий значение 0 или 1, который помещается в головку стека. Исходные операторы исчезают в стеке. [37]
ЦП может иметь внутренние регистры для стека, но удобнее использовать для временного хранения блок внешней памяти. В любом случае информация запоминается в последовательных ячейках, а адрес текущей верхушки стека находится в специальном регистре ЦП, называемом указателем стека. [39]
В стеке stackH числа располагаются в порядке их убывания - в верхушке этого стека находится наименьшее число. Кроме того, число в верхушке стека stackL всегда либо меньше, чем число в верхушке стека stackH, либо равно ему. Теперь можно поместить новое число в любой стек ( в программе для этого использован стек stackL); при этом числа в стеках остаются упорядоченными. [40]
Вторая группа команд, представленных в табл. 5.5, служит для выполнения арифметических и логических операций над данными, находящимися в верхушке стека. Как показано на рис. 5.27, команды с одним операндом позволяют изменять значение элемента в верхушке стека. С помощью команд с двумя операндами производятся операции над двумя верхним элементами стека, а результат помещается в стек вместо этих элементов. Такие команды называются безадресными, так как в них не указывается адрес и операции всегда выполняются над одним или двумя верхними элементами стека. [41]
![]() |
Изменение PC при выполнении программы. Содержимое PC перед выполнением ( а и после выполнения ( б команды КМД 1. [42] |
Для этого используется стековая организация памяти. Стеком называется одномерная структура данных, добавление элементов в которую ( или исключение элементов из которой) производится с одного конца, называемого верхушкой стека. [43]
На рис. 4.1 показано, как изменяется содержимое стека в процессе выполнения серии операций затолкнуть и вытолкнуть. На рисунке элементы стека перечисляются в порядке их помещения в стек, поэтому ясно, что самый правый элемент списка - это элемент, который находится на верхушке стека и будет извлечен из стека, если следующей операцией будет операция вытолкнуть. В реализации элементы можно организовывать любым требуемым способом, однако при этом у программ-клиентов должна сохранятся иллюзия, что элементы организованны именно таким образом. [44]
Запись в стек или вычеркивание из стека производятся фазой, использующей его. В данной книге верхушка стека всегда изображается обращенной к низу страницы. [45]