viernes, 28 de mayo de 2010

COMPILADORES
1.-¿Cuales son las funciones de un compilador?
R=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.Los lenguajes objeto son igualmente variados; un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de cualquier computador entre un microprocesador y un supercomputador.
A pesar de existir una aparente complejidad por la clasificación de los compiladores, como se vio en el tema anterior, las tareas básicas que debe realizar cualquier compilador son esencialmente las mismas.
Al comprender tales tareas, se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquinas objeto utilizando las mismas técnicas básicas.
Nuestro
conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecer los primeros compiladores a principios de los años cincuenta.Es difícil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos.
Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de fórmulas aritméticas a código de máquina.

2.-¿Cuales son las fases de los compiladores?
R=Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectar muchos errores por su característica.

Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aqui ya se puede determinar si una extructura por ejemplo una expresión matemática mal formada. El análisis que se realiza es jerarquico es decir en base a àrboles de derivación que se obtienen de las mismas gramáticas.

Generación de Código Intemedio: El código intermedio es una representación en base a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de optimizaciòn de código.



Optimización de Código: Consiste en realizar uuna mejora en el código intermedio, para reducir el número de líneas y hacer que la ejecución sea más rápida.

3.-¿En que consiste la fase de analisis?

R=El Análisis: trata básicamente de determinar los objetivos y límites del sistema objeto de análisis, caracterizar su estructura y funcionamiento, marcar las directrices que permitan alcanzar los objetivos propuestos y evaluar sus consecuencias. Dependiendo de los objetivos del análisis, podemos encontrarnos ante dos problemáticas distintas:

  • Análisis de un sistema ya existente para comprender, mejorar, ajustar y/o predecir su comportamiento
  • Análisis como paso previo al diseño de un nuevo sistema-producto

En cualquier caso, podemos agrupar más formalmente las tareas que constituyen el análisis en una serie de etapas que se suceden de forma iterativa hasta validar el proceso completo:

Describe las acciones o transformaciones que tienen lugar en el sistema.

Dichas acciones o transformaciones se especifican en forma de procesos que reciben unas entradas y producen unas salidas.

4.-¿Cual es el analisis de lexicografico?

R=Estudia la cadena de caracteres que constituye el programa fuente se lee de isquierda a derecha y se agrupa en com ponentes lexicos.

estudia la primera fase de compilador es decir su analisis lexicografico.

5.-¿Cual es el analisis sintactico?

R=El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un analizador léxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintáctico para construir la estructura de datos, por ejemplo un árbol de análisis o árboles de sintaxis abstracta.

El análisis sintáctico también es un estado inicial del análisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexión gramatical, como los idiomas romances o el latín. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto. Cabe notar que existe una justificación formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autómata de pila, de modo que todo analizador sintáctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autómata de pila.

6.-¿En que consiste el analisis semantico?

R=El análisis semántico es posterior al sintáctico y mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.

La salida “teórica” de la fase de análisis semántico sería un árbol semántico. Consiste en un árbol sintáctico en el que cada una desus ramas ha adquirido el significado que debe tener. En el caso de los operadores polimórficos (un único símbolo con varios significados), el análisis semántico determina cuál es el aplicable. Por ejemplo, consideremos la siguiente sentencia de asignación:

A := B + C

En Pascal, el signo “+” sirve para sumar enteros y reales, concatenar cadenas de caracteres y unir conjuntos. El análisis semántico debe comprobar que B y C sean de un tipo común o compatible y que se les pueda aplicar dicho operador. Si B y C son enteros o reales los sumará, si son cadenas las concatenará y si son conjuntos calculará su unión.

7.-¿En que consiste la fase de sintesis?

R=Etapa de generación de código intermedio, aunque algunos compiladores no la tienen, es bueno saber de su existencia, en esta etapa se lleva el código del programa fuente a un código interno para poder trabajar mas fácilmente sobre él. Esta representación interna debe tener dos propiedades, primero debe ser fácil de representar y segundo debe ser fácil de traducir al código objeto.

