Если быть более точным, то направление куда "ползёт" стек определяется схемотехникой CPU. Действительно чаще он ползёт вниз и это очень удобно. В то же время, например в 8051 он ползёт вверх и устанавливается аппаратно. То есть приведённых вами команд инициализации можно и не делать.
Куча (Heap) в Си или другом языке программирования - напротив вещь не аппаратная и приведение каких-нибудь сравнений, аналогий и примеров, как мне кажется неуместно. Тем более если правильно ей пользоваться. Хотя указание, что нарушение стека ведёт к трудно находимым ошибкам совершенно правильно!
Причина неверной работы с подпрограммами и прерываниями при отсутствии инициализации стека не при входе в прерывание, а при выходе из него. Так как подставляется не тот адрес возврата.
Отмечу ещё одно место, где стек совершенно необходим! Без него просто нельзя (не аппаратный так программный). Это рекурсия. То есть вызов процедурой самой себя (при правильном написании).
В завершение скажу что компилятор СИ от IAR использует два стека. Аппаратный и программный. На сколько я понял программный используется для удобства работы с переменными расположенными на стеке. (чаще всего это параметры процедур).
|