PDF de programación - Paso de parámetros

Imágen de pdf Paso de parámetros

Paso de parámetrosgráfica de visualizaciones

Publicado el 3 de Junio del 2019
367 visualizaciones desde el 3 de Junio del 2019
3,4 MB
28 paginas
Creado hace 4a (27/10/2016)
Paso de parámetros





© Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la

Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la

reproducción, puesta a disposición del público y en general cualquier otra forma de

explotación de toda o parte de la misma.



La utilización no autorizada de esta obra, así como los perjuicios ocasionados en los
derechos de propiedad intelectual e industrial de la Universidad Europea de Madrid,
S.L.U., darán lugar al ejercicio de las acciones que legalmente le correspondan y, en su

caso, a las responsabilidades que de dicho ejercicio se deriven.





Paso de parámetros



Hasta ahora hemos visto funciones, una forma de encapsular código por funcionalidad.

Pero son pocas las funciones que no necesitan comunicarse con el exterior, normalmente para tomar

valores con los que operar. Por ejemplo, una función que calcula qué día de la semana a la que

corresponde una fecha cualquiera, necesita saber el día, mes y año de la fecha para calcular. Esos son

parámetros de entrada.

A veces, las funciones también tiene parámetros de salida, como `por ejemplo, para el caso en cuestión,

podría ser el día de semana correspondiente o incluso un error si por ejemplo es una fecha incorrecta.



© Universidad Europea de Madrid. Todos los derechos reservados.

3




Paso de parámetros



Esta comunicación entre la función y el mundo exterior, puede ser a través de registros de
microprocesador y a través de la pila.

Ambos métodos son buenos, pero necesitan establecer un protocolo.



© Universidad Europea de Madrid. Todos los derechos reservados.

4




Paso de parámetros



El paso de parámetros por registro, es muy rápida y efectiva, pero tiene limitaciones, principalmente que
el número de registros es muy limitado y además, los registros, son un recurso hardware muy demandado
y utilizado, como para bloquear su uso con los parámetros.

Pero su principal inconveniente es que el uso de registros hace un código poco portable y reutilizable, así
como muy propenso a fallos colaterales, sobre todo por la modificación de registros que provocan fallos
en tiempo de ejecución, muy difíciles de detectar y corregir.



© Universidad Europea de Madrid. Todos los derechos reservados.

5




Paso de parámetros



El otro método es la utilización de la memoria PILA para paso de parámetros, no es tan eficiente, pero

tiene las ventajas de que el tamaño se indefinido (lo limita la propia memoria del sistema).

Este es el método que se usa en la mayor parte de los lenguajes de programación (C, C++, java, etc.)

Los parámetros que se le pasan a una función, primero se almacenan en la pila y luego la función lee de la

pila estos parámetros. Y el método es válido, tanto para parámetros de entrada como de salida.



© Universidad Europea de Madrid. Todos los derechos reservados.

6




Paso de parámetros



Pensemos en un ejemplo de paso de parámetros, como puede ser la llamada a la función de

“ValorAbsoluto”. Que en lenguaje C, es muy fácil, pero ¿cómo sería en ensamblador?.

El código correspondiente a la llamada sería este. Ojo, esta es la invocación a la función, no la función en

sí misma.

Que analizado por fases, tenemos:

 Primero, pasar el parámetro a la función, es decir, guardamos el valor de la variable a calcular

su “ValorAbsoluto”, en la pila.

Recordemos que en Atmel, este proceso no puede ser directo, antes hay que pasar por un registro.



Segundo, invocar la función “valorAbsoluto”, instrucción CALL en Atmel.

 Tercero, sacar de la pila el parámetro de salida, que corresponde con el valor absoluto del

parámetro de entrada.



© Universidad Europea de Madrid. Todos los derechos reservados.

7




Paso de parámetros



¿Pero, y si tenemos que pasar más de un parámetro a la función?

La secuencia de pasos es muy parecida:

 Primero, insertar en pila todos los parámetros necesarios





Segundo, llamada a la función

Tercero, extraer el valor devuelto

 Cuarto paso, eliminar el exceso de parámetros y eliminarlos. Recordemos que esta función

tiene dos parámetros de entrada y solo un de salida.

Algunos compiladores eliminan de pila los parámetros sobrantes de manera automática (como los

compiladores para ordenadores Intel), pero el compilador de ATMEL no lo hace. De ahí que haya que

eliminarlo manualmente.



© Universidad Europea de Madrid. Todos los derechos reservados.

8




Paso de parámetros



9


© Universidad Europea de Madrid. Todos los derechos reservados.





Paso de parámetros



Para visualizar esto, vamos a ver el ejemplo del valor absoluto, paso a paso, y de la evolución de la pila.

Para ello, partimos de un estado de pila inicial, que puede no estar vacía, como es este caso.

El registro SP apunta a la cima de la pila.

 Primero,

Se guarda en la pila, el primer parámetro de la función.

El registro SP se incrementa para seguir apuntando a la cima de la pila.

Es importante resaltar que realmente el registro SP se decrementa, ya que la pila empieza en valores de

memoria altos y crece hacia los bajos.

 Segundo,



© Universidad Europea de Madrid. Todos los derechos reservados.

10




Paso de parámetros



Se Inserta el segundo parámetro de la función en la pila

Nuevamente, el registro SP se vuelve a incrementar.

 Y para terminar,

Se llamada a la función.

En la pila se guarda la dirección de retorno. Es decir, el valor almacenado en el registro PC, que indicaba

cual sería la siguiente instrucción a ejecutar si no se hubiese llamado a la función, esta dirección,

corresponde con la dirección de retorno.

Recordemos que las direcciones de memora del microprocesador Atmel son de 16bits, de ahí que ocupen

dos espacios en pila.

Esto provoca que el registro SP se incremente en dos unidades.



© Universidad Europea de Madrid. Todos los derechos reservados.

11




Paso de parámetros



Hasta aquí, cómo pasar parámetros a una función a través de la pila, ahora, ¿cómo recuperar esos
parámetros en la función?

No podemos utilizar las funciones POP que extrae un byte de la pila, ya que esta instrucción elimina el
dato de la cima, por lo que eliminaría la dirección de retorno de la función, ya que es ese el dato que está
en la cima de la pila.

La solución pasa por acceder directamente a esos valores en la pila, por medio de direcciones de
memoria. La ventaja que tenemos, es que sabemos exactamente dónde están esos parámetros, por lo
que su acceso es fácil y directo.

Además, recordemos que Atmel nos proporciona tres registros que están especialmente diseñados para
acceder a memoria, los registros X, Y y Z.

Algo a tener cuidado. Si dentro de una función utilizamos un registro, debemos tener especial cuidado de
salvaguardar su valor antes de utilizarlo, y restáuralo cuando terminemos de utilizarlo, ya que ese registro
podría estar siendo utilizado en el programa principal. Y ¿dónde vamos a guardar el valor de esos registros
que utilizaremos en la función? Pues en la propia pila.



© Universidad Europea de Madrid. Todos los derechos reservados.

12




Paso de parámetros



Ya dentro de la función, lo primero que tenemos que hacer, es guardar el actual valor del registro puntero
que vamos utilizar para direccionar la memoria donde están los parámetros de la función. En este caso,
vamos a utilizar el registro Y: Instrucciones PUSH



© Universidad Europea de Madrid. Todos los derechos reservados.

13




Paso de parámetros



Y luego inicializar el registro Y al valor actual del registro SP. Esto permite hacer una foto del estado actual
de la pila. A partir de este momento, aunque se inserten mas valores en la pila lo que provocaría la
modificación del registro SP, nosotros tenemos los parámetros localizados de manera exacta desde el
registro Y, ya que este permanecerá inalterado, manteniéndonos una instantánea estable de la pila del
momento de la invocación a la función.



Es decir, tanto SP como Y apuntaran a la actual cima de la pila.



© Universidad Europea de Madrid. Todos los derechos reservados.

14




Paso de parámetros



Después de hacer la instantánea de la pila, ya podemos acceder a los parámetros. Que están localizables a

través del registro Y teniendo en cuenta un desplazamiento.

Es decir, el primer parámetro esta 5 bytes mas abajo de la dirección apuntado por Y (sumar 5), el segundo

parámetro 6 posiciones mas abajo, y así sucesivamente para todos los parámetros.

Y esto se cumple, aunque hayamos movido el registro SP por haber insertado mas valores en la pila.



© Universidad Europea de Madrid. Todos los derechos reservados.

15




Paso de parámetros



Una vez hemos recogido los parámetros de la pila en la función, ya podemos operar con ellos.

Después, debemos devolver los valores calculados en la función, es decir, devolver los parámetros de



salida al Programa Principal

Para ello, una vez más, utilizaremos la pila, reutilizando los propios parámetros de entrada, para

almacenar los parámetros de salida.



© Universidad Europea de Madrid. Todos los derechos reservados.

16




Paso de parámetros



Por Ejemplo, esta sería el método de devolución de parámetros desde la función.

Como aún tenemos el registro Y estable, al igual que hemos recogido los parámetros de entrada, ahor
  • Links de descarga
http://lwp-l.com/pdf16033

Comentarios de: Paso de parámetros (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad