domingo, 16 de octubre de 2016

LENGUAJE ENSAMBLADOR

DEFINICIÓN

Resultado de imagen para lenguaje ensambladorEl lenguaje ensamblador, o assembler (en inglés assembly language y la abreviación asm) es un lenguaje de programación de bajo nivel.

Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores 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 de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador.

Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual).

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. 

También es utilizado en el desarrollo de controladores de dispositivo (en inglés, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.

CARACTERÍSTICAS
    Resultado de imagen para LENGUAJE ENSAMBLADOR
  • El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.
  • Difícilmente portable, es decir, un código escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra máquina distinta. Al cambiar a una máquina con arquitectura diferente, generalmente es necesario reescribirlo completamente.
  • Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. 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 y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes 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.

VENTAJAS - DESVENTAJAS

VENTAJAS
  • Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la máquina la computadora lo procesa mas rápido.
  • Eficiencia de tamaño: Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel
  • Flexibilidad: Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite

DESVENTAJAS
  • Tiempo de programación: Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución.
  • Programas fuente grandes: Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.
  • Peligro de afectar recursos inesperadamente: Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicie. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel.
  • Falta de portabilidad: Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

INSTRUCCIONES - REGISTROS

INSTRUCCIONES


ARITMÉTICAS: Se usa para la realizar operaciones aritméticas sobre los operandos.
ADD: Suma los operandos y guarda el resultado en el operando destino.
SUB: Resta el operando fuente del destino.
DIV: El divisor puede ser un byte o palabra y es el operando que se la da instrucción.
IDIV: Consiste basicamente en lo mismo que la instrucción DIV, solo que esta ultima realiza la operación con signo.
MUL: El ensambldor asume que el multiplicando sera del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.

LÓGICAS: Son utilizadas para realizar operaciones lógicas sobre los operandos.
AND: Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operandos.
OR: Lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos .
XOR: Su función efectuar bit por bit la disyunción exclusiva lógica de los dos operandos.
TEST: Realiza una conjunción, bit por bit, de los operandos, pero a diferencia de AND esta instrucción no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas.
NEG: Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando.
NOT: Lleva a cabo la negación bit por bit del operando destino

TRANSFERENCIA: Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar con diferentes modos de direccionamiento.
MOV: Transferencia de datos entre celdas de memoria, registros y acumulador.
MOVS: Mover cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI.

CARGA: Son instrucciones específicas de los registros. Son usadas para cargar en algún registro bytes o cadenas de bytes.
LODS: Toma la cadena que se encuentre en la dirección especificada por SI, la carga al registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la transferencia es de bytes o 2 si la transferencia es de palabras.
LAHF: Esta instrucción es útil para verificar el estado de las banderas durante la ejecución de nuestro programa.
LDS: El operando fuente debe ser una palabra doble en memoria. La palabra asociada con la dirección mas grande es transferida a DS, o sea que se toma como la dirección del segmento. La palabra asociada con la dirección menor es la dirección del desplazamiento y se deposita en el registro señalado como destino.
LEA: El operando fuente debe estar ubicado en memoria, y se coloca su desplazamiento en el registro índice o apuntador especificado en destino.
LES: El operando fuente debe ser un operando en memoria de palabra doble. El contenido de la palabra con la dirección mayor se interpreta como la dirección del segmento y se coloca en ES. La palabra con la dirección menor es la dirección del desplazamiento y se coloca en el registro especificado en el parámetro destino.

PILA: Estas instruciones permiten el uso de la pila para almacenar y extraer datos.
POP: Esta instrucción transfiere el último valor almacenado en la pila al operando destino, después incrementa en dos el registro SP.
POPF: Este comando transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas.
PUSH: La instrucción PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva dirección resultante en el registro recién modificado.
PUSHF: Decrementa en 2 el valor del registro SP y luego se transfiere el contenido del registro de banderas a la pila, en la dirección indicada por SP.

REGISTROS

Registros de uso general
AX: Acumulador (AL:AH)
BX: Registro base (BL:BH)
CX: Registro contador (CL:CH)
DX: Registro de datos (DL:DH)

Registros de segmento (Solo se pueden usar para los usos mencionados a excepción de ES)
DS: Registro del segmento de datos
ES: Registro del segmento extra
SS: Registro del segmento de pila
CS: Registro del segmento de código

Registros punteros (También pueden tener uso general)
BP: Registro de apuntadores base
SI: Registro índice fuente
DI: Registro ìndice destino

Registros especiales (Solo se pueden usar para los usos mencionados)
SP: Registro apuntador de la pila
IP: Registro apuntador de la siguiente instrucción
F: Registro de banderas (8 bits)

Bits del registro de banderas

Overflow
NV (Apagado): No hay desbordamiento
OV (Encendido): Si lo hay

Direction
UP: Hacia adelante
DN: Hacia atras

Interrupts
DI: Desactivadas
EI: Activadas

Sign
PL: Positivo
NG: Negativo

Zero
NZ: No es cero
ZR: Si lo es

Auxilary carry
NA: No hay acarreo auxiliar
AC: Hay acarreo auxiliar

Parity
PO: Impar
PE: Paridad par

Carry
NC: No hay acarreo
CY: Si lo hay


EJEMPLOS

Es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS).

; ---------------------------------------------
; Programa que imprime un string en la pantalla
; ---------------------------------------------
	.model small              ; modelo de memoria

	.stack                    ; segmento del stack

	.data                     ; segmento de datos
	Cadena1 DB 'Hola Mundo.$' ; string a imprimir (finalizado en $)

	.code                     ; segmento del código

; ---------------------------------------------
; Inicio del programa
; ---------------------------------------------
	programa:
		; ----------------------------------------------------------------------------------------------------
		; inicia el segmento de datos
		; ----------------------------------------------------------------------------------------------------
		MOV AX, @data          ; carga en AX la dirección del segmento de datos
		MOV DS, AX             ; mueve la dirección al registro de segmento por medio de AX
		
		; ----------------------------------------------------------------------------------------------------
		; Imprime un string en pantalla
		; ----------------------------------------------------------------------------------------------------
		MOV DX, offset Cadena1 ; mueve a DX la dirección del string a imprimir
		MOV AH, 9              ; AH = código para indicar al MS DOS que imprima en la pantalla, el string en DS:DX
		INT 21h                ; llamada al MS DOS para ejecutar la función (en este caso especificada en AH)
		
		; ----------------------------------------------------------------------------------------------------
		; Finaliza el programa
		; ----------------------------------------------------------------------------------------------------
		INT 20h                ; llamada al MS DOS para finalizar el programa

	end programa

RESUMEN


El Lenguaje Ensamblador proporciona las herramientas para tomar control sobre todo lo que la computadora realiza físicamente.

Proporciona un control absoluto sobre la PC. Los programas en ensamblador son rápidos y compactos. Una instrucción mal interpretada o un error de lógica se vuele mas compleja.

Es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.

SUMMARY

Assembler Language provides the tools to take control over everything that computer physically performed.

It provides complete control over the PC. Assembler programs are fast and compact. A misunderstood instruction or a logic error will fly more complex.

It is a type of low-level language used to write computer programs, and is the most direct representation of specific machine code for each computer architecture readable by a programmer.

CONCLUSIONES

El lenguaje ensamblador a pesar de ser mas rápido de cualquier otro lenguaje es también el mas complejo por eso es utilizado para complementar los limitantes de los lenguajes de programación de alto nivel. Pero existen ramas donde es imprescindible el uso de lenguaje ensamblador como lo es la electrónica donde los recursos de los aparatos son limitados y es necesario utilizar lenguaje ensamblador.

