1. Перед загрузкой в стек содержимое регистра-указателя стека (SP) инкрементируется, а после извлечения из стека – декрементируется.
По сигналу системного сброса в SP заносится значение 07h. Для переопределения SP можно воспользоваться командой MOV SP,#D
Пример:
ORG 0h
MOV SP,#BUFSTEK ; Инициализация стека
… ; Программа
…
ORG 40h
BUFSTEK DS 10 ; Резервирование памяти для стека
2. Классический пример работы со стеком – подпрограмма обработки прерывания должна сохранить в стеке содержимое тех регистров, которые она сама будет использовать, а перед возвратом в прерванную программу должна восстановить их значения.
ORG 0C003H ; Задание адреса вектора прерывания
LJMP SUB ; Переход на подпрограмму обработки
ORG 0C100H
SUB: PUSH PSW ; Сохранение в стеке PSW
PUSH A ; Сохранение аккумулятора
PUSH B ; Сохранение B
PUSH DPL ; Сохранение DPTR
PUSH DPH
MOV PSW,#1000B ; Выбор банка регистров 1
… ; Обработка прерывания
…
POP DPH ; Восстановление сохраненного
POP DPL
POP B
POP A
POP PSW ; Восстановление PSW и номера регистрового банка
RETI ; Возврат
|