Unidad IV

Procesadores Risc y Cisc :

Arquitectura Risc (computadores con un conjunto de instrucciones reducido)

* Son procesadores con un conjunto de instrucciones simples y reducidad ej Dec[^Bx] familia Jwel

*  Su instruccion simples es la que tiene un solo operador

* el conjunto de instrucciones octagonal es decir una sola operacion para cada instruccion a manejar

* Maneja instrucciones de longitud fija

* Soportam poco tiempo de datos

* utilizan gran numero de registros de propositos general

*Predominan el procedimiento de las segmentaciones

* Predomina las instrucciones que ejecutan en un ciclo de maquina

* Tiene la capacidad de manejar unas instracciones al mismo tiem po por medio de la tecnica de segmentacion en un ciclo de maquina

* maneja una aquitectura de carga de almacenamiento llamada LOAD/STORE

* su aquitectura es de registro a registro a nivel de instrucciones

Arquitectura Cisc ( computadores con un conjunto de instrucciones complejas)

* Maneja instrucciones complejas

* Gran cantidad de instrucciones complejas

* Utiliza gran cantidad de modo de direccionamiento

* Soportan varios tipos de datos

* las instrucciones son de longitud variable

* utilizan multiples ciclo de relog para ejecutar una instruccion por lo cual toma mas ciclo de maquina

* predominan instrucciones con mas de dos operandos

*Su micro arquitectura es compleja

Lenguaje Maquina 

El lenguaje de máquina o código máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones al ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones más un conjunto de datos sobre el cual se trabaja. Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de la arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre arquitecturas distintas.

Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos niveles de tensión. Dichos niveles, por abstracción, se simbolizan con los números 0 y 1, por eso el lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.
Una visión típica de la arquitectura de computadoras como una serie de capas de abstracción: hardware, firmware, ensamblador, kernel, sistema operativo y aplicaciones.

Claude Elwood Shannon, en su libro Analysis of Relay and Switching Circuits, y con sus experiencias en redes de conmutación, sentó las bases para la aplicación del álgebra de Boole a las redes de conmutación. Una red de conmutación es un circuito de interruptores eléctricos que al cumplir ciertas combinaciones booleanas con las variables de entrada, define el estado de la salida. Este concepto es el núcleo de las puertas lógicas, las cuales son, por su parte, los ladrillos con que se construyen sistemas lógicos cada vez más complejos. Shannon utilizaba el relé como dispositivo físico de conmutación en sus redes, dado que el relé, a igual que una lámpara eléctrica, posee dos estados: activado (encendido) o desactivado (apagado).

El desarrollo tecnológico ha permitido evolucionar desde las redes de relés electromagnéticos a circuitos con tubos de vacío, luego a redes transistorizadas, hasta llegar a los modernos circuitos integrados, en cuya cúspide se encuentran los circuitos microprogramados.


http://es.wikipedia.org/wiki/Lenguaje_de_máquina


Lenguaje Ensamblador 

El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel 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 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. Esta representación es usualmente 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). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro ensambladores.
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.


http://es.wikipedia.org/wiki/Lenguaje_ensamblador


Interpretes 

Intérprete (informática)

En ciencias de la computación, intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.

Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ejemplo. una PC y un Xbox One). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).

Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. Python, UCSD Pascal y Java).
Comparando su actuación con la de un ser humano, un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

En la actualidad, uno de los entornos más comunes de uso de los intérpretes informáticos es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

http://es.wikipedia.org/wiki/Intérprete_(informática)


Compiladores 

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Partes de un compilador

La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.
  • Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico (que consiste en la descomposición del programa fuente en componentes léxicos), Análisis sintáctico (agrupación de los componentes léxicos en frases gramaticales ) y Análisis semántico (comprobación de la validez semántica de las sentencias aceptadas en la fase de Análisis Sintáctico).
  • Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código intermedio o de código objeto) y de Optimización de Código (en las que se busca obtener un código lo más eficiente posible).
Alternativamente, las fases descritas para las tareas de análisis y síntesis se pueden agrupar en Front-end y Back-end:
  • Front-end: es la parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.
  • Back-end: es la parte que genera el código máquina, específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Suele incluir la generación y optimización del código dependiente de la máquina.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)

Tipos de compiladores

Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
  • Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
  • Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Pauta de creación de un compilador: En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. Una vez que se dispone de un compilador, se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.

http://es.wikipedia.org/wiki/Compilador

Ensambladores 

Ensamblador

El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por el microprocesador

Funcionamiento

El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos nemotécnicos que aparecen por su código de operación correspondiente en sistema binario para la plataforma que se eligió como destino en las opciones específicas del ensamblador.

Tipos de ensambladores

Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones, parámetros y cosas tales como los modos
.
Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con programas con estructuras de 16 bits. Además de realizar la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel.

http://es.wikipedia.org/wiki/Ensamblador

instrucciones


ordenes o entradas logicas y secuenciales de datos para desarrollar un programa 

* Tipos de instrucciones 

transferencias de datos  :permite transferir datos entre la memoria y el registro 

ME --> Registro
Reg --> Memoria 

Registros propios del procesador
Registro de ususario 

Transferencia de datos 

Mov --> Mover
LDS --> Cargar DS segmento de datos 
LES --> cargar ES segemnto extra 
LEA --> cargar directa efectiva (EA)
XCH6 -->Intercambio 

Ejemplo 

MOV DS,AX
MOV AL,E*
MOV [BX],DX
LEA BX,ARRAY SIN []
MOV SI,0
MOV AX,[BX][SI]

Instrucciones Aritmeticas : permiten realizar operaciones aritmeticas de suma ,resta,multi,division ,incremento y decremento entre otros  

ADD --> SUMA
ADC--> SUMA CON ACARREO 
SUB --> RESTA
SPB-->RESTA CON ACARREO 
CBW --> CONVIERTE BYTE A WORD
CWD --> CONVIERTE WORD A DOBLE WORD 
INC --> INCREMENTO
DEC--> DECREMENTO
CMP--> COMPARA 

EJEMPLO

MOV AX ,Y
ADD AX,X
ADD AX,24
SUB AX,6
MOV W,9X

Instrucciones logicas
 entre ellas estan AND , NOT, OR, XOR
EJEMPLO
AL=10101001
DATO=00111100
OR= AL,DATO
AND  AL,DATO
XOR AL, DATO 

  Instrucciones de salto : permite romper instrucciones de salto 
 entre ellas 

 JE ---> SALTA SI ES CERO IGUAL
JNZ---> SALTA SI NO ES CERO O NO ES IGUAL
JS -->SALTA SI EL SIGNO ESTA ACTIVO
JNS--> SALTA SI EL SIGNO NO ESTA ACTIVO
JO --> SALTA SI HAY DESBORDAMIENTO
JNO --> SALTA SI NO HAY DESBORDAMIENTO 

EJEMPLO 
 Repite INC CX
             ADD AX , [BX]
             JNS REPITE 
             MOV RESULTADO , CX 

Tipo de instrucciones de bucle o ciclo : son  instrucciones que permiten incrementar o decrementar pruebas y saltos en la parte del ciclo del programa 

Entre ellas estan :

LOOB  --> CICLO
LOOPZ --> CICLO MIESTRAS CERO } CX=0
LOOPE--> CICLO MIESTRAS IGUAL}  EF=1
LOOPMZ --> CICLO MIESTRAS N CERO




1 comentario:

  1. En cuanto a la información del lenguaje ensamblador puedo decir que su importancia radica principalmente en que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este para lograr comprender este lenguaje

    ResponderEliminar