jueves, 27 de mayo de 2010

Interpretes y Compiladores

1¿Cuáles son las funciones de un compilador?

A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.


2.- ¿Cuáles son las fases de los compiladores?

Fase de análisis

Análisis léxico

Artículo principal: Analizador léxico

El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente. También se comprueba que los símbolos del lenguaje (palabras clave, operadores,...) se han escrito correctamente.

Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de patrones, se necesitan los métodos de especificación y reconocimiento de patrones, y éstos métodos son principalmente las expresiones regulares y los autómatas finitos. Sin embargo, un analizador léxico también es la parte del traductor que maneja la entrada del código fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador léxico debe funcionar de manera tan eficiente como sea posible.

Análisis sintáctico

Artículo principal: Analizador sintáctico

En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico.

La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definición de expresiones:

  1. Cualquier identificador es una expresión.
  2. Cualquier número es una expresión.
  3. Si expresión1 y expresión2 son expresiones, entonces también lo son:
    • expresión1 + expresión2
    • expresión1 * expresión2
    • ( expresión1 )

Las reglas 1 y 2 son reglas básicas (no recursivas), en tanto que la regla 3 define expresiones en función de operadores aplicados a otras expresiones.

La división entre análisis léxico y análisis sintáctico es algo arbitraria. Un factor para determinar la división es si una construcción del lenguaje fuente es inherentemente recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las construcciones sintácticas suelen requerirla. No se requiere recursión para reconocer los identificadores, que suelen ser cadenas de letras y dígitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carácter que no sea ni letra ni dígito, y agrupando después todas las letras y dígitos encontrados hasta ese punto en un componente léxico llamado identificador. Por otra parte, esta clase de análisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los paréntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerárquica o de anidamiento a la entrada.

Análisis semántico

La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

Un componente importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real. Revisa que los arreglos tengan definido el tamaño correcto.

Fase de síntesis

Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas. Por lo general el código objeto es código de máquina relocalizable o código ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Después, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a registros.

Generación de código intermedio

Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.

3.- ¿En qué consiste la fase de análisis?

El análisis está relacionado con el lenguaje fuente y consiste en ir leyendo las instrucciones que lo componen e ir almacenando el significado de las mismas.En esta fase se obtiene un código intermedio (información de instrucciones) y una tabla de símbolos (información de datos)

En esta fase el programa es descompuesto en sus elementos fundamentales.Abarca el análisis léxico, el análisis sintáctico y el análisis semántico.

Esta fase verifica si el programa en lenguaje fuente es correcto, y recoge la información necesaria en la tabla de símbolos para el módulo de síntesis.

Si detecta la existencia de errores, se notifican por medio del gestor de errores.

4.- ¿Cuál es el análisis lexicográfico ?

Artículo principal: Analizador léxico

El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente. También se comprueba que los símbolos del lenguaje (palabras clave, operadores,...) se han escrito correctamente.

5.- ¿Cuál es el análisis sintáctico ?

Artículo principal: Analizador sintáctico

En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico.

6.- ¿En qué consiste el análisis semántico ?

Artículo principal: Analizador sintáctico

En esta fase los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico.

7.- ¿En qué consiste la fase de síntesis?

Consiste en generar el código objeto equivalente al programa fuente. Sólo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas. Por lo general el código objeto es código de máquina relocalizable o código ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Después, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecuta la misma tarea. Un aspecto decisivo es la asignación de variables a registros.

8.- ¿Qué es la generación de código intermedio ?

Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.

9.- ¿Qué es la generación y optimización de código objeto ?

A partir de los análisis anteriores y de las tablas que estos análisis van creando durante su ejecución produce un código o lenguaje objeto que es directamente ejecutable por la máquina. Es la fase final del compilador. Las instrucciones del código intermedio se traducen una a una en código máquina reubicable.

Nota: Cada instrucción de código intermedio puede dar lugar a más de una de código máquina.

10.- ¿Cuáles son las diferencias entre un interprete y un compilador?

INTERPRETE: Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo.

COMPILADOR: Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto.

A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.




martes, 18 de mayo de 2010

Ligadores y Cargadores

1.-¿Qué son los ligadores?

Es un programa que enlaza todos los programas o módulos resultando de esto un programa ejecutable.

Estos programas que enlazan poseen subprogramas.

2.- ¿Cuáles son las principales funciones de un ligador?

*Enlazar código intermedio copilado

*Incorpora las rutinas de librería

*Reducir procedimientos por separados enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable.

3.- ¿Cuáles son los tipos de ligadores?

*-Editores de ligado

Realiza relocalización de todas las secciones de control relativas al inicio del programa ligado.

*-Ligador dinámico

Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan.

Cuando se utiliza el ligador dinámico se ejecuta la proposición llamada. LIGADOR DEL SISTEMA VAX que este es una acción del ligador en la creación de las secciones de imagen está controlada por ensamblador o compilador.

*-Editor de ligado de sistema /370

La técnica de referencia a un número se usa para mejorar la eficiencia. El programa de salida del editor de ligado se llama módulo de carga.