En la etapa de optimización de código, se busca obtener el código mas corto y rápido posible, utilizando distintosalgoritmos de optimización.

Etapa de generación de código, se lleva el código intermedio final a código maquina o código objeto, que por lo general consiste en un código maquina relocalizable o código ensamblador. Se selecciona las posiciones de memoria para los datos (variables) y se traduce cada una de las instrucciones intermedias a una secuencia de instrucciones de maquina puro.

La tabla de símbolos no es una etapa del proceso de compilación, sino que una tarea, una función que debe realizar el proceso de compilación. En ella se almacenan los identificadores que aparecen en el código fuente puro, como así también los atributos de los mismos, su tipo, su ámbito y en el caso de los procedimientos el número de argumentos el tipo de los mismos etc.

8.-¿Que es la generacion de codigo intermedio?

R=El código intermedio es un código abstracto independiente de la máquina para la que se generará el código objeto. El código intermedio ha de cumplir dos requisitos importantes: ser fácil de producir a partir del análisis sintáctico, y ser fácil de traducir al lenguaje objeto. Esta fase puede no existir si se genera directamente código máquina, pero suele ser conveniente emplearla.

9.-¿Que es la generalizacion de codigo objeto?

R=Para la generación de código objeto, se busca en las reglas establecidas la proposición que coincida con la entrada actual; la entrada actual proviene de un árbol. Un ejemplo de esto seria

Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los análisis: léxico, sintáctico y semántico, para generar seguidamente el código intermedio, el código intermedio se genera con principios de búsqueda de patrones y aplicación de reglas. Después se hace la optimización del código intermedio; seguidamente se realiza la generación de código objeto en lenguaje de máquina.

10.-¿Cuales son las diferencias entre interprete y compilador?

R=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



Cargadores y Ligadores




.




1.- ¿Que son ligadores?




R= Un cargador ligador realiza todas las operaciones de ligado y relocalización, incluyendo búsqueda automática en bibliotecas, si se especifica, y carga el programa ligado directamente en la memoria para su ejecución. Por otro lado, un editor de ligado produce una versión ligada del programa (llamada a menudo módulo de carga o imagen ejecutable), que se escribe un archivo o biblioteca para su ejecución posterior. Cuando el usuario esta listo para ejecutar el programa ligado, se puede utilizar un cargador relocalizador simple para cargar el programa en la memoria.








LIGADOR DINAMICO. El ligador dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria.


2.-¿Funciones de un ligador?




R=Los editores de ligado pueden efectuar varias funciones últimas a demás de la simple preparación de un programa objeto para su ejecución estos también se pueden utilizar para construir paquetes de subrutinas u otras secciones que suelen utilizar juntas. Esto puede ser útil al tratar con bibliotecas de subrutinas que manejan lenguajes de programación de alto nivel. Comparados con los cargadores de ligadores los editores de ligado en general tienden a ofrecer mayor flexibilidad y control con el correspondiente incremento e complejidad y sobrecarga.




La tarea principal del enlazador es resolver referencias externas lleva a cabo la siguiente etapa del proceso de traducción enlazando los módulos ensambladores y los acervos para formar un programa completo. En algunos sistemas el cargador simplemente copia el programa ejecutable a las posiciones de memorias apropiadas.








Sus principales funciones son:





 Enlazar código intermedio compilado independientemente en un solo módulo de carga resolviendo las diferencias entre Tokens.





 Incorpora las denominadas rutinas de librerías en caso de solicitarlas el propio programa.





 Su función es reducir procedimientos traducidos por separado y enlazarlos para que se ejecuten como una unidad llamada programa binario ejecutable.





3.-¿tipos de ligadores?




R= EDITORES DE LIGADO. La diferencia fundamental entre un editor de ligado y un cargador ligador es: Primero se ensambla o compila el programa fuente, produciendo un programa objeto (que puede contener varias secciones de control diferentes).








LIGADOR DINAMICO. El ligador dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria.