GLOSARIO DE TÉRMINOS

ASM: assembly language (Lenguaje emsamblador)

BIBLIOGRAFÍA O LINKOGRAFÍA
  • https://es.wikipedia.org/wiki/Lenguaje_ensamblador
  • http://www.monografias.com/trabajos14/lenguaje-ensamblador/lenguaje-ensamblador.shtml#ve
  • https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_lenguaje_ensamblador/Primeros_conceptos#Registros_de_la_CPU
  • http://html.rincondelvago.com/ensamblador.html
Video relacionado al tema


miércoles, 12 de octubre de 2016

PROGRAMACIÓN DE MICROCONTROLADOR

DEFINICIÓN

Procesador con su sistema mínimo en un chip (incluye memoria para programa y datos, periféricos de entrada / salida, conversores análogo – digital (AD) y digital – análogo (DA), módulos especializados en la transmisión y recepción de datos).

La compañía Microchip Technology ofrece una serie de circuitos integrados que denomina "controladores de interfaz de periféricos" o microcontroladores PIC. Combinan un microprocesador, la memoria y la interfaz en un solo chip, ofreciendo a los desarrolladores profesionales, técnicos y aficionados, una plataforma fácil de usar y de bajo costo para el desarrollo de sistemas electrónicos controlados por software. Los microcontroladores PIC vienen en una variedad de capacidades, desde simples unidades de 8 bits hasta sofisticados chips de más de 32 bits.

CARACTERÍSTICAS
  • Arquitectura Harvard, procesador segmentado.
  • Se aplica la técnica de segmentación ("pipe-line") en la ejecución de las instrucciones.
  • El formato de todas las instrucciones tiene la misma longitud.
  • Procesador RISC (Computador de Juego de Instrucciones Reducido).
  • Todas las instrucciones son ortogonales.
  • Arquitectura basada en un banco de registros.
  • Prácticamente todos los PIC se caracterizan por poseer unos mismos recursos mínimos.
  • Modelos de arquitectura cerrada y de arquitectura abierta.
  • Diversidad de modelos de microcontroladores.
  • Amplio margen de alimentación y corrientes de salida elevadas.
  • Herramientas de soporte potentes y económicas.
  • Compatibilidad software entre los modelos de la misma gama.
  • Sencillez de uso y herramientas de desarrollo sencillas y baratas.
  • Código compacto y rápido.
  • Poco consumo y amplio rango de voltajes de alimentación. 
  • Pequeño tamaño y gran variedad de encapsulados.

LENGUAJE DE PROGRAMACIÓN - PROTEUS | PIC C | LENGUAJE C | VISUAL BASIC | ASSEMBLER

PROTEUS

Es software de automatización de diseño electrónico, desarrollado por Labcenter Electronics Ltd, que consta de los dos programas principales: Ares e Isis, y los módulos VSM y Electra.
  • ISIS: permite diseñar el plano eléctrico del circuito que se desea realizar con componentes muy variados, desde simples resistencias, hasta alguno que otro microprocesador o microcontrolador, incluyendo fuentes de alimentación, generadores de señales y muchos otros componentes con prestaciones diferentes. Los diseños realizados en Isis pueden ser simulados en tiempo real, mediante el módulo VSM, asociado directamente con ISIS.
  • VSM: Es una extensión integrada con ISIS, con la cual se puede simular, en tiempo real, con posibilidad de más rapidez; todas las características de varias familias de microcontroladores, introduciendo nosotros mismos el programa que controlará el microcontrolador y cada una de sus salidas, y a la vez, simulando las tareas que queramos que lleve a cabo con el programa. Se pueden simular circuitos con microcontroladores conectados a distintos dispositivos, como motores eléctricos, pantallas de cristal líquido (LCD), teclados en matriz, etc.
  • ARES: Es la herramienta de enrutado, ubicación y edición de componentes, se utiliza para la fabricación de placas de circuito impreso, permitiendo editar generalmente, las capas superficial (Top Copper), y de soldadura (Bottom Copper).
  • ELECTRA: El cual, una vez colocados los componentes trazará automáticamente las pistas realizando varias pasadas para optimizar el resultado.

PIC C

Es una herramienta que permite programar un microcontrolador por medio de lenguaje C, a diferencia del lenguaje máquina o ensamblador (ASM) que se maneja por defecto, este hace los programas más fáciles de escribir, analizar y comprender. PIC C ha sido desarrollado por PIC CMU, y cuenta con una gran cantidad de librerías o drivers que permiten optimizar los programas en el momento de manejar dispositivos externos, tales como pantallas LCD, memorias, conversores, etc.

LENGUAJE C

Es uno de los lenguajes de programación estructurada más utilizados en nuestros días. El principal componente estructural de C es la función. En C, las funciones son bloques en los cuales ocurren las actividades de un programa. Esto nos permite separar los programas en tareas, lo que nos conduce a la programación modular. Otra forma de estructurar en C es usando bloques de códigos. Un bloque de código es un grupo de instrucciones conectadas lógicamente el cual es tratado como una unidad. Un bloque está construido por un conjunto de instrucciones colocadas entre llaves { }.

VISUAL BASIC
Es un lenguaje de programación dirigido por eventos, desarrollado por Alan Cooper para Microsoft.

Ha sido desarrollado con el objetivo de entregar a los usuarios de programación informática un paquete de utilidades simples y accesibles. Es por esto que el Visual Basic puede ser usado y fácilmente comprendido por expertos como también por usuarios principiantes. Su base parte del dialecto BASIC pero con componentes novedosos que lo adaptan a los lenguajes informáticos modernos. A esto se suma que el Visual Basic es además un lenguaje de programación guiado por eventos que permite mayor operatibilidad y mejores resultados.

ASSEMBLER
Es un programa que toma las instrucciones básicas de computación y las convierte en un patrón de bits (ceros y unos) que el procesador de la computadora puede utilizar para realizar sus operaciones básicas.

En el pasado, programadores tenían que hacer todos sus trabajado en un código que entendiera la computadora (es decir, binarios o ceros y unos). Con la introducción de los lenguajes en “assembly”, este aceleró el proceso de desarrollo siendo un intermediario entre el programador y el lenguaje en maquina (0s y 1s). Programación en “assembler” poco a poco a quedado en desuso, sólo utilizado cuando queremos ser eficiente en el control de las operaciones del procesador.

EJEMPLOS

PIC C

Un programa en PIC C se puede hacer de dos formas distintas, ya sea creando un proyecto o simplemente escribiendo el código completo directamente en un archivo con extensión ".C" (más adelante se tratará este tema), cualquiera que sea el caso que se vaya a usar, la estructura es prácticamente la misma:

Estructura programa C

LENGUAJE C

El siguiente programa imprime en pantalla la frase "Hola Mundo" (C99).

// necesario para utilizar printf() 
# include <stdio.h> 

 int main(void) { 
      printf("Hola Mundo\n"); 
      return 0; 
}

El siguiente escribe "Hola Mundo" en C89

/* comentarios con '//' no permitidos en C89, sí en C99 */ 
# include <stdio.h> /* necesario para utilizar printf */  

main() /* tipo 'int' de retorno implícito */ 
        printf ("Hola Mundo\n") ; 
        return 0; 
}

Estructura de control "else if"

if (condicion 1) { 
    sentencia 1 
} else if (condicion 2){ 
   sentencia 2 
} else if (condicion n){ 
   sentencia n 
} else { 
   sentencias por defecto 
}

VISUAL BASIC

El siguiente fragmento de código muestra un cuadro de mensaje, en una ventana, que dice "¡Hola, mundo!":

Private Sub Form_Load() 
     MsgBox ("¡Hola, mundo!") 
End Sub

ASSEMBLER

Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables por un microprocesador.

Por ejemplo, en el lenguaje ensamblador para un procesador x86:

La sentencia: MOV AL, 61h

Asigna el valor hexadecimal 61 (97 decimal) al registro "AL".

El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje de máquina: Binario: 10110000 01100001 (hexadecimal: B61)

El mnemónico MOV es un código de operación u "opcode". El opcode es seguido por una lista de argumentos o parámetros, completando una típica instrucción de ensamblador. En el ejemplo, AL es un registro de 8 bits del procesador, al cual se le asignará el valor hexadecimal 61 especificado.

El código de máquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene empaquetado la instrucción MOV y el código del registro hacia donde se va a mover el dato:


En el segundo byte se especifica el número 61h, escrito en binario como 01100001, que se asignará al registro AL, quedando la sentencia ejecutable como: 10110000 01100001

La cual puede ser entendida y ejecutada directamente por el procesador.

RESUMEN

El juego de instrucciones de un microprocesador o microcontrolador es el conjunto de entradas binarias que producen acciones definidas durante un ciclo de instrucción. Un juego de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una puerta lógica, un registro de desplazamiento o un sumador. Por supuesto, las acciones que realiza un microcontrolador con cada instrucción, son más complejas que las que realizan los dispositivos y puertas.

Una instrucción es un patrón de dígitos binarios el cual debe estar a disposición del microcontrolador en el tiempo y forma que éste lo requiera.

SUMMARY

The instruction set of a microprocessor or microcontroller is the set of binary inputs that produce defined actions during one instruction cycle. A set of instructions for the microcontroller is the same as a truth table for a logic gate, a shift register or an adder. Of course, the actions taken by a microcontroller with each instruction, are more complex than those made devices and doors.

An instruction is a pattern of bits which must be available to the microcontroller in the time and manner it requires.

RECOMENDACIONES

Los micrconctoladores son computadores digitales integrados en un chip que cuentan con un Microprocesador o unidad de procesamiento central (CPU), una memoria para almacenar el programa, una memoria para almacenar datos y puertos de entrada salida. A diferencia de los microprocesadores de propósito general, como los que se usan en los computadores PC, los microcontroladores son unidades autosuficientes y más económicas. 

CONCLUSIONES

El funcionamiento de los microcontroladores está determinado por el programa almacenado en su memoria. Este puede escribirse en distintos leguajes de programación. Además, la mayoría de los microcontroladores actuales pueden reprogramarse repetidas veces. Por las características mencionadas y su alta flexibilidad, los microcontroladores son ampliamente utilizados como el cerebro de una gran variedad de sistemas embebidos que controlan maquinas, componentes de sistemas complejos, como aplicaciones industriales de automatización y robótica, domotica, equipos médicos, sistemas aeroespaciales, e incluso dispositivos de la vida diaria como automóviles, hornos de microondas, teléfonos y televisores.

APRECIACIÓN PERSONAL

Los microcontroladores están invadiendo el mundo. Están presentes en nuestra casa, en nuestro trabajo y en nuestra vida. Se pueden encontrar controlando los hornos microondas y los televisores de nuestro hogar, en los teclados y ratones de los computadores y en los automóviles. En el bolsillo llevamos unos cuantos entre los del teléfono móvil, los que tienen las modernas llaves del coche y los mandos a distancia del garaje y la alarma doméstica. Pero la invasión acaba de comenzar la conquista masiva de estos diminutos computadores, que gobernarán la mayor parte de los aparatos que fabricamos y usamos los humanos.

GLOSARIO DE TÉRMINOS

ISIS: Intelligent Schematic Input System (Sistema de Enrutado de Esquemas Inteligente)
VSM: El Virtual System Modeling (Sistema Virtual de Modelado)
ARES: Advanced Routing and Editing Software (Software de Edición y Ruteo Avanzado)
ELECTRA: Electra Auto Router

BIBLIOGRÁFICA O LINKOGRAFÍA
  • http://perso.wanadoo.es/pictob/micropic.htm#informacion_sobre_pic
  • https://www.ecured.cu/Microcontroladores_PIC.
  • http://edii.uclm.es/~miniesta/mc_pic_1.pdf
  • https://sites.google.com/site/incoelectronicasas/mini-tutos/-como-programar-un-microcontrolador-con-pic-c
  • http://fcqi.tij.uabc.mx/usuarios/palacios/Parte2.pdf
  • http://www.definicionabc.com/tecnologia/visual-basic.php
  • http://www.digitalika.com/2011/06/assembler-definicion-de-hoy/

lunes, 10 de octubre de 2016

MICROCONTROLADOR



DEFINICIÓN:

fig0-20Es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: CPU, Memoria y Unidades de entrada y salida, es decir, se trata de una computadora completa en un solo circuito integrado programable y se destina a gobernar una sola tarea con el programa que reside en su memoria. Sus líneas de entrada/salida soportan el conexionado de los sensores y actuadores del dispositivo a controlar.

Una vez programado y configurado el microcontrolador solamente sirve para gobernar la tarea asignada. El microcontrolador esa formado por un microprocesador y el conjunto de subsistemas que normalmente requiere un microprocesador: memoria volátil(calculo temporal), memoria no volátil(donde almacena el programa), entrada y salida.

Un microcontrolador difiere de una CPU normal, debido a que es más fácil convertirla en una computadora en funcionamiento, con un mínimo de chips externos de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a la fuente de energía y de información que necesite, y eso es todo. 

Un microprocesador tradicional no le permitirá hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips. Hay que agregarle los modulos de entrada/salida (puertos) y la memoria para almacenamiento de información.

al-mundo-de-los-microcontroladores-chapter-01-fig0-1Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda controlar algún proceso es necesario generar o crear y luego grabar en la EEPROM o equivalente del microcontrolador algún programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje para microcontroladores; sin embargo, para que el programa pueda ser grabado en la memoria del microcontrolador, debe ser codificado en sistema numérico hexadecimal que es finalmente el sistema que hace trabajar al microcontrolador cuando éste es alimentado con el voltaje adecuado y asociado a dispositivos analógicos y discretos para su funcionamiento.

CARACTERÍSTICAS:

  • Están diseñados para reducir el costo económico y el consumo de energía de un sistema en particular. El control de un electrodoméstico sencillo como una batidora utilizará un procesador muy pequeño (4 u 8 bits), en un reproductor de música y/o vídeo digital (MP3 o MP4) requerirá de un procesador de 32 bits o de 64 bits y de uno o más códecs de señal digital (audio y/o vídeo).
  • Se usa en cualquier dispositivo electrónico como automóviles, lavadoras, hornos, microondas, teléfonos, etc.
  • Es más fácil programar y convertirla en una computadora en funcionamiento, con un mínimo de circuitos integrados externos de apoyo.
  • Un microcontrolador típico tendrá un generador de reloj integrado y una pequeña cantidad de memoria de acceso aleatorio y/o ROM/EPROM/EEPROM/flash.
  • Los modernos microcontroladores frecuentemente incluyen un lenguaje de programación integrado, como el lenguaje de programación BASIC que se utiliza bastante con este propósito.
  • Los microcontroladores negocian la velocidad y la flexibilidad para facilitar su uso.