4.- ¿Cuáles son los ligadores estáticos?

Son los encargados de ligar el código objeto del programa que están guardados en uno o más archivos, además de todo ahorran espacio en el disco

5.- ¿Cuáles son los ligadores dinámicos?

Tiene ventajas ya que permite cargar rutinas solo cuando sea necesario, se puede obtener ahorro de tiempo y espacio en la memoria.

6.- ¿Cuáles son los ligadores de bibliotecas de códigos de objeto?

Ligador Estático

Ligador Dinámico

7.- ¿Qué es un cargador?

Es un programa que tiene como propósito colocar en la memoria las instrucciones y datos de un programa o información codificada en lenguaje máquina, para que entonces la computadora pueda procesarla. Un cargador es un programa que realiza la función de carga, pero muchos cargadores también incluyen relocalización y ligado.

8.- ¿Cuáles son las funciones de un cargador?

Colocar un programa objeto en la memoria e iniciar su ejecución, extraen información de un medio exterior de la memoria, traduce y carga el programa para ejecutarlo.

9.- ¿Tipos de cargadores?

*Cargadores iniciales.

Sirven para cargar en la memoria pequeños programas que inician el funcionamiento de una computadora.

*Cargadores absolutos.

Es cada vez que se ejecuta el programa cargador

*Cargadores con reubicación

Sirven para cargar programas de diferentes reubicación

*Cargadores ligadores

Esto es cuando adjunta al programa objeto

*Cargadores BOOTSTRAP

Es cuando la entrada es manual por medio del teclado

*Cargadores Absolutos

Lee la línea de código objeto inicial

*Cargadores Relocalizables

Permite localizar las posiciones de memoria para almacenar las palabras o instrucciones de datos

10. -¿Cuáles son los cargadores de carga absoluta y relocalizable?

Carga Absoluta: El cargador absoluto lee simplemente la línea de código objeto que contiene la dirección de inicio de las instrucciones y datos, y carga las palabras (o bytes) sucesivas en posiciones de memoria sucesivas.

Relocalizables: El cargador relocalizable es un programa más sofisticado, tiene las características del cargador absoluto, y además permite al usuario seleccionar y especificar las posiciones de memoria en las que se debe almacenar las palabras de instrucciones y datos.

11.- ¿Cuáles son los cargadores estáticos y dinámicos?

Estáticos: Un cargador estático es útil cundo es posible asignar en memoria un programa completo.

Dinámicos: Un cargador dinámico es útil cuando no es posible asignar en memoria un programa completo, dicho cargador se basa en el binder para operar de esta forma.

12.- ¿Qué entiendes por paso de control al sistema operativo?

Es el cambio del ultimo punto de consistencia del sistema en el que el usuario tenia control de la aplicaron, para que el sistema operativo se encargue de continuar son la ejecución.

martes, 20 de abril de 2010

INSTRUCCIONES DE LENGUAJE ENSAMBLADOR

1.- Instrucciones aritméticas

Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operandos.

AND
NEG
NOT
OR
TEST
XOR

Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los operandos.

ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB

Instrucción ADC

Propósito: Adición con acarreo.

Sintaxis:

ADC destino, fuente

Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.

El resultado se guarda en el operando destino.
Instrucción ADD

Propósito: Adición de los operandos.

Sintaxis:

ADD destino, fuente

Suma los dos operandos y guarda el resultado en el operando destino.
Instrucción DIV

Propósito: División sin signo

Sintaxis:

DIV fuente

El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción.

Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX.

Si el divisor fué un byte el cociente se almacena en el registro AL y el residuo en AH, si fué una palabra el cociente se guarda en AX y el residuo en DX.
Instrucción IDIV

Propósito: División con signo

Sintaxis:

IDIV fuente

Consiste basicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo.

Para sus resultados utiliza los mismos registros que la instrucción DIV.
Instrucción MUL

Propósito: Multiplicación sin signo

Sintaxis:

MUL fuente

El ensamblador 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.

Cuando se realiza una multiplicación con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicación es con valores de 16 bits el resultado se almacena en el registro par DX:AX.
Instrucción IMUL

Propósito: Multiplicación de dos enteros con signo.

Sintaxis:

IMUL fuente

Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican.

Los resultados se guardan en los mismos registros que en la instrucción MUL.
Instrucción SBB

Propósito: Substracción con acarreo

Sintaxis:

SBB destino, fuente

Esta instrucción resta los operandos y resta uno al resultado si CF está activada. El operando fuente siempre se resta del destino.

Este tipo de substracción se utiliza cuando se trabaja con cantidades de 32 bits.
Instrucción SUB

Propósito: Substracción

Sintaxis:

SUB destino, fuente Resta el operando fuente del destino.

http://www.monografias.com/trabajos32/microcontroladores/Image4748.gif


2.- Instrucciones de comparación

Compare


CMP


Compara 2 valores binarios sin signo almacenados en un canal especificado y envía el resultado a los indicadores aritméticos del área auxiliar

Double compare


CMPL 060


