jueves, 27 de mayo de 2010

compiladores

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


Un compilador es un programa que lee un codigo escrito en un lenguaje fuente y lo traduce a un codigo equivalente en otro lenguaje, el lenguaje objeto [Aho et al. 1990]. Como parte importante de este proceso de traducción, el compilador informa al usuario de la presencia de errores en el codigo fuente.
En la compilación hay dos partes análisis y síntesis . Durante el análisis se determinan las operaciones que implica el codigo fuente y se registran en una estructura jerárquica



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

*Fase de analisis

*Fase de sintesis

3.-¿En qué consiste la fase de analisis?

La fase de análisis es la etapa del proceso de desarrollo de sistemas de información que sigue a la fase de estrategia, esta fase busca obtener la mayor claridad posible con respecto a los requerimientos y necesidades del usuario o usuarios del sistema a desarrollar. La realización de esta fase sirve para obtener un documento de requisitos, el Modelo E-R de análisis, el Modelo de funciones y procesos de análisis, la matriz cruzada de Entidades vs. Funciones y la matriz cruzada de Entidades vs. Funciones vs. Requisitos.
Durante esta fase del proceso se debe tener especial cuidado, pues de ella depende la calidad y aceptación de los resultados finales. Tenga en cuenta que "un análisis bien realizado y muy completo, representa un 70% de la solución ya obtenida"

4.-¿Cuál es el analisis lexicografico ?

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.

5.-¿Cuál es el analisis sintactico ?

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:
Cualquier identificador es una expresión.
Cualquier número es una expresión.
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.

6.-¿En qué consiste el analisis semantico ?

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.

7.-¿En qué consiste la fase de sintesis ?

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 generacion de codigo 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.
La representación intermedia puede tener diversas formas. Existe una forma intermedia llamada "código de tres direcciones" que es como el lenguaje ensamblador de una máquina en la que cada posición de memoria puede actuar como un registro. El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos. Esta representación intermedia tiene varias propiedades:

Primera.- Cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones.

Segunda.- El traductor debe generar un nombre temporal para guardar los valores calculados por cada instrucción.

Tercera.- Algunas instrucciones de "tres direcciones" tienen menos de tres operandos, por ejemplo, la asignación.

9.-¿Qué es la generacion y optimizacion de codigo objeto ?

La fase de optimización de código consiste en mejorar el código intermedio, de modo que resulte un código máquina más rápido de ejecutar. Esta fase de la etapa de síntesis es posible sobre todo si el traductor es un compilador (difícilmente un interprete puede optimizar el código objeto). Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos compiladores. En los que hacen mucha optimización, llamados "compiladores optimizadores", una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación.

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.

martes, 25 de mayo de 2010

Instrucciones aritmeticas unidad 2

1¿instrucciones aritméticas?

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

Instrucción AND

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

El resultado de la operación se almacena en el operando destino.

Instrucción NEG

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

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.

Instrucción IDIV

Propósito: División con signo

Sintaxis:

IDIV fuente

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

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.

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.

Instrucción SBB

Propósito: Substracción con acarreo

Sintaxis:

SBB destino, fuente

Esta instrucción resta los operandos y resta uno al resultado.

Instrucción SUB

Propósito: Substracción

Sintaxis:

SUB destino, fuente Resta el operando fuente del destino.

2¿instrucciones de comparación?

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.

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.

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


SALTOS CONDICIONALES

Se basan completamente en los flags.

BUCLES

Equivalente al FOR-TO-NEXT en ensamblador, se trata de la

orden LOOP. Lo que hace ‚esta orden es comparar CX con cero; si es igual,

sigue adelante, si no lo es, vuelve al lugar que se indica en su operando

decrementando CX en uno. Por lo tanto, CX ser un contador de las veces

que ha de repetirse el bucle.

3¿Instrucciones de salto?

SALTO SIN CONDICIONES:

Con ellas se puede cambiar el control a cualquier punto del programa.

Seria como el "GOTO" del BASIC, simplemente transferir el control a otro punto del programa.

JMP ( de Jump, salto )

Incrementar o decrementar IP para llegar a la zona del programa a la que queremos transferir el control ( IP es el Offset que indica la zona de memoria que contiene la siguiente instrucción a ejecutar, y CS el segmento ).

JMP 100h

Salta a la dirección 100h. Un archivo .COM comienza normalmente en esa dirección, así que quiz lo ve is en algunos virus.

JMP 542Ah:100h

Salta a la dirección 100h pero del segmento 542Ah. ¨ Os acordais aún de los Segments y Offsets ?. Se trata de un salto lejano.

JMP SHORT 223Ah

Salto corto a la dirección 223Ah. Tranquilidad, ahora explico lo de salto corto, lejano.

SALTOS CONDICIONALES:

JP, JPE: Jump if Parity o Jump if Parity Even. Salta si el flag de

paridad est a uno.

JNP, JPO: Jump if Not Parity, Jump if Parity Odd. Salta si el flag de