ARQUITECTURAS:

1.- VON NEUMANN
          
(Fue desarrollada por Jon Von Neumann.)

Utiliza el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos, siendo la que se utiliza en un ordenador personal porque permite ahorrar una buena cantidad de líneas de entrada y salida, que son bastante costosas, sobre todo para aquellos sistemas donde el procesador se monta en algún tipo de zócalo alojado en una placa madre. También esta organización les ahorra a los diseñadores de placas madre una buena cantidad de problemas y reduce el costo de este tipo de sistemas.

En un ordenador personal, cuando se carga un programa en memoria, a éste se le asigna un espacio de direcciones de la memoria que se divide en segmentos, de los cuales típicamente tenderemos los siguientes: código (programa), datos y pila. Es por ello que podemos hablar de la memoria como un todo, aunque existan distintos dispositivos físicos en el sistema.

En el caso de los microcontroladores, existen dos tipos de memoria bien definidas: memoria de datos (típicamente algún tipo de SRAM) y memoria de programas (ROM, PROM, EEPROM, flash u de otro tipo no volátil). En este caso la organización es distinta a las del ordenador personal, porque hay circuitos distintos para cada memoria y normalmente no se utilizan los registros de segmentos, sino que la memoria está segregada y el acceso a cada tipo de memoria depende de las instrucciones del procesador.

2.- HARVARD

(Fue desarrollado en Harvard, por Howard Aiken.)

Es por excelencia la utilizada en supercomputadoras, en los microcontroladores, y sistemas integrados en general. En este caso, además de la memoria, el procesador tiene los buses segregados, de modo que cada tipo de memoria tiene un bus de datos, uno de direcciones y uno de control.


La ventaja fundamental de esta arquitectura es que permite adecuar el tamaño de los buses a las características de cada tipo de memoria; además, el procesador puede acceder a cada una de ellas de forma simultánea, lo que se traduce en un aumento significativo de la velocidad de procesamiento. Típicamente los sistemas con esta arquitectura pueden ser dos veces más rápidos que sistemas similares con arquitectura Von Neumann.

La desventaja está en que consume muchas líneas de E/S del procesador; por lo que en sistemas donde el procesador está ubicado en su propio encapsulado, solo se utiliza en supercomputadoras. Sin embargo, en los microcontroladores y otros sistemas integrados, donde usualmente la memoria de datos y programas comparten el mismo encapsulado que el procesador, este inconveniente deja de ser un problema serio y es por ello que encontramos la arquitectura Harvard en la mayoría de los microcontroladores.

Por eso es importante recordar que un microcontrolador se puede configurar de diferentes maneras, siempre y cuando se respete el tamaño de memoria que este requiera para su correcto funcionamiento.

ELEMENTOS DEL MICROPROCESADOR:

A.- REGISTROS: Son un espacio de memoria muy reducido pero necesario para cualquier microprocesador, de aquí se toman los datos para varias operaciones que debe realizar el resto de los circuitos del procesador. Los registros sirven para almacenar los resultados de la ejecución de instrucciones, cargar datos desde la memoria externa o almacenarlos en ella.

Aunque la importancia de los registros parezca trivial, no lo es en absoluto. De hecho una parte de los registros, la destinada a los datos, es la que determina uno de los parámetros más importantes de cualquier microprocesador.

Cuando escuchamos que un procesador es de 4, 8, 16, 32 o 64 bits, nos estamos refiriendo a procesadores que realizan sus operaciones con registros de datos de ese tamaño, y por supuesto, esto determina muchas de las potencialidades de estas máquinas.

Mientras mayor sea el número de bits de los registros de datos del procesador, mayores serán sus prestaciones, en cuanto a poder de cómputo y velocidad de ejecución, ya que este parámetro determina la potencia que se puede incorporar al resto de los componentes del sistema, por ejemplo, no tiene sentido tener una ALU de 16 bits en un procesador de 8 bits.

B.- UNIDAD DE CONTROL: Esta unidad es de las más importantes en el procesador, en ella recae la lógica necesaria para la decodificación y ejecución de las instrucciones, el control de los registros, la ALU, los buses y cuanta cosa más se quiera meter en el procesador.

La unidad de control es uno de los elementos fundamentales que determinan las prestaciones del procesador, ya que su tipo y estructura determina parámetros tales como el tipo de conjunto de instrucciones, velocidad de ejecución, tiempo del ciclo de máquina, tipo de buses que puede tener el sistema, manejo de interrupciones y un buen número de cosas más que en cualquier procesador van a parar a este bloque.

Por supuesto, las unidades de control son el elemento más complejo de un procesador y normalmente están divididas en unidades más pequeñas trabajando de conjunto. La unidad de control agrupa componentes tales como la unidad de decodificación, unidad de ejecución, controladores de memoria caché, controladores de buses, controlador de interrupciones, pipelines, entre otros elementos, dependiendo siempre del tipo de procesador.

C.- UNIDAD ARITMÉTICA - LÓGICA: Como los procesadores son circuitos que hacen básicamente operaciones lógicas y matemáticas, se le dedica a este proceso una unidad completa, con cierta independencia. Aquí es donde se realizan las sumas, restas, y operaciones lógicas típicas del álgebra de Boole.

Actualmente este tipo de unidades ha evolucionado mucho y los procesadores más modernos tienen varias ALU, especializadas en la realización de operaciones complejas como las operaciones en coma flotante. De hecho en muchos casos le han cambiado su nombre por el de “coprocesador matemático”, aunque este es un término que surgió para dar nombre a un tipo especial de procesador que se conecta directamente al procesador más tradicional.

Su impacto en las prestaciones del procesador es también importante porque, dependiendo de su potencia, tareas más o menos complejas, pueden hacerse en tiempos muy cortos, como por ejemplo, los cálculos en coma flotante.

D.- BUSES: Son el medio de comunicación que utilizan los diferentes componentes del procesador para intercambiar información entre sí, eventualmente los buses o una parte de ellos estarán reflejados en los pines del encapsulado del procesador.

En el caso de los microcontroladores, no es común que los buses estén reflejados en el encapsulado del circuito, ya que estos se destinan básicamente a las E/S de propósito general y periféricos del sistema.

Existen tres tipos de buses:
  • Dirección: Se utiliza para seleccionar al dispositivo con el cual se quiere trabajar o en el caso de las memorias, seleccionar el dato que se desea leer o escribir.
  • Datos: Se utiliza para mover los datos entre los dispositivos de hardware (entrada y salida).
  • Control: Se utiliza para gestionar los distintos procesos de escritura lectura y controlar la operación de los dispositivos del sistema.

E.- CONJUNTO DE INSTRUCCIONES: Aunque no aparezca en el esquema, no podíamos dejar al conjunto o repertorio de instrucciones fuera de la explicación, porque este elemento determina lo que puede hacer el procesador.

Define las operaciones básicas que puede realizar el procesador, que conjugadas y organizadas forman lo que conocemos como software. El conjunto de instrucciones vienen siendo como las letras del alfabeto, el elemento básico del lenguaje, que organizadas adecuadamente permiten escribir palabras, oraciones y cuanto programa se le ocurra.

MEMORIA:

En los microcontroladores la memoria no es abundante, aquí no encontrará Gigabytes de memoria como en las computadoras personales. Típicamente la memoria de programas no excederá de 16 K-localizaciones de memoria no volátil (flash o eprom) para contener los programas.