Compara 2 valores binarios sin signo almacenados en dos canales especificados y envía el resultado a los indicadores aritméticos del área auxiliar

Signed binary compare


CPS 114


Compara 2 valores binarios con signo almacenados en un canal especificado y envía el resultado a los indicadores aritméticos del área auxiliar

Double signed binary compare


CPSL 115


Compara 2 valores binarios con signo almacenados en dos canales especificados y envía el resultado a los indicadores aritméticos del área auxiliar

Table Compare


TCMP 085


Compara el valor de un canal con el de 16 canales consecutivos, poniendo a ON el bit correspondiente del canal de resultado

Multiple Compare


MCMP 019


Compara el contenido de 16 canales consecutivos con el de otros 16 canales consecutivos, poniendo a ON el bit correspondiente en el canal de resultado donde los contenidos de los canales no son iguales

Block Compare


BCMP 068


Determina si el valor de un canal está en el rango predeterminado

http://spilledpak.files.wordpress.com/2008/03/anzuelo31.png


3.- Instrucciones de salto
Las instrucciones del ensamblador

Instrucciones de salto Son utilizadas para transferir el flujo del proceso al operando indicado.

JMP
JA (JNBE)
JAE (JNBE)
JB (JNAE)
JBE (JNA)
JE (JZ)
JNE (JNZ)
JG (JNLE)
JGE (JNL)
JL (JNGE)
JLE (JNG)
JC
JNC
JNO
JNP (JPO)
JNS
JO
JP (JPE)
JS

Instrucciones para ciclos: LOOP Transfieren el flujo del proceso, condicional o incondicionalmente, a un destino repitiendose esta acción hasta que el contador sea cero.

LOOP
LOOPE
LOOPNE

Instrucciones de conteo Se utilizan para decrementar o incrementar el contenido de los contadores.

DEC
INC

Instrucciones de comparación Son usadas para comparar operandos, afectan al contenido de las banderas.

CMP
CMPS (CMPSB) (CMPSW)

Instrucciones de banderas Afectan directamente al contenido de las banderas.

CLC
CLD
CLI
CMC
STC
STD
STI

Instrucción JMP

Propósito: Salto incondicional

Sintaxis:

JMP destino

Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las condiciones actuales de las banderas ni de los datos.
Instrucción JA (JNBE)

Propósito: Brinco condicional

Sintaxis:

JA Etiqueta

Después de una comparación este comando salta si está arriba o salta si no está abajo o si no es igual.

Esto significa que el salto se realiza solo si la bandera CF esta desactivada o si la bandera ZF esta desactivada (que alguna de las dos sea igual a cero).
Instrucción JAE (JNB)

Propósito: salto condicional

Sintaxis:

JAE etiqueta

Salta si está arriba o si es igual o salta si no está abajo.

El salto se efectua si CF esta desactivada.
Instrucción JB (JNAE)

Propósito: salto condicional

Sintaxis:

JB etiqueta

Salta si está abajo o salta si no está arriba o si no es igual.

Se efectúa el salto si CF esta activada.
Instrucción JBE (JNA)

Propósito: salto condicional

Sintaxis:

JBE etiqueta

Salta si está abajo o si es igual o salta si no está arriba.

El salto se efectúa si CF está activado o si ZF está activado (que cualquiera sea igual a 1).
Instrucción JE (JZ)

Propósito: salto condicional

Sintaxis:

JE etiqueta

Salta si es igual o salta si es cero.

El salto se realiza si ZF está activada.
Instrucción JNE (JNZ)

Propósito: salto condicional

Sintaxis:

JNE etiqueta

Salta si no es igual o salta si no es cero.

El salto se efectua si ZF está desactivada.
Instrucción JG (JNLE)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JG etiqueta

Salta si es más grande o salta si no es menor o igual.

El salto ocurre si ZF = 0 u OF = SF.
Instrucción JGE (JNL)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JGE etiqueta

Salta si es más grande o igual o salta si no es menor que.

El salto se realiza si SF = OF
Instrucción JL (JNGE)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JL etiqueta

Salta si es menor que o salta si no es mayor o igual.

El salto se efectúa si SF es diferente a OF.
Instrucción JLE (JNG)

Propósito: salto condicional, se toma en cuenta el signo.

Sintaxis:

JLE etiqueta

Salta si es menor o igual o salta si no es más grande.

El salto se realiza si ZF = 1 o si SF es diferente a OF
Instrucción JC

Propósito: salto condicional, se toman en cuenta las banderas.

Sintaxis:

JC etiqueta

Salta si hay acarreo.

El salto se realiza si CF = 1
Instrucción JNC

Propósito: salto condicional, se toma en cuenta el estado de las banderas.

Sintaxis:

JNC etiqueta

Salta si no hay acarreo.

El salto se efectúa si CF = 0.
Instrucción JNO

Propósito: salto condicional, se toma en cuenta el estado de las banderas.

Sintaxis:

JNO etiqueta

Salta si no hay desbordamiento.

El salto se efectua si OF = 0.
Instrucción JNP (JPO)

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JNP etiqueta

Salta si no hay paridad o salta si la paridad es non.