Cuando se utiliza el ligador dinámico, la asociación de una dirección real y el nombre simbólico de la rutina llamada no se hace hasta que se ejecuta la proposición llamada. LIGADOR DEL SISTEMA VAX. El ligador VAX es un editor de ligado que realiza las mismas funciones básicas alcanzadas con anterioridad. La acción del ligador en la creación de las secciones de imagen está controlada por ensamblador o compilador por medio de una secuencia de mandatos que forman parte del programa objeto

4.-¿Que son ligadores estaticos?

R=Cuando se utilizan subrutinas en un programa, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecución. Para esto, antes de cargar un programa, debe ligarse su código objeto con los códigos objeto (guardados en uno o más archivos) de cada una de las subrutinas invocadas por él, obteniendo así un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos invocados.

En este punto, es posible guardar el resultado del proceso de Liga en un archivo que podrá ser utilizado por un cargador, o el mismo programa ligador puede también realizar la tarea de carga. Esto último evita el tener que guardar el código ejecutable en un archivo, con lo que se ahorra espacio en disco. Este ahorro de espacio en disco se paga con el tiempo gastado al tener que ligar todos los módulos cada vez que se necesite ejecutar el programa.

5.-¿Que son ligadores dinamicos?


R=LIGADOR DINAMICO. El ligador dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. Si las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria.

El ligado dinámico evita la necesidad de cargar la biblioteca completa para cada ejecución. El ligado dinámico puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podría utilizar. El nombre de la subrutina se trataría simplemente como otro elemento de entrada. Para realizar la carga de ligado de una subrutina llamada se puede utilizar varios mecanismos distintos. En el método que se analiza aquí, las rutinas que se carguen dinámicamente deben llamarse por medio de una solicitud de servicio al sistema operativo. Este método también podría considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecución del programa. Cuando se utiliza ligado dinámico, la asociación de una dirección real y el nombre simbólico de la rutina llamada no se hace hasta que se ejecuta la proposición llamada. Esta situación podría presentarse, con un programa que permita al usuario llamar interactivamente a cualquiera de las subrutinas de una gran biblioteca matemática y estadística. El usuario podría suministrar la entrada de datos desde un terminal de tiempo compartido, y los resultados podrían exhibirse en el terminal. En este caso podrían ser necesarias todas las subrutinas de la biblioteca, pero en cualquier sesión de terminal solo se usarían unas cuantas. El ligado dinámico evita la necesidad de cargar la biblioteca completa para cada ejecución. El ligado dinámico puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podría utilizar. El nombre de la subrutina se trataría simplemente como otro elemento de entrada. Para realizar la carga de ligado de una subrutina llamada se puede utilizar varios mecanismos distintos. En el método que se analiza aquí, las rutinas que se carguen dinámicamente deben llamarse por medio de una solicitud de servicio al sistema operativo



6.-¿Que son ligadores de bibliotecas codigos de objeto?

R=Liga de bibliotecas de codigo objeto


Ligador estatico
Cuando se utilizan subrutinas en un programa, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecución. Para esto, antes de cargar un programa, debe ligarse su código objeto con los códigos objeto (guardados en uno o más archivos) de cada una de las subrutinas invocadas por él, obteniendo así un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos invocados. En este punto, es posible guardar el resultado del proceso de liga en un archivo que podrá ser utilizado por un cargador, o el mismo programa ligador puede también realizar la tarea de carga.
Ligadores Dinamicos : Ligado dinámico El ligado dinámico ofrece algunas ventajas sobre los otros tipos de ligado. Proporciona la posibilidad de cargar las rutinas sólo cuando y si se necesitan. SI las subrutinas son grandes o tienen muchas referencias externas, se pueden conseguir ahorros considerables de tiempo y espacio de memoria. De forma similar, supóngase que en cualquier ejecución un programa usa sólo pocas de una gran cantidad de subrutinas posibles, pero el número exacto de rutinas necesarias no puede predecirse hasta que el programa examina su entrada. Esta situación podría presentarse, con un programa que permita al usuario llamar interactivamente a cualquiera de las subrutinas de una gran biblioteca matemática y estadística.

