martes, 9 de junio de 2015

Control de flujo

Es el proceso de gestionar la tasa de transmisión de datos entre dos nodos, para prevenir que un transmisor rápido exceda a un receptor lento. Provee un mecanismo para que el receptor controle la velocidad de transmisión, para que el nodo receptor no se sature de datos que llegan del nodo emisor. 


El control de flujo debe distinguirse del control de congestión, que es usado para controlar el flujo de datos cuando la congestión ya está ocurriendo.



Tipos de control de flujo


  •  Congestión de red: un mecanismo de prevención que provee control sobre la cantidad de datos transmitidos que entra a un dispositivo. 
  • Windowing Flow control: mecanismo empleado con TCP. 
  • Buffer de datos: un mecanismo de prevención que provee almacenamiento para contener datos, compensando la variación en las velocidades de transmisión de datos. 

Instrucciones de desplazamiento
Las instrucciones de desplazamiento son cuatro: shl, shr, sar y sal; y su objetivo es desplazar los bits de un operando un determinado número de posiciones a la izquierda o a la derecha. La estructura de los operandos manejados por estas instrucciones y su significado es idéntico para las cuatro instrucciones.


Instrucciones aritmetico-Logicas

El microprocesador Z-80 dispone de una unidad aritmética-lógica que le permite realizar una serie de operaciones, tanto aritméticas, como lógicas. Las aritméticas incluyen la suma y resta con o sin acarreo, incremento y decremento de un registro, comparaciones, ajuste decimal, complemento y negación. Las lógicas incluyen las operaciones que se realizan con los operadores "AND", "OR" y "XOR".
Antes de adentrarnos en el estudio de las instrucciones concretas, daremos una serie de definiciones útiles:

SUMA SIN ACARREO

Consiste en sumar al contenido del registro "A" un número y obtener el resultado en el registro "A". El indicador de acarreo no se tiene en cuenta para esta operación. Su esquema sería:
 A+n
SUMA CON ACARREO

Exactamente igual que la anterior, pero se suma también el indicador de acarreo del registro "F". De esta forma, sepuede incluir en la suma el acarreo procedente de una suma anterior. Su esquema sería:
 A+n+CF
RESTA SIN ACARREO

Consiste en restar un número del contenido del registro "A", y obtener el resultado en este mismo registro. El indicador de acarreo no interviene en la operación. Se consideran números negativos los superiores a 127 (7Fh) de la forma que se explicó en el capítulo relativo a los sistemas de numeración; es decir, el número 255 (FFh) se considera "-1", el 254 (FEh) se considera "-2" y así sucesivamente, hasta 128 (80h) que se considera "-128". El paso de 127 a 128 o viceversa se indica poniendo a "1" el flag de "overflow" (P/V) del registro "F". Su esquema sería:
 A-n
RESTA CON ACARREO

Igual que el anterior, salvo que también se resta el indicador de acarreo (CF) del registro "F". Su esquema sería:
 A-n-CF
INCREMENTO

Consiste en sumar uno al contenido de un registro que se especifica en la instrucción. Su esquema es:
 R+1
Donde "R" representa un registro cualquiera de 8 a 16 bits. Si se trata de un registro doble (de 16 bits) se incrementa el registro de orden bajo (por ejemplo, en el "BC" se incrementa "C"), y si ello hace que este pase a valer "0", se incrementa también el de orden alto.
DECREMENTO:
Es la inversa de la anterior, consiste en restar uno al contenido de un registro. Su esquema es:
 R-1
Si se trata de un registro doble, se decrementa el de orden bajo y, si esto hace que pase a valer 255 (FFh), se decrementa también el de orden alto.
Si el registro incrementado o decrementado es de 8 bits, resultan afectados los indicadores del registro "F".

COMPARACIONES

Estas instrucciones permiten comparar el contenido del acumulador con un número. Para ello, se resta el número del contenido del acumulador, pero el resultado no se almacena en ninguna parte, simplemente, se alteran determinados flags del registro "F", lo que nos indica si el número era menor, igual o mayor que el contenido del acumulador. Si era igual, se pone a "1" el flag "Z" (indicador de "cero"). Si el número era mayor, se pone a "1" el flag "S" (indicador de "signo").

