Из-за того, что стек принадлежит не только вашей программе.
Например, когда ваша программа запущена, может быть обработано асинхронное прерывание, или ваша задача может быть приостановлена планировщиком, а ЦПУ переключен на другую задачу. Если да, текущий контекст (регистры, PSW) вашей задачи сохранен в стеке и возобновлен, когда вы вернете контроль.
Как результат: потребление стека может изменяться, и все значения ниже указателя стека (SP) не определены. И если вы сохраните что-то ниже SP, не факт, вы прочитаете то же самое.