ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Programación estructurada.

cegakometasApuntes17 de Noviembre de 2016

3.612 Palabras (15 Páginas)301 Visitas

Página 1 de 15

Tema 4.1 Programación estructurada

A finales de los años sesenta surgió una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su comprensión posterior: la programación estructurada.

La programación estructurada es un modelo de programación que propone que todo programa puede escribirse utilizando únicamente las tres estructuras de control siguientes:

  • Secuencial.
  • Instrucción condicional.
  • Iteración, repetición o bucle de instrucciones.

Utilizando solamente estas tres estructuras se puede hacer cualquier programa informático.

Las ventajas que ofrece este modelo de programación son las siguientes:

  1. Los programas son más fáciles de entender, ya que pueden ser leídos de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de los bloques de código para entender la lógica.
  2. La estructura del programa es clara puesto que las instrucciones están más ligadas o relacionadas entre sí.
  3. Reducción del esfuerzo en las pruebas. El seguimiento de las fallas (debugging) se facilita debido a la lógica más visible, por lo que los errores se pueden detectar y corregir más fácilmente.
  4. Reducción de los costos de mantenimiento.
  5. Programas más sencillos y más rápidos.
  6. Los bloques de código son autoexplicativos, lo que apoya a la documentación.

Bajo el concepto del programa almacenado que se propone en la arquitectura Von Neumann, un programa se ejecuta repitiendo los siguientes pasos:

  1. Se toma una instrucción.
  2. Se procesa y ejecuta.
  3. Se incrementa un puntero interno para acceder a la siguiente instrucción.
  4. Se vuelve al primer paso.

Esta estructura de flujo secuencial es la estructura “natural” de ejecución de las instrucciones de un programa: una tras otra en el mismo orden en que aparecen en un programa. Esto da idea de una ejecución puramente secuencial; sin embargo, la mayoría de los programas requieren condicionales y bucles.

Estructuras condicionales 
En ocasiones es necesario o no ejecutar ciertas instrucciones dependiendo del cumplimiento de cierta condición; esta necesidad se implementa mediante las estructuras condicionales.

Condicional si() entonces ..finsi 
Esta estructura tiene la siguiente forma:
Que tiene la siguiente semántica: i) se evalúa la condición; ii) si es verdadera, se ejecutan secuencialmente las instrucciones 
instruccion1 .. instrucciónn.Si la condición es falsa no se ejecuta ninguna instrucción y el flujo de ejecución continúa con la instrucción que sigue al finsi. La siguiente figura ilustra esta estructura condicional.

[pic 1]

Condicional si() entonces .. sino .. finsi 
Esta estructura tiene la siguiente forma:

Que tiene la siguiente semántica: i) se evalúa la condición; ii) si es verdadera, se ejecutan secuencialmente las instrucciones instrucciónV1 .. instrucciónVn, después de lo cual la ejecución continúa con la instrucción que sigue al finsi; iii) si la condición es falsa, se ejecutan secuencialmente las instrucciones instrucciónF1 .. instrucciónFn, después de lo cual la ejecución continúa con la instrucción que sigue al finsi. La siguiente figura ilustra esta estructura selectiva.

[pic 2]

Estructuras repetitivas 

Las estructuras repetitivas se utilizan para definir un bloque de instrucciones que, dependiendo de cierta condición, deben ejecutarse varias veces. Esta estructura de control tiene una condición asociada de cuyo valor lógico, Falso o Verdadero, depende que el bloque de instrucciones se repita una vez más o termine el ciclo. En este curso veremos dos de estas estructuras:

  • mientras() .... fin_mientras
  • repite .... hasta ()

Estructura cíclica mientras () .... fin_mientras
Esta estructura tiene la siguiente forma:
mientras(condición)
    Instruc1
      :
    Instrucn
fin_mientras

Que tiene la siguiente semántica: i) se evalúa la condición; ii) si la condición es falsa, no se ejecuta nada y se salta a la instrucción siguiente al fin_mientras; iii) si la condición es verdadera, entonces se ejecuta una vez la secuencia de instrucciones Instruc1 .. Instrucn; iv) al final de la ejecución de esta secuencia se vuelve a evaluar la condición, como se muestra en la siguiente figura.

[pic 3]