El salto ocurre si PF = 0.
Instrucción JNS

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JNP etiqueta

Salta si el signo esta desactivado.

El salto se efectúa si SF = 0.
Instrucción JO

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JO etiqueta

Salta si hay desbordamiento (overflow).

El salto se realiza si OF = 1.
Instrucción JP (JPE)

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JP etiqueta

Salta si hay paridad o salta si la paridad es par.

El salto se efectúa si PF = 1.
Instrucción JS

Propósito: salto condicional, toma en cuenta el estado de las banderas.

Sintaxis:

JS etiqueta

Salta si el signo está prendido.

El salto se efectúa si SF = 1.
Instrucción LOOP

Propósito: Generar un ciclo en el programa.

Sintaxis:

LOOP etiqueta

La instrucción loop decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada como operando si CX es diferente a 1.
Instrucción LOOPE

Propósito: Generar un ciclo en el programa considerando el estado de ZF

Sintaxis:

LOOPE etiqueta

Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo del programa se transfiere a la etiqueta indicada como operando.
Instrucción LOOPNE

Propósito: Generar un ciclo en el programa, considerando el estado de ZF

Sintaxis:

LOOPNE etiqueta

Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente a 0.
Instrucción DEC

Propósito: Decrementar el operando

Sintaxis:

DEC destino

Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo oeprando.
Instrucción INC

Propósito: Incrementar el operando.

Sintaxis:

INC destino

La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.
Instrucción CMP

Propósito: Comparar los operandos.

Sintaxis:

CMP destino, fuente

Esta instrucción resta el operando fuente al operando destino pero sin que éste almacene el resultado de la operación, solo se afecta el estado de las banderas.
Instrucción CMPS (CMPSB) (CMPSW)

Propósito: Comparar cadenas de un byte o palabra.

Sintaxis:

CMP destino, fuente

Con esta instrucción la cadena de caracteres fuente se resta de la cadena destino.

Se utilizan DI como indice para el segmento extra de la cadena fuente y SI como indice de la cadena destino.

Solo se afecta el contenido de las banderas y tanto DI como SI se incrementan.
Instrucción CLC

Propósito: Limpiar bandera de acarreo.

Sintaxis:

CLC

Esta instrucción apaga el bit correspondiente a la bandera de acarreo, o sea, lo pone en cero.
Instrucción CLD

Propósito: Limpiar bandera de dirección

Sintaxis:

CLD

La instrucción CLD pone en cero el bit correspondiente a la bandera de dirección.
Instrucción CLI

Propósito: Limpiar bandera de interrupción

Sintaxis:

CLI

CLI pone en cero la bandera de interrupciones, desabilitando así aquellas interrupciones enmascarables.

Una interrupción enmascarable es aquella cuyas funciones son desactivadas cuando IF = 0.
Instrucción CMC

Propósito: Complementar la bandera de acarreo.

Sintaxis:

CMC

Esta instrucción complementa el estado de la bandera CF, si CF = 0 la instrucción la iguala a 1, y si es 1 la instrucción la iguala a 0.

Podemos decir que unicamente "invierte" el valor de la bandera.
Instrucción STC

Propósito: Activar la bandera de acarreo.

Sintaxis:

STC

Esta instrucción pone la bandera CF en 1.
Instrucción STD

Propósito: Activar la bandera de dirección.

Sintaxis:

STD

La instrucción STD pone la bandera DF en 1.
Instrucción STI

Propósito: Acticar la bandera de interrupción.

Sintaxis:

STI

La instrucción activa la bandera IF, esto habilita las interrupciones externas enmascarables (las que funcionan unicamente cuando IF = 1 ).


http://sistemas.itlp.edu.mx/tutoriales/ensamblador/img41.gif

4.-¿Instrucciones para el stack?
Durante la ejecución de un programa, se utilizan varias zonas de memoria bien diferenciadas para guardar los parámetros, el contexto de la ejecución, las variables locales, el código, etc.... Son la pila de llamadas (call stack), el área de datos dinámicos, conocida como el montón o montículo (heap), el área de datos estáticos y el área de código. En este artículo se describe de manera básica y genérica cómo son utilizadas estas zonas durante la ejecución de un programa.

Cuando se realiza un programa compilado compuesto de varias funciones (o métodos, si estamos utilizando un lenguaje orientado a objetos), los compiladores traducen cada función y su contenido a código máquina dependiente de la plataforma.

Cuando se inicia la ejecución de ese programa, el sistema operativo carga el código ejecutable en una zona de memoria que esté libre, y además, reserva al menos dos espacios más de memoria para que el programa pueda ejecutarse, y almacene allí los datos que necesite: son el stack y el heap.

En aquellos lenguajes que además, permiten la creación de variables globales (como C o Pascal), se reserva además una tercera zona llamada zona de datos, área de datos o algo similar.

Supongamos que vamos a ejecutar un programa, y en un momento dado sólo está cargado el sistema operativo en la memoria principal.

Cuando le pedimos al sistema operativo que ejecute el programa, se carga el código ejecutable en una zona libre de la memoria, y el sistema operativo, además, reserva:

