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.