AJUSTE DECIMAL

Esta instrucción realiza un ajuste del contenido del acumulador para que, en vez de estar comprendido entre "00h" y "FFh", lo esté entre "00h" y "99h". Si se produce acarreo, se indica mediante el flag correspondiente. Para realizar esta operación se toma en cuenta el estado de los indicadores de "acarreo" (C) y "semi-acarreo" (H). Su finalidad es la de permitir realizar operaciones en "BCD" (Decimal Codificado en Binario).
COMPLEMENTO:
Consiste en realizar un "complemento a 1" del acumulador, es decir, cambiar los "unos" por "ceros" y los "ceros" por "unos".
NEGACIÓN:
Consiste en realizar un "complemento a 2" del acumulador, es decir, realizar un "complemento a 1" y, luego, sumarle "1". Lo que se obtiene es el "negativo" del número que teníamos en el acumulador. El efecto es el mismo que si restáramos el acumulador de "cero", es decir:
 0-A
EL FLAG DE ACARREO

Existen dos instrucciones que afectan al indicador de acarreo del registro "F", es posible ponerlo a "1" o "complementarlo" (ponerlo a "1" si era "0" y viceversa). No se ha previsto una instrucción para poner a "0" el flag de acarreo, dado que esto se puede conseguir haciendo un "AND" o un "OR" del acumulador consigo mismo.


Modos de direccionamiento

Los modos de direccionamiento son las diferentes maneras de especificar en informatica un operando dentro de una instrucción en lenguaje ensamblador. Este, especifica la forma de calcular la dirección de memoria efectiva de un operando mediante el uso de la información contenida en registros y / o constantes, contenida dentro de una instrucción de la máquina o en otra parte.
Tipos de direccionamiento:
1. Implicito
 En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita, ya que en el propio código de operación se conoce la dirección del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar.
Supongamos una arquitectura de pila, las operaciones aritméticas no requieren direccionamiento explícito por lo que se ponen como:
- add
- sub
...
¿Por qué? Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila:
Ejemplo de una pila
1 2 3 4 5 6 <- pila
top() es 1
ntop() es 2
donde top() representa el tope de la pila y ntop() el siguiente al tope de la pila y son estos argumentos con los que se opera al llamar a una orden en concreto.
2. Inmediato
En este modo el operando es especificado en la instrucción misma. En otras palabras, una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante.
Cuando el campo de dirección especifica un registro del procesador, la instrucción se dice que está en el modo de registro.
DireccionamientoInmediato.png
ejemplo:MOV A,#17H

3.  Directo
El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando.
En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección de la rama actual.
DireccionamientoDirecto.png
Ejemplo: MOV A,17H
4. Indirecto
El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando.
DireccionamientoIndirecto.png
Ejemplo: MOV A,@17H
5.Absoluto
El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. Y no se cancela.
6. De registro
Sirve para especificar operandos que están en registros. En este modo, los operandos están en registros que residen dentro de la CPU
DireccionamientoRegistro.png

7. De desplazamiento
Combina el modo directo e indirecto mediante registros
8. De pila
Se utiliza cuando el operando está en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila(tipo LIFO), las cuales están marcados por el fondo de la pila y el puntero de pila (*SP), El puntero de pila apunta a la última posición ocupada. Así, como puntero de direccionamiento usaremos el SP. El desplazamiento más el valor del SP nos dará la dirección del objeto al que queramos hacer referencia. En ocasiones, si no existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de direccionamiento nos aporta flexibilidad pero por el contrario, es mucho más complejo que otros tipos estudiados más arriba.

Lenguaje ensamblador

Lenguaje ensamblador: Es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, micro controladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador.

Sus características son:

  •   El único lenguaje que entienden los microcontroladores es el código máquina formado por ceros y unos del sistema binario.


  •    El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en código máquina.


  •  El lenguaje ensamblador trabaja con nemónicos, que son grupos de caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar.

  •   La traducción de los nemónicos a código máquina entendible por el microcontrolador la lleva a cabo un programa ensamblador.