* Una zona de datos para las variables globales y las constantes. Como en tiempo de compilación se conocen perfectamente las variables globales y las constantes, se reserva el espacio justo y necesario. Ni un byte de más. Además, aquellas variables globales que sean inicializadas a un valor concreto y también las constantes, se les puede dar valor cuando se reserva la zona de datos.
* Una zona para las llamadas (stack) que almacenará los parámetros de las funciones, las variables locales y los valores de retorno de las funciones (o métodos).
* Una zona para la gestión dinámica de memoria (el heap). Es decir, aquella memoria que se solicita durante la ejecución del programa. Por ejemplo, en C con la orden malloc, en Pascal con getMem o en la mayoría de lenguajes más modernitos (Java, C#, C++ etc...) con new.



A partir de este momento, el programa está listo para ser ejecutado. El sistema operativo indicará a la CPU que para ejecutarlo debe apuntar con el registro del puntero de instrucciones (IP, instruction pointer) a la primera instrucción del código, y que debe apuntar con su puntero de pila (SP, stack pointer) a la primera dirección del área reservada para pila.

La gestión del heap y del area de datos suele quedar a cargo del compilador, que habrá introducido código para gestionarlas, y no de la CPU.

En otros casos, el sistema operativo no prepara un área de heap para cada aplicación, sino que él mismo gestiona un heap global utilizado por todas las aplicaciones que están en ejecución.

Todas las aplicaciones tienen un punto de entrada (la función main o similar). Cuando empieza la ejecución, el IP de la CPU apunta a la dirección de este punto de entrada.

LA PILA o STACK

Una pila es una estructura de datos en la cual, el último elemento en llegar es el primero en salir (a menudo este comportamiento se abrevia con las siglas LIFO.- Last Input First Output). Se llama así porque su comportamiento se asemeja a una pila de cosas. Por ejemplo, imagina una pila de platos iguales, uno sobre otro. La forma de añadir un plato nuevo a la pila es colocándolo encima. Cuando queremos retirar un plato también cogemos el de arriba.

La pila de llamadas también tiene este comportamiento. Cuando empieza la ejecución, la pila está inicialmente vacía. En el transcurso de la ejecución, seguro que se efectúan llamadas a otras funciones (o métodos). En cada llamada, en la pila se almacena lo siguiente:

* La dirección a la que se debe retornar después de la llamada, es decir, la dirección de la instrucción siguiente a la propia llamada.
* Los datos pasados como parámetros de la llamada.
* Las variables locales utilizadas por la función llamada
* Si la función devuelve algo, lo dejará en la pila también.

Por ejemplo, observa este sencillo código en C#


01 class Program
02 {

04 static int metodo1(int a)
05 {
06 int b = metodo2(a+6);
07 return a + b;
07 }

09 static int metodo2(int c)
10 {
11 return c - 3;
12 }

14 static void Main(string[] args)
15 {
16 Console.WriteLine(metodo1(43));
17 Console.WriteLine("Fin");
18 }
19 }


http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Call_stack_layout.svg/342px-Call_stack_layout.svg.png


5.-¿Que son los macros y para que sirven?
Macro
De Wikipedia, la enciclopedia libre
Saltar a navegación, búsqueda

' 'Para la fotografía, véase Macrofotografía.
Para el museo, véase Museo de Arte Contemporáneo de Rosario.

Una macro (del griego μακρο; significa «grande»), abreviatura de macroinstrucción, es una serie de instrucciones que se almacenan para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecución. Dicho de otra forma, una macroinstrucción es una instrucción compleja, formada por otras instrucciones más sencillas. Esto permite la automatización de tareas repetitivas.

El término no se aplica a una serie de instrucciones escritas en la línea de comandos enlazadas unas con otras por redirección de sus resultados (piping) o para su ejecución consecutiva.

Las macros suelen almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto.

La diferencia entre una macroinstrucción y un programa es que en las macroinstrucciones la ejecución es secuencial y no existe otro concepto del flujo de programa, y por tanto, no puede bifurcarse.

Editar y ejecutar macros.



Las funciones y las subrutinas se pueden implementar en el editor de Visual Basic (Alt-F11).

Para usar una función en una hoja de Excel se debe, en el editor de VB, insertar un módulo y editar la función en este módulo. Esta acción de describe más adelante. De la misma manera se pueden editar subrutinas en un módulo.

Una función se invoca en una hoja, como se invoca una función de Excel o una fórmula. Una subrutina se puede invocar por ejemplo desde la ventana de ejecución de macros (Alt-F8) o desde un botón que hace una llamada a la subrutina (como respuesta al evento de hacer clic sobre él, por ejemplo).

El código que ejecuta un botón puede llamar a subrutinas y a las funciones de la hoja. El código del botón no está en un módulo. En la hoja de edición donde se encuentra el código del botón, se pueden implementar funciones para uso de este código pero que serán desconocidas para la hoja (mensaje de error #¿NOMBRE?).

Nota: un error frecuente es editar una función en un módulo que corresponde a una hoja y llamarlo desde otra hoja. En este caso se despliega el error (mensaje de error #¿NOMBRE?).

http://www.aulaclic.es/word2003/graficos/codigo_macro.gif


6.-¿Que son las interrupciones y a quienes afectan?

INTERRUPCIONES.

Como se mencionó anteriormente la PC esta constituida lógicamente por su BIOS y sistema operativo. La mayoría de las rutinas que controlan al computador están grabadas en el ROM del BIOS, aunque muchas rutinas son establecidas por el sistema operativo y se cargan en RAM al momento de encender al computador. Estas rutinas son denominadas interrupciones y son activadas mediante la instrucción: INT número. Una interrupción es una operación que invoca la ejecución de una rutina específica que suspende la ejecución del programa que la llamó, de tal manera que el sistema toma control del computador colocando en el stack el contenido de los registros CS e IP. El programa suspendido vuelve a activarse cuando termina la ejecución de la interrupción y son restablecidos los registros salvados. Existen dos razones para ejecutar una interrupción: (1) intencionalmente como petición para la entrada o salida de datos de un dispositivo, y (2) un error serio y no intencional, como sobreflujo o división por cero.



El operando de una interrupción indica cuál es la rutina a activar. La dirección de la rutina es localizada por medio de una tabla que el sistema mantiene a partir de la dirección 0000:0000h. Existen 256 entradas de 4 bytes de longitud, y cada interrupción proporciona varias funciones. Las interrupciones de 00h a 1Fh corresponden al BIOS y de 20h a FFh son del DOS y BASIC. El apéndice F proporciona una lista de las interrupciones para equipo XT.

http://3.bp.blogspot.com/_KI_9mwIhDrU/Sho2zGRGsrI/AAAAAAAAABU/hghGD9uQ8Mk/S1600-R/head2.jpg

martes, 23 de marzo de 2010

Lenguaje Ensamblador


1.-¿ Que es lenguaje ensamblador?

El lenguaje ensamblador 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.

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

Muchos dispositivos programables (como los microcontroladores) aun cuentan con el ensamblador como la única manera de ser manipulados.
















2.-¿Para que te sirve el lenguaje ensamblador?

La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. En esencia, el ensamblador debe realizar las siguientes tareas:

1. Convertir los códigos ("opcode" o mnemónicos: ej. LDA, STX) a su código equivalente en lenguaje de máquina

2. Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos

3. Construir las instrucciones en lenguaje de máquina en el formato apropiado

4. Convertir las constantes definidas en el programa en su verdadera representación

5. Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de máquina correspondiente

6. Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador, que éste procesa y ejecuta al hallarlos en el programa en lenguaje de ensamblador; estas directrices no se traducen a lenguaje de máquina, si no que el ensamblador ejecuta alguna acción, como reservar memoria para variables, entre otras)


http://www.ceintec.com/curso_de_programacion_ensamblador_motorola_68000_presencial_en_bilbao_bilbo_vizcaya_bizkaia_4631817.jpg


3.-¿Menciona al menos dos ejemplos de donde se puede aplicar el lenguaje ensamblador?


Fue usado principalmente en los inicios de desarrollo del software, cuando aun no se contaban con los potentes lenguajes de alto nivel. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación.


Ejemplo 1

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

 .model small

.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code

programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa

Ejemplo 2

Una selección de instrucciones para una computadora virtual[3] ) con las correspondientes direcciones de memoria en las que se ubicarán las instrucciones. Estas direcciones NO son estáticas. Cada instrucción se acompaña del código en lenguaje ensamblador generado (código objeto) que coincide con la arquitectura de computador virtual, o conjunto de instrucciones ISA.

Dir. Etiqueta Instrucción Código máquina[4]


.begin


.org 2048

a_start .equ 3000
2048
ld length,%
2064
be done 00000010 10000000 00000000 00000110
2068
addcc %r1,-4,%r1 10000010 10000000 01111111 11111100
2072
addcc %r1,%r2,%r4 10001000 10000000 01000000 00000010
2076
ld %r4,%r5 11001010 00000001 00000000 00000000
2080
ba loop 00010000 10111111 11111111 11111011
2084
addcc %r3,%r5,%r3 10000110 10000000 11000000 00000101
2088 done: jmpl %r15+4,%r0 10000001 11000011 11100000 00000100
2092 length: 20 00000000 00000000 00000000 00010100
2096 address: a_start 00000000 00000000 00001011 10111000


.org a_start
3000
a:














4.-¿Como se realiza el manejo de memoria?

La unidad de manejo de memoria o unidad de gestión de memoria (de sus siglas en inglés: Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).

Entre las funciones de este dispositivo se encuentran la traducción de las direcciones virtuales a direcciones físicas (ver Sistema de Memoria Virtual), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching. Cuando la CPU intenta acceder a una dirección de memoria virtual, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene una parte de la tabla de páginas usadas hace menos tiempo.

http://www.toxico-pc.com/images_reviews/img_443_3_orig.jpg

5.-¿Que es el direccionamiento en lenguaje ensamblador?
Modos de direccionamiento

Se les llama modos de direccionamiento a las distintas formas de combinar los operadores según el acceso que se hace a memoria.

Dicho de otra manera, un modo de direccionamiento será una forma de parámetro para las instrucciones. Una instrucción que lleve un parámetro, por lo tanto, usará un modo de direccionamiento, que dependerá de cómo direccionará (accesará) al parámetro; una instrucción de dos parámetros, combinará dos modos de direccionamiento.

http://imagenes.mailxmail.com/cursos/imagenes/5/1/compiladores-e-interpretes-de-programas_25315_24_1.jpg


6.-¿Cuales son los tipos de direccionamiento?

  • Modo registro

Usa solamente registros como operadores

Es el más rápido, pues minimiza los recursos necesarios (toda la información fluye dentro del EU del CPU).

  • Modo inmediato

Tiene dos operandos: un registro y una constante que se usa por su valor.

El valor constante no se tiene que buscar en memoria, pues ya se obtuvo al hacer el "fetch" de la instrucción.

Por tanto, es rápido aunque no tanto como el modo registro; requiere ir al BIU por el dato.

  • Modo directo

Uno de los operandos involucra una localidad específica de memoria

El valor constante se tiene que buscar en memoria, en la localidad especificada.

Es más lento que los anteriores, pero es el más rápido para ir a memoria, pues ya "sabe" la localidad, la toma de la instrucción y no la tiene que calcular.

  • Modo indirecto

Se usan los registros SI, DI como apuntadores

El operando indica una localidad de memoria, cuya dirección (sólo la parte desplazamiento) está en SI o DI.

Es más lento que los anteriores, pues tiene que "calcular" la localidad.

  • Modo indexado de base

Formato:

[
BX o BP
+ SI o DI (opcionales)
+ constante (opcional)
]

BX o BP indica una localidad base de la memoria

A partir de BX o BP, se puede tener un desplazamiento variable y uno constante

La diferencia es el segmento sobre el que trabajan por defecto:

BX por defecto en el segmento de datos

BP por defecto en el segmento de pila.


http://www.monografias.com/trabajos32/microcontroladores/Image4751.gif

7.-¿Que es el formato de un programa?
"Existen ciertas normas para crear un programa en lenguaje ensamblador. La primera se refiere al formato interno de cada instrucción del lenguaje. Toda línea del código debe digitarse bajo ciertas reglas, las cuales pueden considerarse como la sintaxis propia del lenguaje. Sin embargo, como se verá más adelante, en la formación de instrucciones también entra en juego la semántica. La segunda norma es el formato externo del programa, que puede equipararse con una capa que rodeará al programa para ayudar

EL FORMATO INTERNO

El forma interno de una línea de código se puede resumir en cuatro partes.

• La etiqueta/variable/constante.- puede definirse o no, y si se define debe estar seguida por separadores, ya sea uno o más espacios o tabuladores.

• El nombre nemónico/directiva.- que puede equipararse con el verbo o la acción por realizar, seguido de uno o más separadores (espacios o tabuladores).

• El operando.- que generalmente se divide en dos (aunque existen instrucciones que solo operan con uno): el destino (que será el depósito de algún resultado) y la fuente de la información (el originador de la “acción”). El destino y la fuente (si existe ésta) deben estar separados por una coma.

• El comentario.- que siempre va precedido por el símbolo “;”, debe de estar separado del operando por uno o más espacios o tabulaciones, y puede existir o no.

EL FORMATO EXTERNO

El formato externo esta formado por varios comandos clave que permiten establecer el entorno operativo del programa. Entre ellos tenemos uno que define el modelo de memoria (básicamente establece cuáles y cuántos segmentos se van a usar), los diferentes segmentos que contendrá el código, los datos y la pila, así como el comienzo y final del programa. Ahora bien, existen dos maneras de definir el programa: en la primera se utilizan directivas simplificadas y en la segunda no se usan. Las directivas simplificadas ayudan a esclarecer ciertos comandos crípticos del programa, permitiendo que sean más legibles, y se incluyeron en las versiones del MASM 5.0 y posteriores.

http://s3.subirimagenes.com:81/otros/2807251fin.jpg




martes, 2 de marzo de 2010

Unidad 1

1¿En que se basa el modelo de John Von Neumann?


Computadora Von Neumann



Una computadora (Hispanoamérica) u ordenador (España) es un dispositivo electrónico compuesto básicamente de un procesador, memoria y dispositivos de entrada/salida (E/S). La característica principal de la computadora, respecto a otros dispositivos similares, como una calculadora no programable, es que con él se pueden realizar tareas muy diversas, cargando distintos programas en la memoria para que los ejecute el procesador. Siempre se busca optimizar los procesos, ganar tiempo, hacerlo más fácil de usar y simplificar las tareas rutinarias.



Los ordenadores con arquitectura Von Neumann constan de las siguientes partes:



Modelo básico de la arquitectura de von Neumann, en la que se basan todos los ordenadores modernos






2¿Cuáles son los lenguajes formales y sus características principales?


Lenguaje formal






Esta imagen muestra la relación entre las cadenas de caracteres, las fórmulas bien formadas y los teoremas. En algunos sistemas formales, sin embargo, el conjunto de los teoremas coincide con el de las fórmulas bien formadas.

En matemáticas, lógica, y ciencias de la computación, un lenguaje formal es un lenguaje cuyos símbolos primitivos y reglas para unir esos símbolos están formalmente especificados.[1] Al conjunto de los símbolos primitivos se le llama el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la gramática formal (o sintaxis). A una cadena de símbolos formada de acuerdo a la gramática se la llama una fórmula bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es idéntico al conjunto de todas sus fórmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser un conjunto finito) y con cada fórmula bien formada (que debe tener una longitud también finita), un lenguaje formal puede estar compuesto por un número infinito de fórmulas bien formadas.




