Инструкции push, pop. Ну или писать в регистры, управляющие стеком.
Подпрограмма лучше вызывающей знает.
Подпрограмма - это абстракция. Для процессора это просто поток инструкций. Просто в интеле хотели облегчить работу с подпрограммами и ввели эти инструкции. Пользоваться ими не обязательно.
Я перестал тебя понимать. Что ты хочешь? Процедуры, функции, подпрограммы - это всё для программистов. Процессор предоставляет некоторые инструкции для облегчения построения этих абстракций, но использовать их не обязательно. Ты можешь придумать своё соглашение о передачи и возврате данных в/из функции и не использовать стек вообще.
Ес-но оно может быть заменено на ручное упровление стеком. И получается, С-соглашения вызовов полностью убили архитектурные возможности вложенных подпрограмм итп.
тут надо еще вспомнить такой архитектурный хлам как операции с BCD
На сколько я представляю оно до сих пор во всей коммерции используется, но подозреваю, нынешний софт на самом низком уровне на С, либо переписан под SIMD...