А теперь в подробностях. Когда я писал о том, что функция вызывается, или данные передаются в функцию, то умышленно упускал из виду один момент.
Например, когда вызывается функция, то процессор перепрыгивает с текущего адреса, на которым он находится, на адрес функции. И выполнение программы продолжается с того адреса. После того, как функция закончила работу, процессор возвращается на тот адрес, откуда он ушел. А тут надо было пояснить – а откуда процессор знает, куда ему возвращаться? Ведь функцию можно вызвать из любого места, и возврат, стало быть, должен происходить именно в то место, откуда вызвали.
Второй момент: когда в функцию передаются параметры, то они записываются в специальную область памяти, где их может найти функция. Где находится эта область памяти? И откуда функция знает, к какому адресу в этой области обращаться? Допустим, мы записали 2 параметра по адресам 100 и 102, и вызвали функцию. Допустим, она знает, что нужно искать параметры по адресам 100 и 100. Но если она вызовет другую функцию и тоже передаст ей параметры, то куда должна смотреть другая? А если та другая снова вызовет первую? Параметры, которые мы передаем, перезапишутся поверх адресов 100 и 102, или что с ними произойдет? |