Позвонить на сайт
В программировании местом вызова функции динамической или подпрограммы является место (строка кода), где функция вызывается (или может быть вызвана посредством диспетчеризации ). Место вызова — это место, где ноль или более аргументов функции передается ноль или более возвращаемых значений и принимается .
Пример
[ редактировать ] // this is a function ''definition''
function sqr(x)
{
return x * x;
}
function foo() {
// these are two call sites of function sqr in this function
a = sqr(b);
c = sqr(b);
}
Пример ассемблера
[ редактировать ]IBM/360 или Z/Архитектура
* (usually) external call.... R13 usually points to a save area for general purpose registers beforehand
* and R1 points to a list of addresses of parameters (if any)
LA R1,=A(B) point to (address of) variable 'B'
L R15,=A(SQR) Load pointer (address constant) to separately compiled/assembled subroutine
BALR R14,R15 Go to subroutine, which returns - usually at zero displacement on R14
* internal call (usually much smaller overhead and possibly 'known' parameters)
BAL R14,SQR Go to program label and return
В некоторых случаях возврат является эффективным методом указания успеха или неудачи. возврат может быть выполнен путем возврата в +0 или +4, +8, +12 и т. д., требуя кода, например небольшой таблицы ветвей , в точке возврата - для перехода непосредственно к обработке дела (как в HLL операторе Switch ) .
BAL R14,SQR Go to program label and return (using offset on R14 as return address)
B OK (RET+0) - O.K
* (RET+4) - Failure
Однако традиционно код возврата устанавливается в R15
( 0
= ОК, 4
= сбой или что-то подобное..), но для проверки требуется отдельная инструкция R15
или использовать непосредственно в качестве индекса ветки.
См. также
[ редактировать ]Ссылки
[ редактировать ]