Una función es un conjunto de instrucciones de computadora que realiza un cálculo particular o realiza una operación particular. Por ejemplo, la “función de raíz cuadrada” calcula el valor de la raíz cuadrada de un número y normalmente “devolvería un valor”, la raíz cuadrada calculada del número. Aunque podría escribir el algoritmo de raíz cuadrada una y otra vez en su código cada vez que necesite sacar una raíz cuadrada, crear una función de raíz cuadrada le permite escribir el algoritmo de raíz cuadrada solo una vez en su código y luego “llamar” a la función desde el “programa principal” cuando sea necesario, ahorrando espacio en el código del programa y también a menudo ahorrándole tener que codificar un algoritmo de raíz cuadrada. Para algoritmos complicados, simplemente no es factible o rentable codificarlos desde cero, y la mayoría de los compiladores, ensambladores, etc. ofrecen un “paquete de funciones y subrutinas” que puede usar en lugar de reinventar el suyo. Cargas esa biblioteca en la memoria de tu procesador y las llamas cuando es necesario.
Entonces, su programa está funcionando, ejecutando instrucciones en secuencia y necesita calcular una raíz cuadrada. Entonces, “llama” a la función de raíz cuadrada y “pasa” el número cuya raíz cuadrada desea como “argumento”. Esto podría llamarse “llamada por valor”. Para un microprocesador, puede diseñar la función para esperar el argumento en el registro del acumulador y para “devolver un valor” en el registro del acumulador. Entonces, coloca el argumento en el acumulador, luego ejecuta una instrucción de “llamada” que hace que la computadora guarde toda la información que necesita para recordar dónde estaba cuando llamó a la función, como los valores de los registros locales y la dirección de la siguiente instrucción, y luego le dice al procesador que tome su próxima instrucción del lugar en la memoria donde se almacena la función. La función se ejecuta como cualquier otro programa, calcula el valor, lo coloca en el acumulador y ejecuta una instrucción de “retorno”. La instrucción de retorno le dice al procesador que restaure sus registros a sus valores anteriores (excepto el acumulador, por supuesto) y luego tome su próxima instrucción desde el siguiente lugar en la memoria más allá de la instrucción “call”. Su “programa principal” ahora tiene el valor calculado en el acumulador y continúa en camino. Si la función no calcula nada y, por lo tanto, no tiene ningún valor que devolver, por ejemplo, si enciende una luz o activa un relé, sería una buena práctica que devuelva una “palabra de estado” que indique si piensa que realmente hizo lo que usted llamó. Esto entra en un área completa de informes de errores que es demasiado complicada y variable para discutir aquí.
Ahora, suponga que el argumento requiere más bits de los que tiene el acumulador. Puede organizar el uso de varios registros en lugar de uno para pasar el argumento y, por supuesto, la función debe saber qué registros buscar para el argumento. O bien, puede organizar las cosas donde no pasa el valor del argumento, sino que pasa la dirección del valor del argumento. Esto podría llamarse “llamada por dirección” o “llamada por puntero”. Puede hacer arreglos para poner la dirección del argumento en el acumulador y esperar que la función devuelva la dirección del “valor de retorno”, la respuesta, en el acumulador. Y puede ser mucho más complicado. Si el acumulador no puede contener la dirección completa del argumento, puede hacer arreglos para que un registro en el procesador contenga una dirección “base” y simplemente pasar al acumulador el “desplazamiento” de la dirección base, y así sucesivamente. Hay muchas formas según el procesador en particular y qué tipo de registros y otra arquitectura tiene. Espero que esto ayude.
- X y Y son números reales. ¿Cómo puedes encontrar X e Y si [matemática] \ arctan \ frac {X + Y} {2} = X [/ matemática] y [matemática] \ arctan \ frac {XY} {2} = Y [/ matemática]?
- ¿Cuáles son las funciones dentro de la función en C?
- ¿Cuáles son las funciones / gráficas matemáticas más comunes y básicas empleadas en economía?
- ¿Por qué son importantes los espacios [matemáticos] L ^ p [/ matemáticos]?
- Cuando se muestra que [math] -div [/ math] está junto a [math] \ nabla [/ math], ¿por qué consideramos [math] \ langle \ nabla f, X \ rangle = – \ langle f, div (X ) \ rangle [/ math] ([math] X [/ math] es un campo vectorial)?