La memoria RAM está destinada al almacenamiento de información temporal que será utilizada por el procesador para realizar cálculos u otro tipo de operaciones lógicas. En el espacio de direcciones de memoria RAM se ubican además los registros de trabajo del procesador y los de configuración y trabajo de los distintos periféricos del microcontrolador. Es por ello que en la mayoría de los casos, aunque se tenga un espacio de direcciones de un tamaño determinado, la cantidad de memoria RAM de que dispone el programador para almacenar sus datos es menor que la que puede direccionar el procesador.

El tipo de memoria utilizada en las memorias RAM de los microcontroladores es SRAM, lo que evita tener que implementar sistemas de refrescamiento como en el caso de las computadoras personales, que utilizan gran cantidad de memoria, típicamente alguna tecnología DRAM. A pesar de que la memoria SRAM es más costosa que la DRAM, es el tipo adecuado para los microcontroladores porque éstos poseen pequeñas cantidades de memoria RAM.

En el caso de la memoria de programas se utilizan diferentes tecnologías, y el uso de una u otra depende de las características de la aplicación a desarrollar, a continuación se describen las cinco tecnologías existentes, que mayor utilización tienen o han tenido:

  • ROM. En este caso no se “graba” el programa en memoria sino que el microcontrolador se fabrica con el programa, es un proceso similar al de producción de los CD comerciales mediante masterización. El costo inicial de producir un circuito de este tipo es alto, porque el diseño y producción de la máscara es un proceso costoso, sin embargo, cuando se necesitan varios miles o incluso cientos de miles de microcontroladores para una aplicación determinada, como por ejemplo, algún electrodoméstico, el costo inicial de producción de la máscara y el de fabricación del circuito se distribuye entre todos los circuitos de la serie, y el costo final de ésta es bastante menor que el de sus semejantes con otro tipo de memoria.
  • PROM (Programmable Read-Only Memory) también conocida como OTP (One Time Programmable). Este tipo de memoria también es conocida como PROM o simplemente ROM. Los microcontroladores con memoria OTP se pueden programar una sola vez, con algún tipo de programador. Se utilizan en sistemas donde el programa no requiera futuras actualizaciones y para series relativamente pequeñas, donde la variante de máscara sea muy costosa, también para sistemas que requieren serialización de datos, almacenados como constantes en la memoria de programas.
  • EPROM (Erasable Programmable Read Only Memory). Los microcontroladores con este tipo de memoria son muy fáciles de identificar porque su encapsulado es de cerámica y llevan encima una ventanita de vidrio desde la cual puede verse la oblea de silicio del microcontrolador. Se fabrican así porque la memoria EPROM es reprogramable, pero antes debe borrase, y para ello hay que exponerla a una fuente de luz ultravioleta, el proceso de grabación es similar al empleado para las memorias OTP. Al aparecer tecnologías menos costosas y más flexibles, como las memorias EEPROM y FLASH, este tipo de memoria han caído en desuso, se utilizaban en sistemas que requieren actualizaciones del programa y para los procesos de desarrollo y puesta a punto.
  • EEPROM (Electrical Erasable Programmable Read Only Memory). Fueron el sustituto natural de las memorias EPROM, la diferencia fundamental es que pueden ser borradas eléctricamente, por lo que la ventanilla de cristal de cuarzo y los encapsulados cerámicos no son necesarios.Al disminuir los costos de los encapsulados, los microcontroladores con este tipo de memoria se hicieron más baratos y cómodos para trabajar que sus equivalentes con memoria EPROM.Otra característica destacable de este tipo de microcontrolador es que fue en ellos donde comenzaron a utilizarse los sistemas de programación en el sistema que evitan tener que sacar el microcontrolador de la tarjeta que lo aloja para hacer actualizaciones al programa.
  • FLASH. En el campo de las memorias reprogramables para microcontroladores, son el último avance tecnológico en uso a gran escala, y han sustituido a los microcontroladores con memoria EEPROM. A las ventajas de las memorias flash se le adicionan su gran densidad respecto a sus predecesoras lo que permite incrementar la cantidad de memoria de programas a un costo muy bajo. Pueden además ser programadas con las mismas tensiones de alimentación del microcontrolador, el acceso en lectura y la velocidad de programación es superior, disminución de los costos de producción, entre otras.

INTERRUPCIONES:

Llamadas a subrutina generadas por los dispositivos físicos, al contrario de las subrutinas normales de un programa en ejecución. Como el salto de subrutina no es parte del hilo o secuencia de ejecución programada, el controlador guarda el estado del procesador en la pila de memoria y entra a ejecutar un código especial llamado "manejador de interrupciones" que atiende al periférico específico que generó la interrupción. 

Al terminar la rutina, una instrucción especial le indica al procesador el fin de la atención de la interrupción. En ese momento el controlador restablece el estado anterior, y el programa que se estaba ejecutando antes de la interrupción sigue como si nada hubiese pasado. 

Las rutinas de atención de interrupciones deben ser lo más breves posibles para que el rendimiento del sistema sea satisfactorio, por que normalmente cuando una interrupción es atendida, todas las demás interrupciones están en espera.