El usuario podría suministrar la entrada de datos desde un terminal de tiempo compartido, y los resultados podrían exhibirse en el terminal. En este caso podrían ser necesarias todas las subrutinas de la biblioteca, pero en cualquier sesión de terminal solo se usarían unas cuantas. El ligado dinámico evita la necesidad de cargar la biblioteca completa para cada ejecución. El ligado dinámico puede incluso hacer innecesario que el programa conozca el conjunto de subrutinas que se podría utilizar.

El nombre de la subrutina se trataría simplemente como otro elemento de entrada. Para realizar la carga de ligado de una subrutina llamada se puede utilizar varios mecanismos distintos. En el método que se analiza aquí, las rutinas que se carguen dinámicamente deben llamarse por medio de una solicitud de servicio al sistema operativo.

Este método también podría considerarse como una solicitud a una parte del cargador que se mantiene en la memoria durante la ejecución del programa.

7.-¿Que son cargadores?




R=En informática, un cargador es la parte de un sistema operativo que es responsable de cargar programas en memoria desde los ejecutables (por ejemplo, archivos ejecutables). El cargador es usualmente una parte del núcleo del sistema operativo y es cargado al iniciar el sistema y permanece en memoria hasta que el sistema es reiniciado o apagado. Algunos sistemas operativos que tienen un núcleo paginable pueden tener el cargador en una parte paginable de la memoria, entonces a veces el cargador hace un intercambio de memoria.




Todos los sistemas operativos que an la carga de programas tienen cargadores. Algunos sistemas operativos empotrados de computadoras altamente especializadas corren un único programa y no existen capacidades de carga de programas, por lo tanto no usan cargadores. Ejemplos de estos sistemas embebidos se encuentran en equipos de audio para automóviles.

En los sistemas Unix, el cargador es el manejador para la llamada del sistema execve().

Algunas computadoras necesitan cargadores relocalizables, los cuales ajustan direcciones de memoria (punteros) en un ejecutable para compensar las variaciones en la cual la memoria disponible de la aplicación empieza. Las computadoras que necesitan de los cargadores relocalizables son aquellos en los cuales los punteros son direcciones absolutas en vez de compensaciones de direcciones base del program


8.-¿Cuales son las funciones de un cargador?

R=Las funciones de un cargador son:

Colocar un programa objeto en la memoria e iniciar su ejecucion

Si tenemos un cargador que no necesita realizar las funciones de ligado y relocalización de programas, su operación es muy simple, pues todas las funciones se realizan en un solo paso. Se revisa el registro de encabezamiento para comprobar se ha presentado el programa correcto para la carga (entrando en la memoria disponible). A medida que se lee cada registro de texto, el código objeto que contiene pasa a la dirección de memoria indicada. Cuando se encuentra el registro de fin, el cargador salta a al dirección especificada para iniciar la ejecución del programa cargado. Un programa objeto contiene instrucciones traducidas y valores de datos del programa fuente, y específica direcciones en memoria donde se cargarán estos elementos.

Las funciones de un cargador son relativamente sencillas y consisten en extraer información de algún medio exterior de la memoria (por ejemplo: CD Discos) y chocarlo en celdas sucesivas de la memoria a partir de una celda pre especificada. El cargador realiza la última etapa del proceso de traducción: cargar el programa en memoria donde puede ser ejecutado.

Una opción típica del cargador permite la selección de fuentes alternativas de entrada. Otros mandatos permiten al usuario eliminar símbolos externos o secciones de control completas.

También es posible cambiar referencias externas dentro del programa que se está cargando, La mayoría de los cargadores permiten al usuario especificar alternativas para búsqueda por medio de una proposición de tipo LIBRARY.


9.-¿Tipos de cargadores?