3¿Qué son los editores y para que sirven?



Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos únicamente por texto sin formato, conocidos



4 ¿Qué son los Editores de carácter?

En terminología informática y de telecomunicaciones, un caracter es una unidad de información que corresponde aproximadamente con un grafema o con una unidad o símbolo parecido, como los de un alfabeto o silabario de la forma escrita de un lenguaje natural.

Un ejemplo de caracter es una letra, un número o un signo de puntuación. El concepto también abarca a los caracteres de control, que no se corresponden con símbolos del lenguaje natural sino con otros fragmentos de información usados para procesar textos, tales como el retorno de carro y el tabulador, así como instrucciones para impresoras y otros dispositivos que muestran dichos textos


5¿Qué son los editores de línea?

Editores de líneas. Esta clase de editores fueron los precursores de los editores de pantalla completa. Permitían al programador editar una sola línea a la vez. El programador debe especificar qué línea se debe editar.

Hay aún dos editores de líneas que son populares:

· vi Es una abreviación para visual. vi es un editor basado en UNIX.

· Edlin Es una contracción de Edit lines. Edlin se puede utilizar en una plataforma de MS-DOS.


6¿Qué son los editores de pantalla?

Editores de pantalla completa. Los editores de pantalla completa son más fáciles de usar que los editores de líneas, porque los programadores editan cualquier línea en cualquier momento. Los editores de pantalla completa pueden proporcionar varias herramientas útiles para los programadores, por ejemplo:

