03 Subrutinas

12
Luis Alberto González Murillo

Transcript of 03 Subrutinas

Luis Alberto González Murillo

Introducción Una subrutina es un fragmento de código que realiza una tarea

Una subrutina es el equivalente de una función en C, y tiene

parecido con un método en VisualBasic

Cuando se programa en C, el compilador traduce cada función en

una subrutina (depende del nivel de optimización seleccionado). El

compilador agrega el código adicional necesario

Para trabajar con subrutinas, se utiliza el stack

Subrutinas

Subrutinas Las subrutinas son el equivalente a las funciones en lenguaje C. Se identifican por medio de etiquetas.

Las instrucciones utilizadas son:

call: Llamar una subrutina

ret: Retornar de una subrutina

El retorno se hace a la instrucción localizada inmediatamente después de la llamada

La dirección de retorno se guarda en el stack

Es responsabilidad de la subrutina guardar los registros que se modifiquen, para evitar que se vea afectado el código externo a la subrutina

Subrutinas . . . . . . . . . . . . Call miRutina . . . . . . . . . . . . . . . . lazo: rjmp lazo miRutina: . . . . . . . . . . . . ret

Flujo del programa en una llamada a una subrutina

Subrutinas . . . . . . . . . . . . Call miRutina . . . . . . . . . . . . . . . . lazo: rjmp lazo miRutina: . . . . . . . . . . . . ret

Flujo del programa en una llamada a una subrutina

Subrutinas . . . . . . . . . . . . Call miRutina . . . . . . . . . . . . . . . . lazo: rjmp lazo miRutina: almacena registros en stack . . . . . . . . recupera registros del stack ret

Generalmente es necesario guardar en el stack los valores de los registros que se modifican dentro de la subrutina, para que no se afecte el funcionamiento fuera de la subrutina.

Ejemplo configura Stack en parte alta de SRAM

Programa que rota un bit en el puerto B, tres veces

configura puerto B como salida

contador = 3

hace corrimiento a la derecha en puerto B

decrementa contador

nop

salta a instrucción NOP

¿contador ≠ 0? si

no

Subrutina

Subrutina

Ejemplo

Llamada a la subrutina

Ejemplo

El registro 16 se utiliza dentro de la subrutina, pero no se afecta fuera de la subrutina porque su valor se almacena temporalmente en el stack

Ejemplo Agregar una pausa al programa.

Ver Subrutinas02

Mini-proyecto

Control de luces (Parte 1)

Hacer un programa que genere 10 secuencias diferentes, las cuales se

ejecutan una después de otra.

Cada secuencia es una subrutina

Se deben utilizar:

AND

OR

XOR

Corrimiento o rotación

Equipos de 2-3 personas. Entrega: 1 semana.