En programación, un sitio de llamada de una función o subrutina es la ubicación (línea de código) donde se llama a la función (o puede llamarse, a través de un envío dinámico ). Un sitio de llamada es donde se pasan cero o más argumentos a la función y se reciben cero o más valores de retorno . [1] [2]
// esta es una función ''definición'' function sqr ( x ) { return x * x ; }
función foo () { // estos son dos sitios de llamada de la función sqr en esta función a = sqr ( b ); c = sqr ( b ); }
* ( normalmente ) llamada externa ... R13 normalmente apunta a un área de guardado para registros de propósito general de antemano * y R1 apunta a una lista de direcciones de parámetros ( si hay alguno ) LA R1 , = A ( B ) apunta a ( dirección de ) variable ' B ' L R15 , = A ( SQR ) Carga el puntero ( constante de dirección ) a la subrutina compilada / ensamblada por separado BALR R14 , R15 Va a la subrutina , que retorna - normalmente en desplazamiento cero en R14 * llamada interna ( normalmente una sobrecarga mucho menor y posiblemente parámetros ' conocidos ' ) BAL R14 , SQR Va a la etiqueta del programa y retorna
En algunas ocasiones, el retorno es un método eficiente para indicar éxito o fracaso. El retorno se puede lograr retornando a +0 o +4, +8, +12, etc., requiriendo código, por ejemplo una pequeña rama table , en el punto de retorno, para ir directamente a procesar el caso (como en la declaración HLL Switch ).
BAL R14 , SQR Ir a la etiqueta del programa y regresar ( usando el desplazamiento en R14 como dirección de retorno ) B OK ( RET + 0 ) - OK * ( RET + 4 ) - Error
Sin embargo, convencionalmente se establece un código de retornoR15
( 0
=OK, 4
= error o similar), pero se requiere una instrucción separada para probar R15
o usar directamente como índice de rama.