Las interrupciones son generadas por los dispositivos periféricos habilitando una señal el CPU (llamada IRQ del ingles "interrupt request" para solicitar atención del mismo. Por ejemplo cuando un disco duro completa una lectura solicita atención al igual que cada vez que se presiona una tecla o se mueve el ratón.

En términos generales, un proceso de interrupción y su atención por parte del procesador, tiene la siguiente secuencia de acciones:
  • En el mundo real se produce el evento para el cual queremos que el procesador ejecute un programa especial, este proceso tiene la característica de que no puede esperar mucho tiempo antes de ser atendido o no sabemos en que momento debe ser atendido.
  • El circuito encargado de detectar la ocurrencia del evento se activa, y como consecuencia, activa la entrada de interrupción del procesador.
  • La unidad de control detecta que se ha producido una interrupción y “levanta” una bandera para registrar esta situación; de esta forma si las condiciones que provocaron el evento desaparecen y el circuito encargado de detectarlo desactiva la entrada de interrupción del procesador, ésta se producirá de cualquier modo, porque ha sido registrada.
  • La unidad de ejecución termina con la instrucción en curso y justo antes de comenzar a ejecutar la siguiente comprueba que se ha registrado una interrupción
  • Se desencadena un proceso que permite guardar el estado actual del programa en ejecución y saltar a una dirección especial de memoria de programas, donde está la primera instrucción de la subrutina de atención a interrupción.
  • Se ejecuta el código de atención a interrupción, esta es la parte “consciente” de todo el proceso porque es donde se realizan las acciones propias de la atención a la interrupción y el programador juega su papel.
  • Cuando en la subrutina de atención a interrupción se ejecuta la instrucción de retorno, se desencadena el proceso de restauración del procesador al estado en que estaba antes de la atención a la interrupción.

RESUMEN:

En 1980 aproximadamente, los fabricantes de circuitos integrados iniciaron la difusión de un nuevo circuito para control, medición e instrumentación al que llamaron microcomputador en un sólo chip o de manera más exacta microcontrolador.

Un microcontrolador es un circuito integrado que contiene toda la estructura (arquitectura) de un microcomputador, o sea CPU, RAM, ROM y circuitos de entrada y salida. Los resultados de tipo práctico, que pueden lograrse a partir de éstos elementos, son sorprendentes.

Algunos microcontroladores más especializados poseen además convertidores análogo digital, temporizadores, contadores y un sistema para permitir la comunicación en serie y en paralelo.

Se pueden crear muchas aplicaciones con los microcontroladores. Estas aplicaciones de los microcontroladores son ilimitadas (el límite es la imaginación) entre ellas podemos mensionar: sistemas de alarmas, juego de luces, paneles publicitarios, etc. Controles automáticos para la Industria en general. Entre ellos control de motores DC/AC y motores de paso a paso, control de máquinas, control de temperatura, control de tiempo, adquisición de datos mediante sensores, etc.

A partir de aquí el trabajo se dedica a hacer una descripición breve y en pocos párrafos de algunos de los principales microcontroladores del mercado y podemos ver que no hay mucha diferencia entre unas marcas y otras. Tal vez algunas se especialicen más para algunas aplicaciones mientras que otras lo hacen más en el campo del aprendizaje por ser de propósito más general. Por último expongo una comparativa entre los microcontroladores y los autómatas programables que encontré en internet y me pareció bastante interesante.

SUMMARY:

In about 1980, manufacturers of integrated circuits began broadcasting a new circuit for control, measurement and instrumentation they called microcomputer on a single chip or more accurately microcontroller.

A microcontroller is an integrated circuit that contains the entire structure (architecture) of a microcomputer, ie CPU, RAM, ROM and input and output circuits. The practical results that can be achieved from these elements are striking.

Some more specialized microcontrollers also have digital analog converters, timers, counters and a system to allow communication in series and in parallel.

You can create many applications with microcontrollers. These applications are limitless microcontrollers (limit is the imagination) between them can mensionar: alarm systems, set of lights, billboards, etc. automatic controls for industry in general. Including motor control DC / AC and stepper motors, machine control, temperature control, time control, data acquisition using sensors, etc.

From here the work is dedicated to making a brief descripicion and in a few paragraphs of some of the main microcontroller market and we can see that there is much difference between marks and others. Perhaps some specialize more for some applications while others do more in the field of learning to be more general-purpose. Finally I present a comparison between microcontrollers and programmable logic controllers I found on the internet and I found it quite interesting.

CONCLUSIONES:

Los microcontroladores ha evolucionado desde su origen junto con las computadoras y otros aparatos electrónicos. Este tema se relaciona con las areas de Nanotecnologia, Robotica, Electronica, Fisica, Informática y Computacion, teniendo como objetivo llevar a cabo procesos lógicos o acciones programadas en lenguaje ensamblador por un usuario o programador. Cuenta con tres diferentes tipos los cuales se clasifican por bits, por arquitectura y finalmente por software. Los microcontroladores cuentan con una gran variedad de apliaciones, las mayores aplicaciones se encuentran reflejadas en el campo de la industria automotriz y en segundo lugar se puede ver el campo de la arquitectura y funcionamiento del tersmotato digital. La prospectiva de este tema indica que este tema seguirá evolucionando de manera progresiva a través de los años y con las mejoras que vengan en el campo de dispositivos como lo son los microcontroladores, ya que estos ayudan a terminar procesos mucho más rápidamente.

Microcontroladores es un campo de estudio importante en el estudio para las futuras generaciones debido a que siempre existirá la necesidad de que aparatos electrónicos funcionen cada vez más rápido y que su tecnología en microchips sea cada vez de tamaño más reducido sin disminuir la velocidad.

APRECIACIÓN PERSONAL:

La educación es un proceso interminable, puesto que cada día se aprende cosas nuevas o se actualizan las ya conocidas o aprendidas, es decir, que la educación es un proceso permanente, por eso debemos estar actualizados con las tecnologías del momento y preparado para recibir las nuevas.

GLOSARIO DE TÉRMINOS:

ROM: Sigla de Read Only Memory (‘memoria de solo lectura’), circuito integrado de memoria de solo lectura que almacena instrucciones y datos de forma permanente.

RAM: Sigla de Random Access Memory (‘memoria de acceso aleatorio’), memoria principal de la computadora, donde residen programas y datos, sobre la que se pueden efectuar operaciones de lectura y escritura.

CPU: Sigla de la expresión inglesa central processing unit, 'unidad central de proceso', que es la parte de una computadora en la que se encuentran los elementos que sirven para procesar datos.

BIBLIOGRÁFICA O LINKOGRAFÍA:
  • https://es.wikipedia.org/wiki/Microcontrolador
  • https://microcontroladoressesv.wordpress.com/arquitectura-de-los-microcontroladores/

Descargar el documento en PDF

Diapositiva "Microcontrolador"

Video relacionado al tema



sábado, 1 de octubre de 2016

ARQUITECTURA RISC

DEFINICIÓN:

Reduced Instruction Set Computer - Computadora con Conjunto de Instrucciones Reducidas. Tipo de arquitecturas de computadoras que promueve conjuntos pequeños y simples de instrucciones que pueden tomar poco tiempo para ejecutarse.

Es un tipo de diseño de CPU generalmente utilizado en microprocesadores o microcontroladores. Usa conjunto de instrucciones pequeñas y simples que toman mejor tiempo para ejecutarse.

La arquitectura RISC que reducen la complejidad de los computadores al implementar solo aquellas instrucciones más usadas, y utilizar solo modos de direccionamiento sencillo, tipos de datos básicos y gran numero de registros que sirven para almacenar datos personales.

CARACTERÍSTICAS:

Load/Store (Cargar-Almacenar). Sólo las instrucciones Load/Store acceden a memoria; las demás operaciones en un RISC, tienen lugar en su gran conjunto de registros. Ello simplifica el direccionamiento y acorta los tiempos de los ciclos de la CPU, además facilita la gestión de los fallos de paginas page faults en entornos de memoria virtual, permite un elevado nivel de concurrencia a consecuencia de la independencia de las operaciones de Load/Store de la ejecución del resto de las instrucciones. 

Arquitectura no destructiva de tres direcciones. Los procesadores CISC destruyen la información que existe en alguno de los registros, como consecuencia de la ejecución normal de instrucciones; esto es debido a su arquitectura de dos direcciones, por lo que el resultado de una operación sobrescribe uno de los registros que contenía a los operandos. Por contra, las instrucciones RISC, con tres direcciones, contienen los campos de los dos operandos y de su resultado. Por lo tanto, tanto los operandos origen como el destino, son mantenidos en los registros tras haber sido completada la operación. Esta arquitectura no destructiva permite a los compiladores organizar las instrucciones de modo que mantengan llenos los conductos (pipelines) del chip, y por tanto reutilizar los operandos optimizando la concurrencia.

Instrucciones simples, de formato fijo, con pocos modos de direccionamiento. Las instrucciones simples reducen de manera muy significativa el esfuerzo para su descodificación, y favorecen su ejecución en pipelines. Las instrucciones de longitud fija, con formatos fijos, implican que los campos de códigos de operación opcodes y de los operandos están siempre codificados en las mismas posiciones, permitiendo el acceso a los registros al mismo tiempo que se está descodificando el código de operación. Todas las instrucciones tienen una longitud equivalente a una palabra y están alineadas en la memoria en límites de palabra word boundaries, ya que no pueden ser repartidas en pedazos que puedan estar en diferentes páginas.

Ausencia de microcódigo. El microcódigo no se presta a la ejecución en ciclos únicos, ya que requiere que el hardware sea dedicado a su interpretación dinámica. La programación en microcódigo no hace que el software sea más rápido que el programado con un conjunto de instrucciones simples. Todas las funciones y el control, en los procesadores RISC, están cableados hardwired, para lograr una máxima velocidad y eficiencia.

Ejecución en conductos pipelined. Las instrucciones simples, de formato fijo y ciclo único permiten que las diferentes etapas de los ciclos de ejecución búsqueda o fetch, descodificación, ejecución, y escritura del resultado o result write-back para instrucciones múltiples, se puedan realizar simultáneamente, de un modo más simple y eficaz.

Ejecución en ciclos únicos single-cycle. El resultado directo de los conjuntos de instrucciones que ofrecen los procesadores RISC, es que cada instrucción puede ser ejecutada en un único ciclo de la CPU. Esto invalida la creencia de que las microinstrucciones en microcódigo, creadas para ser ejecutadas en un solo ciclo de procesador, son más rápidas que las instrucciones del lenguaje ensamblador. Ya que el caché esta construido partiendo de la misma tecnología que el almacenamiento de control del microprograma, una única instrucción puede ser ejecutada a la misma velocidad que una microinstrucción. La ejecución en ciclos únicos también simplifica la gestión de las interrupciones y los conductos pipelines.

PRINCIPIOS: 
  1. Analizar las aplicaciones para encontrar las operaciones clave.
  2. Diseñar un bus de datos que sea óptimo para las operaciones clave.
  3. Diseñar instrucciones que realicen las operaciones clave utilizando el bus de datos.
  4. Agregar nuevas instrucciones sólo si no hacen más lenta a la máquina.
  5. Repetir este proceso para otros recursos.
El primer punto se refiere a que el diseñador deberá encontrar qué es lo que hacen en realidad los programas que se pretenden ejecutar. Ya sea que los programas a ejecutar sean del tipo algorítmicos tradicionales, o estén dirigidos a robótica o al diseño asistido por computadora.

El segundo punto se refiere que la parte medular de cualquier sistema es la que contiene los registros, el ALU y los 'buses' que los conectan. Se debe optimar este circuito para el lenguaje o aplicación en cuestión. El tiempo requerido, (denominado tiempo del ciclo del bus de datos) para extraer los operandos de sus registros, mover los datos a través del ALU y almacenar el resultado de nuevo en un registro, deberá hacerse en el tiempo mas corto posible.

El tercer punto se refiere que las instrucciones deben hacer un buen uso del bus de datos. Por lo general se necesitan solo unas cuantas instrucciones y modos de direccionamiento; sólo se deben colocar instrucciones adicionales si serán usadas con frecuencia y no reducen el desempeño de las más importantes.

El cuarto punto se refiere: Siempre que aparezca una nueva y atractiva característica, deberá analizarse y ver la forma en que se afecta al ciclo de bus. Si se incrementa el tiempo del ciclo, probablemente no vale la pena tenerla.

Por último, el proceso anterior debe repetirse para otros recursos dentro del sistema, tales como memoria cache, administración de memoria, coprocesadores de punto flotante, etcétera.

MULTIPROCESO: 


Llamado tambien Multiprocesamiento o multiproceso es el uso de dos o más procesadores (CPU) en una computadora para la ejecución de uno o varios procesos (programas corriendo). Algunas personas, en el idioma español hacen sinónimo este término con el de multitareas (del inglés multitasking) el cual consiste en la ejecución de uno o más procesos concurrentes en un sistema.

Así como la multitarea permite a múltiples procesos compartir una única CPU, múltiples CPU pueden ser utilizados para ejecutar múltiples procesos o múltiples hilos (threads) dentro de un único proceso.

El sistema en que la memoria esta conectada a los nodos de proceso establece el primer nivel de distinción entre diferentes sistemas multiprocesador.

Multiprocesadores de memoria distribuida (distributed-memory multiprocessors): También denominados multiprocesadores vagamente acoplados (loosely coupled multiprocessors). Se caracterizan porque cada procesador sólo puede acceder a su propia memoria. Se requiere la comunicación entre los nodos de proceso para coordinar las operaciones y mover los datos. Los datos pueden ser intercambiados, pero no compartidos. Dado que los procesadores no comparten un espacio de direcciones común, no hay problemas asociados con tener múltiples copias de los datos, y por tanto los procesadores no tienen que competir entre ellos para obtener sus datos. Ya que cada nodo es un sistema completo, por si mismo (incluso sus propios dispositivos de entrada/salida si son necesarios), el único límite práctico para incrementar las prestaciones añadiendo nuevos nodos, esta dictado por la topología empleado para su interconexión. De hecho, el esquema de interconexión (anillos, matrices, cubos, ...), tiene un fuerte impacto en las prestaciones de estos sistemas. Además de la complejidad de las interconexiones, una de las principales desventajas de estos sistemas, como es evidente, es la duplicación de recursos caros como memoria, dispositivos de entrada/salida, que además están desocupados en gran parte del tiempo.

Multiprocesadores de memoria compartida (shared-memory multiprocessors): También llamados multiprocesadores estrechamente acoplados (tightly coupled multiprocessors). Son sistemas con múltiples procesadores que comparten un único espacio de direcciones de memoria. Cualquier procesador puede acceder a los mismos datos, al igual que puede acceder a ellos cualquier dispositivo de entrada/salida. El sistema de interconexión más empleado para estos casos, es el de bus compartido (shared-bus). Tener muchos procesadores en un único bus tiene el inconveniente de limitar las prestaciones del sistema a medida que se añaden nuevos procesadores. La razón es la saturación del bus, es decir, su sobre utilización; en un sistema de bus compartido, se deriva por la contienda entre los diferentes dispositivos y procesadores para obtener el control del bus, para obtener su utilización.

MEMORIA CACHE: 


Los sistemas de memoria multinivel (caché) son un esfuerzo para evitar el número de peticiones realizadas por cada CPU al bus. Los caches son pequeñas y rápidas (y por tanto caras) memorias, que hacen de tampón (buffer) entre la CPU y la memoria externa, para mantener los datos y/o instrucciones. Se basan en el principio de la "localidad", lo que significa que, dada la fundamental naturaleza secuencial de los programas, los siguientes datos o instrucciones requeridas, estarán localizadas inmediatamente a continuación de las actuales.

Los datos contenidos en la memoria caché se organizan en bloques denominados líneas. Las líneas son cargadas en el caché como copias exactas de los datos situados en la memoria externa. Para referenciar a los datos de la memoria caché, se emplean marcas (tags) que identifican a cada línea. Las marcas o tags emplean una porción de la dirección física de los datos, para compararla con la dirección física solicitada por la CPU. Cuando existe una coincidencia exacta de la dirección y de otros cualificadores (estado, privilegio, contexto, etc.), se dice que ha tenido lugar un acierto (hit) de caché; en caso contrario, tiene lugar un fallo (miss) del caché, y en ese caso, los datos han de ser recuperados desde la memoria.

El empleo de memoria caché se ha popularizado, como medida para acelerar el tiempo de acceso a la memoria principal, incluso en los sistemas monoprocesador, evitando así, según se incrementa la velocidad de los propios procesadores, aumentar la velocidad de dicha memoria, y por tanto encarecer el sistema.

La forma en que la memoria es actualizada por los caches locales puede tener un gran impacto en las prestaciones de un sistema multiprocesador. Básicamente hay dos métodos:
  1. Escritura continua (write-through): Requiere que todas las escrituras realizadas en el caché actualicen asimismo los datos de la memoria principal. De esta forma, la memoria principal siempre tiene la última copia de los datos, y por tanto no hay nunca ninguna incoherencia con el caché. El inconveniente es que se producen frecuentes accesos a memoria, especialmente superfluos cuando el software está modificando las mismas secciones de datos repetidamente (por ejemplo ejecutando bucles).
  1. Copia posterior (copy-back): Es un sistema mucho más eficiente, aunque también más complejo de implementar. En este caso, la CPU puede modificar la línea de caché sin necesidad de actualizar inmediatamente la memoria principal. Los datos sólo son copiados a la memoria principal cuando la línea de caché va a ser reemplazada con una nueva. Ello no solo minimiza el tráfico del bus, de vital importancia para el resto de los procesadores, sino que también libera al procesador de la tarea de escribir en la memoria principal. Sin embargo, este sistema, en una arquitectura de bus compartido, implica un nuevo nivel de dificultad, denominado coherencia o consistencia (coherency o consistency); dado que cada caché puede tener una copia de los datos existentes en la memoria principal, el desafío es asegurar que los datos permanecen iguales entre todos los caches. Hay dos métodos para mantener cada línea de caché idéntica a las demás:
    • Escritura radiada (write-broadcast), que requiere que la CPU que modifica los datos compartidos actualice los otros caches, para lo cual escribe en el bus la dirección de los datos, y los datos mismos, de modo que todos los dispositivos interesados (otras CPU’s) los capturen. Esto asegura que cada línea de caché en el sistema es una copia exacta de las demás.
    • Escritura invalidada (write-invalidate), impide a una CPU modificar los datos compartidos en su caché hasta que otros caches han invalidado sus copias. En cuanto otros caches invalidan sus líneas, el caché modificado tiene la única copia; de este modo, se garantiza que un sólo caché escribe una línea compartida en un momento dado. Tiene la ventaja de conservar el ancho de banda del bus ya que los datos modificados no tienen que ser enviados a otros caches.

VENTAJAS:
  • Debido a que cada instrucción realiza una operación muy simple, el código se ejecutará en aproximadamente el mismo tiempo que el comando MULT de la arquitectura CISC. Estas instrucciones reducidas RISC requieren menos hardware y es más sencillo que las instrucciones complejas, dejando más espacio para registros de propósito general. Además, las optimizaciones sobre un hardware más sencillo son mucho más fáciles de realizar.
  • RISC ha alcanzado a todos los fabricantes de semiconductores:AMD, Intel, MIPS, Motorota, ROSS, y todos ellos son productos usados por fabricantes de ordenadores y estaciones de trabajo: Apple, DEC, HP, IBM, SUN, entre otros y sus correspondientes clónicos.
  • La CPU trabaja mas rápido al utilizar menos ciclos de reloj para ejecutar instrucciones.
  • Utiliza un sistema de direcciones no destructivas en RAM. Eso significa que a diferencia de CISC, RISC conserva después de realizar sus operaciones en memoria los dos operandos y su resultado, reduciendo la ejecución de nuevas operaciones. Cada instrucción puede ser ejecutada en un solo ciclo del CPU.

DESVENTAJAS:
  • Menor densidad de código (discutible). Importante si la disponibilidad de memoria es crítica.
  •  Ocasiona un menor rendimiento del caché de instrucciones. ARM Thumb. 
  • No ejecutan código x86. Puede utilizarse simulación por software, pero no puedo fabricar una IBM PC compatible.
  • Excesiva dependencia en la efectividad del compilador 
  • La depuración de los programas se hace difícil por la programación de instrucciones 
  • Se incrementa el tamaño del código de lenguaje máquina 
  • Necesidad de memoria rápida

RESUMEN:

RISC es una filosofía de diseño de CPU para computadora que está a favor de conjuntos de instrucciones pequeñas y simples que toman menor tiempo para ejecutarse. El tipo de procesador más comúnmente utilizado en equipos de escritorio, el x86, está basado en CISC en lugar de RISC, aunque las versiones más nuevas traducen instrucciones basadas en CISC x86 a instrucciones más simples basadas en RISC para uso interno antes de su ejecución.

La idea fue inspirada por el hecho de que muchas de las características que eran incluidas en los diseños tradicionales de CPU para aumentar la velocidad estaban siendo ignoradas por los programas que eran ejecutados en ellas. Además, la velocidad del procesador en relación con la memoria de la computadora que accedía era cada vez más alta. Esto conllevó la aparición de numerosas técnicas para reducir el procesamiento dentro del CPU, así como de reducir el número total de accesos a memoria.

SUMMARY:

RISC is a design philosophy for computer CPU is in favor of small and simple sets of instructions that take less time to run. The processor type most commonly used in desktop computers, the x86, is based on CISC rather than RISC, although newer versions translate instructions based on CISC x86 to simpler instructions based on RISC for internal use before execution.

The idea was inspired by the fact that many of the features that were included on traditional CPU designs to increase the speed were being ignored by the programs were executed in them. In addition, the processor speed in relation to the memory of the computer that was accessed increasingly high. This led to the emergence of many techniques to reduce processing within the CPU as well as reduce the total number of memory accesses.

RECOMENDACIONES:
  • Analizar previamente que es una arquitectura de computador 
  • Tener bien claros los conceptos básicos de la arquitectura RISC

CONCLUSIÓN:

La "era RISC" ha alcanzado a todos los fabricantes de semiconductores: AMD, Intel, MIPS, Motorola, ROSS, etc; y todos ellos son productos usados por fabricantes de ordenadores y estaciones de trabajo: Apple, DEC, HP, IBM, SUN, etc. y sus correspondientes clónicos.

El tiempo de diseño de estos productos se reduce sensiblemente, lo que disminuye su coste final, y por tanto, se incrementan sus expectativas, al poder llegar al mercado en un tiempo más adecuado, y con menos posibilidades de errores.

Además, son globalmente más eficaces, de menores dimensiones y más bajo consumo, ofreciendo siempre claras ventajas técnicas frente a los más avanzados CISC.

Actualmente, las estaciones de trabajo RISC multiprocesadoras de mayor éxito, se basan en diferentes versiones de la tecnología SPARC: superSPARC e HyperSPARC.

Esta claro que el futuro pertenece a los RISC y a los sistemas multiprocesador, a no ser que la física y la electrónica logren superar las barreras tecnológicas para incrementar muy por encima de las cotas actuales, las velocidades y prestaciones de una única CPU.

También cabe esperar, y por que no, la pronta aparición de otras tecnologías que compitan con CISC y RISC.

APRECIACIÓN PERSONAL:


Conocer la arquitectura RISC es muy importante, puesto que nos permite cuales son sus ventajas y desventajas frente a las instrucciones ejecutadas desde un ordenador.

GLOSARIO DE TÉRMINOS:


RISC: Computadora con Conjunto de Instrucciones Reducidas

BIBLIOGRÁFICA:
  • http://www.alegsa.com.ar/Dic/risc.php
  • http://www.azc.uam.mx/publicaciones/enlinea2/num1/1-2.htm
  • http://www.monografias.com/trabajos55/microprocesadores-cisc-risc/microprocesadores-cisc-risc2.shtml
  • https://www.ecured.cu/RISC
  • http://electro.fisica.unlp.edu.ar/arq/transparencias/ARQII_03-RISC.pdf
  • http://www.consulintel.es/html/Tutoriales/Articulos/risc.html

Descargar el documento en PDF

Diapositiva "Arquitectura RISC"

Video relacionado al tema