paridad est a cero.

JL, JNGE: Jump if Less, Jump if Not Greater of Equal. Salta si en el

resultado de la comparación, el primer número es inferior al segundo, pero

con números con signo.

JGE, JNL: Jump if Greater or Equal, Jump if Not Less. Salta si en el

resultado de la comparación, el primer número es mayor o igual que el

segundo, pero con números con signo.

XOR AX,AX

XOR BX,BX ; AX y BX valen ahora cero.

Espero que con ‚esto haya aclarado un poco la utilidad de los saltos.

Evidentemente, ahora al escribir sabemos cuando uno es menor o mayor, pero

a veces mediante interrupciones sacaremos valores que no conoceremos al ir

a programar, o quiz lo hagamos de la memoria, y queremos comprobar si

son iguales, etc.


4¿Instrucciones para el stack?

“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. Todo el manejo del stack lo realiza el compilador de forma automática.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).

La pila es una zona de la memoria sobre la que se pueden escribir y leer datos de forma convencional. Esta zona tiene una posición especial que se denomina “la cima de la pila”. El procesador contiene dos instrucciones de su lenguaje máquina para realizar las operaciones de “apilar” y “des apilar” datos de la pila. Los datos que se pueden apilar y des apilar, en el caso del Intel Pentium son siempre de tamaño 4 bytes.


5¿Qué son los macros y para que sirven?

Un macro ensamblador es un ensamblador modular, descendiente de los ensambladores básicos. Fueron muy populares en los años 1950 y años 1960, antes de la generalización de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de Directivas para definir y ejecutar macro instrucciones (o simplemente, Macros). Cuando ejecutamos a una “macro”, ésta se expande al cuerpo que hayamos definido.

Macro, del griego μακρο significa “grande”.

Sirven para proporcionar una serie de directivas para ejecutar y definir las intrucciones del macro.


6¿Qué son las interrupciones y a quienes afectan?

Interrupciones son un “mecanismo” por medio del cual hacemos que la CPU deje la tarea en la que estaba para que se vaya a ocupar de otra cosa distinta, es decir, es una forma de llamar la atención de la CPU de tal forma que cada dispositivo cuando necesita ser atendido por la CPU, emite una interrupción o señal haciendo que la CPU vaya a atenderla de inmediato. Esto es importantísimo ya que de no existir interrupciones, la CPU debería de ir preguntando, cada cierto tiempo, a los dispositivos para ver si necesitan de su intervención.


martes, 18 de mayo de 2010

Ligadores y cargadores

1. ¿Que son los ligadores?
son programas que unen todos los programas para asi obtener un ejecutable.









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

*Enlazar código intermedio compiladoen un solo módulo de carga resolviendo las diferencias entre Tokens.

*Incorpora las 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. ¿Cuales son los tipos de ligadores?

EDITORES DE LIGADO
LIGADOR DINAMICO
EDITOR DE LIGADO DEL SISTEMA /370
LIGADOR ESTÁTICO


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

Cuando se utilizan subrutinas en un programa, el código ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecuciónobteniendo así un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos invocados.

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

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.



6. ligadores de biblioteca de códigos de objetos

LIGADORES ESTÁTICOS Y DINÁMICOS

7. ¿Que es un cargador?

Un cargador es un programa que coloca en la memoria para su ejecución, el programa guardado en algún dispositivo de almacenamiento secundario.
obteniendo así un programa ejecutable que contiene tanto el código del módulo invocador como el código de los módulos invocados


8. ¿Cuales son las funciones de un cargador?

COLOCA UN PROGRAMA OBJETO EN LA MEMORIA Y RELIZA SU EJECUCION

9. Tipos de cargadores

* CARGADORES INICIALES
*CARGADORES ABSOLUTOS
* CARGADORES CON REUBICACION
*Cargadores ligadores
*CARGADORES BOOTSTRAP
*CARGADORES ABSOLUTOS
*CARGADORES RELOCATABLES


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

CARGA ABSOLUTA.-ES UN PROGRAMA QUE CARGA CADA INSTRUCCION EN UNA POSICION FIJA POR LO CUAL CADA INSTRUCCION TIENE UNA DIRECCION ABSOLUTA.

CARGA RELOCALIZABLE.-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. ¿Cuales son los cargadores estáticos y dinámicos?

ESTATICO.-ES AQUEL CARGADOR QUE REALIZA SU FUNCION PERO SIN SUFRIR NINGUN MOVIMIENTO

DINAMICO.-ES LA OPSICION DEL CARGADOR ESTÁTICO ESTE SI SUFRE MOVIMIENTOS EM MEMORIA.


12. ¿Que entiendes por paso de control al sistema operativo?

YA UNA VEZ CARGADO EL PROGRAMA QUE SE VA AEJECUTAR SE PSA AL SISTEMA OPERATIVO PARA QUE ESTE REALIZE LAS OPERACIONES SOBRE EL.

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.