Был уже дан ответ относительно ASM - действительно, лучше ничего нельзя посоветовать. Вот отличный ресурс:
asmworld.ru
А если коротко, то представть что весь код разнесен по листу памяти. При вызове функции мы знаем адрес, по которому функция расположена. Что делает процессор, он сохраняет все флаги, затем сохраняет основные регистры, и добавляет в стек адрес возврата (чтобы потом вернуться обратно), данные (так практичнее всего), которые являются параметрами для вызываемой функции и только потом осуществляет переход.