miércoles, 10 de junio de 2015

Control de Flujo

Instrucciones de flujo de control o de bifurcación y salto 
Las instrucciones de flujo de control son aquellas instrucciones que alteran el orden secuencial de la ejecución de un programa. También hay instrucciones que posibilitan la interrupción de la ejecución o saltar a ejecutar otro programa. Cuando termina cualquiera de estas instrucciones, el programa continúa ejecutándose desde el punto en el que se interrumpió.

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.

·         SHL (Shift Left = desplazamiento a la izquierda)

 Se desplazan a la izquierda los bits del operando destino tantas posiciones como indique el operando fuente. El desplazamiento de una posición se realiza de la siguiente forma: el bit de mayor peso del operando se desplaza al bit CF del registro de estado, el resto de los bits se desplazan una posición hacia la izquierda, y la posición de menor peso se rellena con un 0.

 https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGOGYKZJ5n31RijIpQfge7lcxmrvVRBQ_aakRVOSfG9L1Vz9eDedF0AB-xFz3IcqSYJowhrAjL6fcNHP41dan6DVb5XfSxLzte4tdXYpBTDH9-eQI6aQ8YKrK2yQkpvXmwm7DR4yD-tBU/s1600/shl.jpg



 ·         SAL (Shift Arithmetic Left = desplazamiento aritmético a la izquierda)

 El objetivo de un desplazamiento aritmético a la izquierda es multiplicar un operando, interpretado con signo, por una potencia de 2.

Para llevar a cabo este tipo de desplazamiento, hay que desplazar los bits del operando hacia la izquierda introduciendo ceros por su derecha.

 Nota:   En realidad, este tipo de desplazamiento es idéntico al llevado a cabo por la instrucción shl; por tanto, sal y shl son de hecho la misma instrucción y se codifican con el mismo código máquina. 

·         SHR (Shift Right = desplazamiento a la derecha)

 La instrucción shr funciona de la misma forma que shl, pero desplazando los bits a la derecha en lugar de a la izquierda.
 


·         SAR (Shift Arithmetic Right = desplazamiento aritmético a la derecha)

 Esta instrucción desplaza los bits del operando destino a la derecha tantos bits como indique el operando fuente. Esta forma de funcionamiento es similar a la de la instrucción shr; sin embargo, ambas instrucciones se diferencian en que sar, en vez introducir ceros por la izquierda del operando, replica el bit de mayor peso (bit de signo) en cada desplazamiento.


 

Instrucciones Aritmeticas Logicas


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: 
 
SUMA CON ACARREO:
Exactamente igual que la anterior, pero se suma también el indicador de acarreo del registro “F”. De esta forma, se puede incluir en la suma el acarreo procedente de una suma anterior. Su esquema sería: 
 
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) 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: 
 
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: 
 
INCREMENTO:
Consiste en sumar uno al contenido de un registro que se especifica en la instrucción. Su esquema es: 
 
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: 
 
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”. 
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: 

     Instrucciones lógicas

incluyen las operaciones que se realizan con los operadores “AND”, “OR” y “XOR”. 
AND 
and AL, BL       al AND bl –> al
OR 
or AL, BL       al OR bl –> al
XOR 
xor AL, BL       al XOR bl –> al
NOT 
Esta instruccion logica consiste en negar cualquier otra instruccion invirtiendo sus valores.
 
Las instrucciones lógicas de dos operandos (and, or y xor) ponen siempre a ‘0’ los bits CF y OF de registro de estado después de ejecutarse (debe tenerse en cuenta que el estado de estos bits sólo tiene significado tras la ejecución de las instrucciones aritméticas). Los bits SF y ZF se modifican siguiendo los mismos criterios que en las instrucciones aritméticas. 
La instrucción lógica de un operando (not) no modifica ningún bit del registro de estado tras su ejecución.

Modos de Direccionamiento


  Los llamados Modos de Direccionamiento son las diferentes maneras de especificar en informática un operando dentro de una instrucción en lenguaje ensamblador. Un modo de direccionamiento 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.

 Los ordenadores utilizan técnicas de direccionamiento con los siguientes fines:
1 – Dar versatilidad de programación al usuario, proporcionandofacilidades tales como índices, direccionamientos indirectos, etc., estaversatilidad sirve para manejar estructuras de datos complejas comovectores, matrices, etc.
2 – Reducir el número de bits del campo de operando.Es tal la importancia de los modos de direccionamiento que la potencia de una maquina se mide tanto por su repertorio de instrucciones como por la variedad demodos de direccionamiento que es capaz de admitir.

Tipos de Modos de Direccionamiento:

  •  Inmediato: En la instrucción está incluido directamente el operando.En este modo el operando es especificado en la instrucción misma. Enotras palabras, una instrucción de modo inmediato tiene un campo deoperando en vez de un campo de dirección.El campo del operando contiene el operando actual que se debe utilizaren conjunto con la operación especificada en la instrucción. Lasinstrucciones de modo inmediato son útiles para inicializar los registros enun valor constante.Cuando el campo de dirección especifica un registro del procesador, lainstrucción se dice que está en el modo de registro.

     

  •  Directo: El campo de operando en la instrucción contiene la dirección en memoriadonde se encuentra el operando.En este modo la dirección efectiva es igual a la parte de dirección de lainstrucción. El operando reside en la memoria y su dirección es dadadirectamente por el campo de dirección de la instrucción. En unainstrucción de tipo ramificación el campo de dirección especifica ladirección de la rama actual.Con este tipo de direccionamiento, la dirección efectiva es contenida en lamisma instrucción, tal como los valores de datos inmediatos que soncontenidos en la instrucción. Un procesador de 16 bits suma la direcciónefectiva al contenido del segmento de datos previamente desplazado en 4bits para producir la dirección física del operando. 
  • Indirecto: El campo de operando contiene una dirección de memoria, en la que seencuentra la dirección efectiva del operando.
  •  De Registro: Sirve para especificar Operandos que están en registros.

  • De Desplazamiento: Combina el modo directo e indirecto mediante registros.
  • 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 (tipoLIFO), las cuales están marcados por el fondo de la pila y el puntero depila (*SP), El puntero de pila apunta a la última posición ocupada. Así,como puntero de direccionamiento usaremos el SP. El desplazamientomás el valor del SP nos dará la dirección del objeto al que queramos hacerreferencia. En ocasiones, si no existe C. de desplazamiento solo setrabajara con la cima de la pila. Este tipo de direccionamiento nos aportaflexibilidad pero por el contrario, es mucho más complejo que otros tipostratados anteriormente.
 

Lenguaje Ensablador

 El lenguaje ensamblador es el lenguaje de programación utilizado para escribir programas informáticos de bajo nivel, y constituye la representación más directa del Código máquina específico para cada arquitectura de computadoras legible.
La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en él se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar.
Caracteristicas:
  • El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido directamente por un ser humano ya que su estructura se acerca más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
  • El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un Microprocesador, suele necesitar ser modificado, muchas veces en su totalidad para poder ser usado en otra máquina distinta, aun con el mismo Microprocesador, solo pueden ser reutilizados secciones especiales del código programado.
  • Los programas hechos en lenguaje ensamblador, al ser programado directamente sobre Hardware, son generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel. 
  • Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un Microprocesador por lo que se pueden crear segmentos de código difíciles de programar en un lenguaje de alto nivel.
  • También se puede controlar el tiempo en que tarda una Rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.
  • El lenguaje ensamblador es un código estructurado y gravitatorio desarrollado sobre un archivo de programación (.ASM), en el cual pueden existir varios programas, macros o rutinas que pueden ser llamados entre si.