Estructura repite ... hasta()
Es muy similar al mientras(); sin embargo, en esta estructura la condición se evalúa después de haber ejecutado una vez el bloque de instrucciones asociado. Esta estructura tiene la siguiente forma:

[pic 4]

Comparación entre mientras() y repite
En el ciclo mientras(), dado que la condición se evalúa antes de ejecutar el bloque de instrucciones, es posible que las instrucciones del ciclo no se ejecuten ni una sola vez.

En el repite, el bloque de instrucciones a repetir se ejecuta al menos una vez ya que la condición se evalúa al final del ciclo.


Programación estructurada. Disponible en:
http://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada

repite
    intruc1
      :
    instrucn
hasta(condición)

Que tiene la siguiente semántica: i) se ejecutan secuencialmente instruc1 .. instrucn; ii) se evalúa la condición; iii) si la condición es Verdadera, se ejecuta la instrucción que sigue al hasta(); iv) si la condición es Falsa, se vuelve a ejecutar el bloque de instrucciones. La siguiente figura ilustra esta estructura cíclica.

si(condición)
entonces 
    instrucciónV1
            :
    instrucciónVn
sino
    instrucciónF1
            :
    instrucciónFn
finsi
si(condición)
entonces 
   instrucción1
            :
   instrucciónn
finsi

Tema 4.2 Saltos incondicionales

Las instrucciones de salto incondicional ocasionan que el flujo de ejecución del programa se modifique incondicionalmente, de ahí su nombre. Los procesadores AVR manejan cuatro instrucciones de salto incondicional. Estas instrucciones se muestran en la siguiente tabla:

Mnenónico

Operandos

Descripción

Operación

rjmp

k

Salto relativo.

PC ← PC + k + 1

ijmp

Salto indirecto a (Z).

PC ← Z

rcall

k

Llamada relativa a subrutina.

PC ← PC + k + 1

icall

Llamada indirecta a subrutina en (Z).

PC ← Z

Instrucción rjmp

rjmp significa salto relativo (relative jump, en inglés). En este tipo de salto el operando k, que en este caso representa una distancia relativa, se suma al contenido actual del contador de programa (PC, por sus siglas en inglés), lo que causa que éste continúe su ejecución en una nueva dirección. En lenguaje ensamblador esta distancia se define por medio de una etiqueta, que el ensamblador se encarga de calcular. Esta distancia no debe exceder de 2048, hacia adelante (valor positivo) o hacia atrás (valor negativo).

Ejemplo de uso:
 loop:
 inc r16
 rjmp loop

En este ejemplo, el salto relativo es rjmp loop, que "apunta" a la etiqueta de la instrucción inc r16, que como está antes del salto relativo ocupa una dirección menor en la memoria; por lo tanto, en este caso k deberá ser un valor negativo, pero de eso se encarga el ensamblador, nosotros no debemos preocuparnos por eso.

Instrucción ijmp

ijmp significa salto indirecto (indirect jump, por sus siglas en inglés). Para ejecutar este tipo de operando es necesario guardar previamente en el registro Z (concatenación de los registros 30 y 31) la dirección a la que se desea realizar el salto. El siguiente ejemplo ilustra su uso:
 ldi zh,high(16384)
 ldi zl,low(16384)
 :
 ijmp
La instrucción ldi zh,high(16384) guarda el byte alto de la dirección 16386, valor que se convierte a 16 bits, en el registro zh (r31). La instrucción ldi zl,low(16384) guarda en zh (r30) el byte bajo de 16384.

En este ejemplo, el salto indirecto llevará al procesador a ejecutar la instrucción almacenada en la dirección 16384 y continuará en la 16385, y así sucesivamente.

Las llamadas a procedimientos rcall e icall las veremos más adelante, en otra sección del curso.

Tema 4.3 Saltos Condicionales

Antes de entrar de lleno en las instrucciones de salto condicional, vamos a conocer con más detalle el registro de estado (SREG) de los procesadores AVR.

Registro de estado
En los procesadores AVR este registro se encuentra direccionado en el espacio de E/S en la dirección $3F, y está definido como:
Bit/Nombre/Valor inicial

...

Descargar como (para miembros actualizados) txt (22 Kb) pdf (249 Kb) docx (875 Kb)
Leer 14 páginas más »
Disponible sólo en Clubensayos.com