Cтраница 4
Для правильности помещения и дальнейшего восстановления данных необходимо постоянно иметь информацию о следующей, еще не использованной ячейке стека. Для этого и предназначен указатель стека. Первоначально указатель стека должен содержать самый старший адрес области памяти, отведенной в ОЗУ под стек. PUSH ( пересылка в стек), содержимое указателя стека уменьшится на 1 и он будет указывать на следующую доступную ячейку стека. POP ( выдача из стека), то содержимое указателя стека сразу же должно быть увеличено. В микропроцессорах Z80 и COSMAC команды работы с указателем стека выполняют автоматически все необходимые для этого операции. [46]
Содержимое счетчика команд и содержимое разрядов 4 - 7 регистра состояний заносится в стек. Указатель стека ( содержимое разрядов 0 - 2 регистра состояний) инкрементируется Управление программой передается по адресу, указанному в данной команде. Содержимое разряда 11 счетчика команд определяется предшествующей командой SEL Mb. После возвращения из подпро граммы выполнение программы продолжается с команды, следующей за командой CALL Возврат из подпрограммы обслуживания прерываний без восстановления содержимого регистра состояний. Содержимое указателя стека ( разряды О-2 регистра состояний) дек-рементируется. Содержимое счетчика команд восстанавливается из стека. Содержимое разрядов 4 - 7 регистра состояли не восстанавливается Возврат из подпрограммы обслуживания прерывании с восстановлением содержимого регистра состояний. [47]
Для правильности помещения и дальнейшего восстановления данных необходимо постоянно иметь информацию о следующей, еще не использованной ячейке стека. Для этого и предназначен указатель стека. Первоначально указатель стека должен содержать самый старший адрес области памяти, отведенной в ОЗУ под стек. PUSH ( пересылка в стек), содержимое указателя стека уменьшится на 1 и он будет указывать на следующую доступную ячейку стека. POP ( выдача из стека), то содержимое указателя стека сразу же должно быть увеличено. В микропроцессорах Z80 и COSMAC команды работы с указателем стека выполняют автоматически все необходимые для этого операции. [48]
Короткое смещение SP, ( SP - хх) - слово команды содержит 5 - или 6-битовое беззнаковое поле непосредственногго индекса. Это поле сдвигается влево на 1 или 2 позиции, в соответствии с разрядностью доступа, дополняется нулями для формирования 32-битового смещения и затем вычитается из активного указателя стека ( NSP в нормальном режиме, ESP в режиме исключений) для получения адреса операнда. Таким образом, смещение мЬжет лежать в диапазоне от [0] до [ 31 / 63 ] слов или длинных слов, в соответствии с разрядностью доступа. Содержимое активного регистра SP не изменяется. Всегда используется линейный тип арифметики. Смещение слова SP, ( SP хххх) - адрес операнда является суммой содержимого активного указателя стека SP и непосредственного смещения. Смещение является знаковым 15-битным словом, требующим второго слова команды. [49]
![]() |
Реализация команды записи в стек. [50] |
Применительно к МП под стеком понимается любая область ОЗУ, ячейки которой заполняются последовательно друг за другом. Аналогично происходит и вывод информации из стека - ячейка за ячейкой. Достоинством команд со стековой адресацией является то, что программист может не заботиться о конкретных адресах ячеек памяти, куда записываются и откуда считываются данные. Достаточно знать код адреса начала стековой области ОЗУ. Этот код ( код верхушки стека) предварительно записывается в указатель стека. По этому адресу производится запись в стек слова данных из первого регистра. Далее содержимое указателя стека вновь уменьшается на единицу и на шину адреса выставляется адрес SP-2, по которому в стек записывается слово данных из второго регистра. [51]
Эффективный адрес формируется из содержимого регистра адреса и смещения или пост-инкремента. Эффективный адрес формируется из содержимого регистра адреса и знакового 15-битного смещения. Эффективный адрес формируется из содержимого указателя стека и знакового 15-битного смещения. [52]