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.









2. ¿Para que te sirve el lenguaje ensamblador?
Los ensambladores permiten que los programas origen se escriban y se editen en una computadora para generar un código ejecutable en otra computadora. El archivo en lenguaje objeto ejecutable resultante se carga y se ejecuta en el sistema destino.











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



Ejemplo 1

Código en lenguaje ensamblador para µC Intel 80C51:

 
 ORG 8030H
 
 T05SEG:                     
  SETB TR0
  JNB uSEG, T05SEG       ; esta subrutina es utilizada     
  CLR TR0               ; para realizar una cuenta de 
  CPL uSEG              ; 0,5 segundos mediante la     
  MOV R1,DPL            ;interrupción del timer 0.     
  MOV R2,DPH                 
  CJNE R2,#07H,T05SEG        
  CJNE R1,#78H,T05SEG        
  MOV DPTR,#0000H
  RET

Ejemplo 2

Código en lenguaje ensamblador para µC 16F84 de Microchip:

  ORG   0
 Inicio
        bsf     STATUS,RP0             
        clrf    PORTB                  
        movlw   0xFF                   
        movwf   PORTA
        bcf     STATUS,RP0             
 Principal
        movf    PORTA,W                 
        movwf   Contador               
        movf    Contador,F             
        btfsc   STATUS,Z               
        goto    PuntoDecimal           
        sublw   d'9'                   
        btfss   STATUS,C
         END



4. ¿Como se realiza el manejo de memoria?

La reserva de memoria dinámica se hace en tiempo de ejecución después de leer los datos y de conocer el

tamaño exacto del problema. Como consecuencia se adapta mucho mejor a las necesidades en cada caso.

El sitio donde se almacenan los objetos se denominan en ingles heap o free store traducido como montículo o memoria libre, y el sitio preciso donde se encuentre depende del compilador y el tipo de puntero utilizado. La creación y estrucción de los objetos esta

en manos del programador a través de los operadores new y delete.

En C# las variables que se declaran son punteros y se pasan eficientemente con referencia, tampoco es necesario considerar la liberación de la me

moria puesto que framework se encarga de lib

erar todas las referencias que no se estén utilizando y compactar la memoria para mejorar el rendimiento.



5. ¿Que es el direccionamiento en lenguaje ensamblador?

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.




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:

[

de leer los datos y de conocer el tamaño exact

o del problema. Como consecuencia se adapta mucho mejor a las necesidades en cada caso.

El sitio donde se almacenan los objetos se denominan en ingles heap o free store traducido como montículo o memoria libre, y el sitio preciso donde se encuentre depende del compilador y el tipo de puntero utilizado. La creación y estrucción de los objetos esta en manos del programador a través de los operadores new y delete.

En C# las variables que se declaran son punteros y se pasan eficientemente con referencia, tampoco es necesario considerar la liberación de la me

moria puesto que framework se encarga de lib

erar todas las referencias que no se estén utilizando y compactar la memoria para mejorar el rendimiento.

La reserva de memoria dinámica se hace en tiempo de ejecución después


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.

7. ¿Que es el formato de un programa?

Es una manera particular de codificar información para almacenarla en un archivo informático.

Dado que una unidad de disco, o de hecho cualquier memoria sólo puede almacenar bits, la computadora debe tener alguna manera de convertir la informaciónprocesador de texto, habrá a ceros y unos y viceversa. Hay diferentes tipos de formatos para diferentes tipos de información. Sin embargo, dentro de cada tipo de formato, por ejemplo documentos de un

normalmente varios formatos diferentes, a veces en competencia.



martes, 2 de marzo de 2010

unidad1



1­.- ¿En que se basa el modelo de jonn vonn newman?

Observó que la torpeza de la aritmética decimal en serie utilizada por la ENIAC, con cada dígito representado por diez bulbos (uno encendido y nueve apagados), podía reemplazarse usando aritmética binaria paralela.

Su diseño básico, ahora conocido como una Máquina de Von Neumann, se usó en la EDSAC para la primera computadora que almacenaba el programa, y constituye todavía la base para la mayoría de las computadoras digitales, casi medio siglo después. Este diseño y la máquina IAS, construida en colaboración con Herman Goldstine, ha tenido una influencia tan grande.

La Máquina de Von Neumann tenía cinco partes básicas: la memoria, la unidad aritmética-lógica, la unidad de control del programa y los equipos de entrada y salida.

COMPONENTES:
La Memoria: Constaba de 4096 palabras, cada una con 40 bits (0 o 1).
* Cada palabra podía contener dos instrucciones de 20 bits o un número entero de 39 bits y su signo.
* Las instrucciones tenían 8 bits dedicados a señalar el tipo de la misma y 12 bits para especificar alguna de las 4096 palabras de la memoria.
Unidad de Control: Determina cual es la siguiente instrucción a ejecutar y se la pasa al ALU.
ALU (Aritmetic Logic Unit): La Unidad Aritmética Lógica, es el taller donde se ejecutan las instrucciones.
Acumulador: 40 bits que sirven para:
* Recibir datos de entrada.
* Enviar datos a la salida.
* Guardar el resultado de la última operación.

2.- ¿Cuales son los lenguajes formales y sus características principales?

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.





Las características de los lenguajes formales son las siguientes:
 1. Se desarrollan de una teoría preestablecida.
 2. Componente semántico mínimo.
 3. Posibilidad de incrementar el componente semántico de acuerdo con la teoría a formalizar.
  4. La sintaxis produce oraciones no ambiguas.
 5. La importancia del rol de los números.
 6. Completa formalización y por esto, el potencial de la construcción computacional.
3.- ¿Que son los editores y para que sirven?





Editor o editorial, persona o empresa que publica libros, revistas, o que difunde cualquier tipo de información etc.










4.- ¿Que son los editores de carácter?



El editor para caracteres es A[w], siendo w el ancho del campo medido en caracteres. Si omitimos w, la longitud de los datos se tomará como el ancho del campo.



En la entrada, sea long la longitud de los datos que leemos. Si w es mayor que long, los caracteres después de la posición long también son leídos. Si w es menor que long, a la entrada le añadiremos espacios en blanco por la derecha.




En la salida, si w es mayor que long, se añaden espacios en blanco por la izquierda. Si w es menor que long, los caracteres antes de la posición w aparecerán en la salida.



5.- ¿Que son los editores de línea?


Editores De Línea
Algunos de lo primeros editores de línea simulaban el mundo de las tarjetas perforadas, ya que permitían operaciones con secuencias numeradas de líneas, a imagen de las tarjetas de 80 caracteres, en una sola línea o en varias.














6.- ¿Qué son los editores de pantalla?




Un editor de pantalla completa es aquel editor que nos permite ver el documento que estamos escribiendo a medida que lo hacemos, en contraposición a un editor de líneas, que sólo nos permite ver la línea que estamos editando. Actualmente, la inmensa mayoría de los editores que existen son de pantalla completa, por lo que a los más jóvenes les puede sonar extraña la idea de un editor de líneas. Ejemplos de este tipo tenemos en el ed, sed y el edlin, que venía con el DOS hasta la versión 4.00.





7.- ¿Que 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.- ¿Cuales 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.



Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman "de tercera generación" o "de alto nivel", en contraposición a los "de bajo nivel" o "de nivel próximo a la máquina".

Ventajas
La programación en un lenguaje de alto nivel tiene ciertas ventajas:
Genera un código más sencillo y comprensible.

Escribir un código válido para diversas máquinas y, posiblemente, sistemas operativos.

Inconvenientes
Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.

Algunos requieren que la máquina cliente posea una determinada plataforma.

9.- ¿Cuales son los de intermedio nivel?



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.- ¿Cuales 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.

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.


12.-Menciona los tipos de intérpretes



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.

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.


13.-¿cual es la diferencia 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.