R=Existen tipos de cargadores como los dinamicos y estaticos el dinamico ofrece algunas dinamicas y ventajas sobre otros tipos de ligado ya sea en un programa.

los estaticos es cuando se utilizan subrutinas en un programa, el codigo ejecutable de cada una de ellas deve encontrarse en memoria al tiempo de la ejecucion.

10.-¿Cuales son los cargadores de carga absoluta y relocalizable?

El proceso de carga absoluta consiste en que con la máquina vacía ó inactiva no hay necesidad de hacer relocalización de programas tan solo se puede especificar la dirección absoluta del programa que se cargue en primer lugar.

11.-¿cuales son los cargadores estaticos y dinamicos?

contiene archivos que no cambian la intervencion del administrador.






RRRlgunos modelos de cargadores de baterías tienen un conmutador de selección CARGA NORgfggggfgfiseruziou o



El cargador de baterías está equipado con dos fusibles de seguridad.





El cargador de baterías está protegido contra sobrecargas mediante un interruptor de línea bimetálico de seguridad.





Al desconectar el enchufe del cargador de baterías de la corriente principal, el interruptor de seguridad se reajusta de forma automática.





Si las pinzas contactan entre sí o si hay una polaridad incorrecta, el circuito será interrumpido por el fusible.





Los fusibles fundidos deben ser reemplazados como se indica en las instrucciones para cambiarlos.elMAL - RÁPIDA. Si el conmutador está en la posición de NORMAL, la carga de la batería se





baterías tienen un conmutador de selección CARGA NORMAL - RÁPIDA. Si el conmutador está en la posición de NORMAL, la carga de la batería se hará con una corriente menor y costará más tiempo. La carga normal es un proceso especial de ahorro de batería.





Si el conmutador está en la posición de CARGA RÁPIDA, se pueden cargar sencillas baterías de arranque en muy poco tiempo, de forma que sea posible arrancar de nuevo el coche.





¡IMPORTANTE! Las baterías completamente descargadas deben ser recargadas con alta capacidad (Ah), siempre con el conmutador en posición CARGA NORMAL y durante media horhará con una corriente menor y costará más tiempo. La carga normal es un proceso especial de ahorro de batería.





Si el conmutador está en la posición de CARGA RÁPIDA, se pueden cargar sencillas baterías de arranque en muy poco tiempo, de forma que sea posible arrancar de nuevo el coche.





¡IMPORTANTE! Las baterías completamente descargadas deben ser recargadas con alta capacidad (Ah), siempre con el conmutador en posición CARGA NORMAL y durante media horR=

martes, 20 de abril de 2010

Instrucciones De Lenguaje En Ensamblador

1.-Instrucciones Aritmeticas
R=Son utilizadas para realizar operaciones lógicas sobre los operandos.
AND, NEG, NOT, OR,TEST ,XOR
Se usan para realizar operaciones aritméticas sobre los operandos.
ADC , ADD , DIV , IDIV , MUL ,IMUL , SBB , SUB

ropósito: Realiza la conjunción de los operandos bit por bit.

Sintaxis:

AND destino, fuente

Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operandos:



Fuente Destino | Destino
--------------------------
1 1 | 1
1 0 | 0
0 1 | 0
0 0 | 0

Propósito: Genera el complemento a 2

Sintaxis:

NEG destino

Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Por ejemplo, si AX guarda el valor de 1234H, entonces:

NEG AX

Nos dejaría almacenado en el registro AX el valor EDCCH.

Instrucción NOT

Propósito: Lleva a cabo la negación bit por bit del operando destino.

Sintaxis:

NOT destino

El resultado se guarda en el mismo operando destino.

Instrucción OR

Propósito: OR inclusivo lógico

Sintaxis:

OR destino, fuente

La instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operandos:



Fuente Destino | Destino
--------------------------
1 1 | 1
1 0 | 1
0 1 | 1
0 0 | 0

Instrucción TEST

Propósito: Comparar logicamente los operandos

Sintaxis:

TEST destino, fuente