· Menús de cortina. En los editores de pantalla completa pueden haber comandos para hacer alguna tarea específica, estos comandos suelen ordenarse y agruparse en menús que se despliegan hacia abajo (como una cortina), de modo que el programador no tiene que aprenderlos de memoria.

7¿Qué son los lenguajes de programación?

Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.[1] Está formado de un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.

8¿Cuáles son los lenguajes de alto nivel?

Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.

En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales.

Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar tal problema de procesamiento de datos de una manera más fácil y rápida.

9¿Cuáles son los de medio nivel o intermedio?

Lenguaje de medio nivel es un lenguaje de programación informática como el lenguaje C, que se encuentran entre los lenguajes de alto nivel y los lenguajes de bajo nivel.

Suelen ser clasificados muchas veces de alto nivel, pero permiten ciertos manejos de bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas operativos, ya que permiten un manejo abstracto (independiente de la máquina, a diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen los lenguajes de bajo nivel.

Una característica distintiva, por ejemplo, que convierte a C en un lenguaje de medio nivel y al Pascal en un lenguaje de alto nivel es que en el primero es posible manejar las letras como si fueran números (en Pascal no), y por el contrario en Pascal es posible concatenar las cadenas de caracteres con el operador suma y copiarlas con la asignación (en C es el usuario el responsable de llamar a las funciones correspondientes).

Una de las características mas peculiares del lenguaje de programación C; es el uso de “apuntadores”, los cuales son muy útiles en la implementación de algoritmos como Listas ligadas, Tablas Hash y algoritmos de búsqueda y ordenamiento que para otros lenguajes de programación (como Java por ejemplo) les suele ser un poco más complicado implementar.

10¿Cuáles son los de bajo nivel?

Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. Consecuentemente es fácilmente trasladado a lenguaje de máquina.

La palabra "bajo" no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstracción entre el lenguaje y el hardware.

11¿Menciona los tipos de 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 simplemente texto. Este proceso de traducción se conoce como compilación.[1]

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.

Archivo:CompilationScheme-Spanish.png

12¿Menciona los tipos de interpretes?

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 primeros (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 (ej. una PC y un PlayStation 3). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.

13¿Cuál es la diferencia entre un interprete y un compilador?

Diferencia entre un interprete y compilador

INTERPRETE: Es un programa que lee línea a línea un programa escrito en un lenguaje; en lenguaje fuente y lo va traduciendo a un código intermedio, para ejecutarlo.

COMPILADOR: Es un programa que lee totalmente un programa escrito en un lenguaje; el lenguaje fuente, y lo traduce a un programa equivalente a otro lenguaje, lenguaje objeto.

A grandes rasgos un compilador es un programa que lee un programa escrito es un lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa a su usuario de la presencia de errores en el programa fuente.