Ниже перечислены действия, происходящие с программой, выполняемой под управлением DOS, при переходе к телу функции:
- Увеличивается адрес, содержащийся в указателе команды, чтобы указывать на инструкцию следующую после вызова функции. Затем этот адрес помещается в стек и будет служить адресом возврата по завершении выполнения функции.
- В стеке резервируется место для возвращаемого функцией значения объявленного вами типа. Если в системе с двухбайтовыми целыми для возвращаемого значения объявлен тип int, то к стеку добавляется еще два байта, но в эти байты ничего пока не помещается.
- В указатель команды загружается адрес вызванной функции, который хранится в отдельной области памяти, отведенной специально для этих целей. Поэтому следующей выполняемой командой будет первый оператор вызванной функции.
- Текущая вершина стека помечается и содержится в специальном указателе, именуемом указателем стека. Все, что добавляется в стек с этого момента и до тех пор, пока функция не завершится, рассматривается как локальные данные этой функции.
- В стек помещаются все аргументы, передаваемые функции.
- Выполняется команда, адрес которой находится в данный момент в указателе команды, т.е. первая строка кода функции.
- По мере определения в стеке размещаются локальные переменные и функции.
Затем из стека извлекается значение возврата функции, которое присваивается переменной, вызвавшей функцию, и адрес команды, сохраненный в стеке на этапе 1, который присваивается указателю команд. Таким образом, программа продолжает свою работу со следующей строки после обращения к функции, владея уже значением, возвращенным из функции.
Комментариев нет:
Отправить комментарий