Realiza una conjunción, bit por bit, de los operandos, pero a diferencia de AND esta instrucción no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas.

Instrucción XOR

Propósito: OR exclusivo

Sintaxis:

XOR destino, fuente

Su función es efectuar bit por bit la disyunción exclusiva lógica de los dos operandos.



Fuente Destino | Destino
--------------------------
1 1 | 0
0 0 | 1
0 1 | 1
0 0 | 0

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.



.
2.-Instrucciones de comparacion

R=Estas instrucciones permiten la comparación de valores de datos.
Si la comparación es verdadera dará continuidad lógica y ejecutará la instrucción siguiente de la línea

Los parámetros que necesita cada instrucción en el formato general son: Ver imagen en tamaño completo

Expresión: Operandos y definición de la comparación que se desea realizar.

En el formato específico para cada instrucción habría que definir los parámetros
Fuente A: Operando 1.

Fuente B: Operando 2.

Los operandos pueden ser :

ENTEROS: del tipo I, O, S, B,C,R,N,BCD o ASCII.

COMA FLOTANTE: del tipo F

CONSTANTES: Números enteros o en coma flotante

Si se utilizan palabras de los ficheros ASCII o BCD el procesador interpretará los datos como números enteros:

En una misma instrucción de comparación se pueden mezclar números enteros y en coma flotante.

El comportamiento de una instrucción de comparación dentro de una línea de programación escalonada es similar a las de tipo relé.

Estas instrucciones se pueden asociar en paralelo y en serie con cualquiera de las instrucciones de tes.


3.-Instrucciones de salto
R=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 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


4.-Instrucciones para el STACk
R=Stack” significa pila en inglés, pila en el sentido de “apilar cosas”, no de batería eléctrica. Es una zona de la memoria en donde se guardan cosas. Por ejemplo las variables locales de las subrutinas y funciones, los parámetros, algunos resultados intermedios de cálculos complejos, etc. Todo el manejo del stack lo realiza el compilador de forma automática, así que no hace falta preocuparse salvo cuando se acaba el lugar y el programa genera un error (“stack overflow”). Lo más importante de esta estructura es que en cada momento sólo se tiene acceso a la parte superior del stack (no a las cosas que están apiladas debajo).


5.-Que son los macros y para que sirven
Cada uno de los marcos de una página, contiene un documento HTML individual. Por ejemplo, en la imagen inferior puedes ver una página con dos marcos. El marco izquierdo contiene el documento menu.htm y el derecho el documento monos.htm. Para poder visualizar la página de este modo, hemos tenido que abrir en el navegador el documento principal.htm, que en este caso es el contiene los marcos.

Es posible editar los documentos contenidos en los marcos desde la página que contiene el grupo de marcos. Esto facilita el trabajo, ya que es más fácil hacerse una idea de cómo quedará la página al final, cosa que no es posible si se editan individualmente cada uno de los documentos que contiene el marco.

El tabajar con marcos puede resultar una terea algo complicada, sobretodo al principio, por lo que no vamos a profundizar mucho en el tema, y veremos solamente algunos conteptos básicos y ejemplos sencillos.

6.-Que son las interrupciones y aquienes afectan
R=El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o externo, asíncrono respecto del programa, puede interrumpir la ejecución de éste produciendo automáticamente un salto a una subrutina de atención, de manera que pueda atender inmediatamente el evento, y retomar luego la ejecución del programa exactamente en donde estaba en el momento de ser interrumpido.
Este mecanismo es muy útil por ejemplo para el manejo de timers o rutinas que deben repetirse periódicamente (refresco de display, antirrebote para teclado, detección de pulsos externos, recepción de datos, etc.

martes, 23 de marzo de 2010







Lenguaje Ensamblador

1.-¿Que es el lenguaje ensamblador?
R=El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informaticos, y constituye la representacion mas directa del codigo maquina especifico para cada arquitectura de computadoras legible por un programador.

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

R=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.

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

R=Ejemplo;nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, ...El nombre de la instrucción está formada por 2 o 3 letras, los operandos pueden ser registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de la instrucción.Por ejemplo:MOV AL, [1000]Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una dirección de memoria, ésta dirección se escribe entre corchetes, recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una constante dependerá del ensamblador, en el caso del debug (Un programa que sirve para crear y editar aplicaciones que viene con el DOS) se interpretarán como hexadecimales, en los siguientes ejemplos se interpretará que las constantes son números hexadecimales.

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

R=La unidad de manejo de memoria (Lat.) o unidad de gestión de memoria (Esp.) (en inglés: Memory Management Unit o simplemente MMU) 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 lógicas (o virtuales) a direcciones físicas (o reales), 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 lógica, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene la parte de la tabla de páginas usada hace menos tiempo. En esta memoria se mantienen entradas de la tabla de páginas (llamadas PTE por sus siglas en inglés, Page Table Entry), donde se pueden rescatar las direcciones físicas correspondientes a algunas direcciones lógicas, de forma directa.

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

R=El direccionamiento en ensambladores son programas que procesan los enunciados del programa origen en lenguaje ensamblador y los traducen en archivos en lenguaje máquina que son ejecutados por un microprocesador o un microcontrolador.
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.

El campo de operación de una instrucción especifica la operación que se va a ejecutar. Esta operación debe realizarse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. La manera en que eligen los operandos durante la ejecución del programa depende del modo de direccionamiento de la instrucción. El modo de direccionamiento especifica una regla para interpretar o modificar el campo de dirección de la instrucción antes de que se haga la referencia real al operando.
6.-¿Cuales son los tipos de direccionamiento?
R=1.-Direccionamiento inmediato.

2.-Direccionamiento directo.

3.-Direccionamiento relativo a registro.

4.-Direccionamiento indexado.

5.-Direccionamiento indirecto.

6.-Combinaciones de modos basicos de direccionamiento.

7.-Direccionamiento paginado y direccionamiento segmentado.

7.-¿Que es el formato de un programa?




Etiqueta, variable o constante: No siempre es definida, si se define es necesario utilizar separadores para diferenciarla de las otras partes, usualmente espacios, o algún símbolo especial.

Directiva o instrucción: es el nombre con el que se conoce a la instrucción que queremos que se ejecute.

Operando(s): la mayoría de las instrucciones en ensamblador trabajan con dos operandos, aunque hay instrucciones que funcionan solo con uno. El primero normalmente es el operando destino, que es el depósito del resultado de alguna operación; y el segundo es el operando fuente, que lleva el dato que será procesado. Los operandos se separan uno del otro por medio de una coma ",".

Comentario: como su nombre lo indica es tan solo un escrito informativo, usado principalmente para explicar que está haciendo el programa en determinada linea; se separa de las otras partes por medio de un punto y coma ";". Esta parte no es necesaria en el programa, pero nos ayuda a depurar el programa en caso de errores o modificaciones.

martes, 2 de marzo de 2010






1.-¿En que se basa el modelo de jon von newman?
R=Cada computadora se basa en el modelo de von newman.el modelo examina el interior de la computadora (la caja negra) y define como se realiza el prosesamiento.
Tambien define una computadora con cuatro subsistemas: memoria,unidad logica aritmetica, unidad de control, y entrada/salida.
La memoria:es el area de almacenamiento, donde los programas y los datos se almacenan durante el procesamiento.
La unidad aritmetica logica:(ALU) es donde el calculo aritmetico y las operaciones logicas toman lugar.
La unidad de control:determina las operaciones de la memoria de la ALU y del subsistema de entrada/salida.
La entrada/salida:envia el resultado de procesamiento al exterior.

2.-¿Cuales son los lenguajes formales y sus caracteristicas principales?
R=Los lenguajes formales son lenguaje cuyo simbolos primitivos y reglas para unir esos simbolos formalmente estan especificados.Los lenguajes formales son construcciones artificiales humanas, que se usan en matematicas y en otras diciplinas formales,incluyendo lenguajes de programacion.

3.-¿Que son los editores y para que sirven?
R=Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos unicamente por textos sin formato conocidos comunmente como archivos de texto o texto plano son incluidos, en el sistema operativo o en algun paquete de software.
4.-¿Que son editores de caracter?
R=Es el uso de logos u otros items para ser usados en cualquier documento se puede volver engorroso con los metodos tradicionales.
5.-¿Que son los editores de linea?
R=Se usa para crear o editar la tabla de definicion de campos y la tabla de seleccion de campos estas tablas estan formadas por una o mas lineas cada una de las cuales representa un elemento descriptivo aunque cada tabla tiene una estructura propia de sus elementos los comandos del editor de lineas en ambos casos es identico.

6.-¿Que son los editores de pantalla?
R=un editor de pantalla completa es aquel editor que nos permite ver el documento que estamos escriviendo a medida que lo hacemos en contraposicion a un editor de linea que solo nos permite ver la linea que estamos editando.




7.-¿Que son los lenguajes de programacion?
R=Un lenguaje de programación" es un lenguaje diseñado para describir el conjunto de acciones consecutivas que un equipo debe ejecutar.
Los lenguajes de programación generalmente se dividen en dos grupos principales en base al procesamiento de sus comandos:
lenguajes imperativos;
lenguajes funcionales.
Un lenguaje imperativo programa mediante una serie de comandos, agrupados en bloques y compuestos de órdenes condicionales que permiten al programa retornar a un bloque de comandos si se cumple la condición.
Un lenguaje de programación funcional(a menudo llamado lenguaje procedimental) es un lenguaje que crea programas mediante funciones, devuelve un nuevo estado de resultado y recibe como entrada el resultado de otras funciones.
8.-¿Lenguajes de alto nivel?
R=El lenguaje de alto nivel (high-level language) es aquel que se aproxima más al lenguaje natural humano que al lenguaje binario de las computadoras, el que se conoce como lenguaje de bajo nivel.
Su función principal radica en que a partir de su desarrollo, existe la posibilidad de que se pueda utilizar el mismo programa en distintas máquinas, es decir que es independiente de un hardware determinado. La única condición es que la PC tenga un programa conocido como traductor o compilador, que lo traduce al lenguaje específico de cada máquina.
9.-¿Lenguajes de medio nivel o intermedio?
R= En computación, un lenguaje intermedio es el lenguaje de una máquina abstracta diseñada para ayudar en el análisis de los programas de computadora. Una variante del significado de "lenguaje intermedio" se da en esos lenguajes de alto nivel que no soportan o no generan un archivo objeto o código máquina, pero sí generan un lenguaje intermedio. Luego ese lenguaje intermedio se transfiere a un compilador que termina de realizar el archivo objeto o el código máquina.
10.-¿Lenguajes de alto nivel?
R=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".
11.-¿Tipos de compiladores e interpretes?
R=Son documentos que recogen, contienen y difunden información sonora perceptible a través del sentido del oído. Para el acceso a su contenido informativo es necesario el uso de aparatos lectores específicos.
Tipo de información
*Contenidos sonoros de palabras (poema) y “especiales” (puerta abriendose)
* Contenidos sonoros de música clásica (tit. uniforme) y no clásica


12.-¿Tipo de compiladores?
R= 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.
13.-¿Cual es la diferencia entre compiladores e interpretes?
R=Puede resultarte de ayuda establecer una analogía entre compiladores e intŕrpretes de lenguajes de programación y traductores e interprétes de idiomas.Un compilador actúa como un traductor que recibe un libro escrito en un idioma determinado (lenguaje de alto nivel) y escribe un nuevo libro que, con mayor fidelidad posible, contiene una traducción de texto original a otro idioma (código de maquina). El proceso de traducción (compilación) tiene lugar una sola vez y podemos leer el libro (ejecutar el programa) en el idioma destino (código maquina) cuantas veces queramos.