jueves, 29 de marzo de 2012

Ensamblador

Tarea Intro

Ensamblador a Utilizar


GAS (GNU Assembler).-  es el ensamblador del proyecto GNUes usado para compilar Linux y otros sistemas operativos como el sistema operativo GNU.


Explicación del código que genera y utiliza el GNU Assembler.


Los registros que comunmente son utilizados en GNU Assembler, son los siguiente:


Como se muestra en la imagen, van los nombres generales que tienen los registros así como sus derivaciones dependiendo de la memoria que requiera.


Una vez definido lo anterior continuare con explicar las instrucciones que maneja el ensamblador y el significado de cada uno.


Indicadores
Descripción
.LC0, .LC1, .LC2Etiquetas creadas automáticamente por gcc, que comunmente almecenan los .string, los .text y los .globl main
.stringSe encarga de almacenar los caracteres dados en el código, por ejemplo lo que se escribe en el prinf de c. Todo los caracteres deben de estar encerrados entre comillas dobles (" ").


.text
Se encarga de definir la sección actual como ".text"
.globl main                               Declara las funciones requeridas como globales y por ende las etiquetas que vallan dentro de el. Cada símbolo es definido externamente o definido en el archivo de entrada y accesible en otros archivos.
.typeGuarda e indica los nombres de las funciones que existen en el código.


Algunas de las instrucciones de Assembler son (considere primeramente las que utilizare en mi código e incluí unas cuantas mas)


Instrucción
Descripción
Descripción mas Detallada
PUSH"Empuja" hacia la pila.Decrementa el puntero de la pila y después almacena el operando fuente en la cima de la pila.
MOVMueve información de una cadena a otra.Copia el segundo operando declarada (fuente) hacia el primer operando declarado (destino). Nota: Ambos operandos deben de ser del mismo tamaño.
ANDOperación lógica and.Se encarga de realizar la operación lógica AND con los dos operandos seleccionados, coloca el resultado en la ubicación del primer operando que se proporciona.
SUBReserva de Memoria.Reserva una cantidad de Memoria para un registro, al principio va la cantidad de memoria a reservar y después el registro de destino.


Sin embargo dos operandos de memoria NO pueden ser usados en una instrucción.
CALLLlama un procedimiento.Manda a llamar instrucciones o acciones que no están incluidas por default en el GNU Assembler.
LEA
(Load Effective Address)
Coloca la dirección especificada en el segundo operando en el registro del primeroCalcula la dirección efectiva del segundo operando (fuente) y la almacena en el primer operando (destino). El operando fuente es una dirección de memoria especificada con uno de los procesadores de modos de direccionamiento.
FLDS
(Floating-point LoaD to System register)
Transfiere al registro del sistemaEsta instrucción carga el contenido de un registro de punto flotante al registro del sistema.
FMULPMultiplicaMultiplica el primer parámetro por el segundo y almacena el resultado en el primero, coloca el registro en la pila.
FSTPLExtrae valoresEs usado para extraer  algún valor fuera de la pila.
LEAVEProcedimiento de salida de alto nivelLibera el espacio de pila reservado para el cuadro de pila.
JUMPSalto sin restriccionesNos permite pasar de etiqueta y etiqueta sin necesidad de que se cumpla alguna condición en especifico
je jne jz jg jge jl jleSaltos CondicionalesSe encargan de cambiar de una etiqueta a otra, pero dependiendo de la condición a la que obligada
RETRegresar del procedimiento.Transfiere el control del programa a una dirección de regreso localizada en la cima de la pila. La dirección es comúnmente puesta en la pila por medio de una instrucción CALL, y la instrucción "return" es hecha a la instucción que le sigue a la instrucción CALL.


El nombre del identificador depende de la cantidad de memoria con la que este trabajando.




Una vez definido este comenzare a mostrar mi programa realizado.


En primera tenemos el código hecho en Lenguaje C, el programa se encarga de calcular el factorial de un número.




Después sera la hora de compilarlo para ver el resultado que nos servirá como comparación.




Una vez visto el funcionamiento seguirá el generar el ensamblador del código.




Las lineas que eliminare para optimizar el código están comentadas para que observen claramente las lineas.




Por ultimo compilaremos el ensamblador. Y lo corremos




Nota: A la hora de compilar puedes incluir la etiqueta -o para que el nombre que el nombre que tome el ejecutable.


Bibliografías:


http://www.cs.virginia.edu/~cs216/Fall2005/notes/x86-doc.pdf
http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax
http://es.wikipedia.org/wiki/GNU_Assembler

domingo, 11 de marzo de 2012

Simuladores Y Emuladores

¿Que es un Simulador?

Un simulador es una máquina que reproduce el comportamiento de un sistema en ciertas condiciones, lo que permite que la persona que esta o quisiera aprender manejar dicho sistema pueda entrenarse.

 
http://planetagadget.com/wp-content/uploads/2009/01/driving-simulator-1.jpg

Los simuladores nos reproducen sensaciones que en realidad no están sucediendo, con el uso de esto evitamos el dañar a equipos o a personas o alguna otra cosa.

Un simulador pretende reproducir tanto la velocidad, aceleración y percepción de un entorno en especial, así como el comportamiento de los equipos de la máquina que se pretende simular.

Para realizar el entorno del simulador se recurre normalmente al uso de maquinaria controlada por el mismo simulador a fin de lograr el mayor realismo posible o deseado. 

El uso de la maquinaria se encarga de reproducir los sonidos, movimientos y todo lo relacionado a las maquinas.

Pero, para simular el entorno en el cual se esta basando la simulación, por ejemplo un simulador de vuelo, se hace uso de proyecciones tomadas de lo que se pretende simular.

Como se menciona anteriormente, el conjunto de todo debe de estar lo mejor posible para lograr el mayor realismo.

El uso que se le da a los simuladores es en el ámbito profesional o como instrumento de ocio y entretenimiento.

El uso en el ámbito profesional son casi indispensables ya que su profesión podría poner en riesgo la vida de personas y/o equipo.


http://avion.microsiervos.com/images/SimuladorVirtualAviation.jpg

Algunos ejemplos de profesiones que hacen uso de las simulaciones para sus profesionistas son los Aviadores, Gente que aprende a Conducir, Doctores, etc.

http://i.bssl.es/highmotor/2007/11/simulador-toyota1.jpg

El otro uso que mencione es: como instrumento de ocio y entretenimiento.

En esta área, el uso mas común que se la da a los simuladores es el permitir conducir, un auto, realizar cosas deportivas o hasta hacer las cosas que haría un profesionista pero abocadas a un videojuego.

http://www.viajespasion.com/wp-content/uploads/2009/01/simulador-ski.jpg
http://4.bp.blogspot.com/_ezsnYVlX8lg/SehWMDIZLqI/AAAAAAAAAXg/PYJWvzf3wZs/s400/simulador_de_futbol.jpg

¿Qué es un Emulador?

Un emulador es un programa que nos permite el ejecutar programas o videojuegos en una plataforma (arquitectura de hardware o un sistema operativo) diferente a aquella para la cual fueron programados originalmente.

Los usos que comúnmente se le dan normalmente, son:
  • Emular Videojuegos (El mas común).
  • Emular Sistemas Operativos.
  • Emular simuladores de aplicaciones móviles, etc.
El uso en videojuegos proveniente comúnmente de consolas lo realizan con el fin de jugar con juegos descontinuados o para no comprar uno especifico para cierta consola.

 
http://avecomputointe.blogspot.com/

El uso en Sistemas Operativos es para las computadoras en la cual se requiere el uso de mas de un sistema operativo sin necesidad de andar cambiando, otro uso es para proyectos escolares en los cuales requieres demostrar como instalar cierto sistema sin necesidad de mover los ya instalados.

El uso para aplicaciones de móviles o algún otro dispositivo consiste en mostrar como funcionara un aplicación que se este creando sin necesidad de manipular el móvil en el cual se desea instalar dicha aplicación.

Este uso seria como algo parecido como los simuladores, ya que evitas el lograr dañar el aparato y/o observas formas en la cual puedes mejorar la aplicación sin necesidad de instalarla en el dispositivo.

 
http://www.elandroidelibre.com/wp-content/uploads/2011/10/Pantalla-principal-emulador-Android1.jpg

A diferencia de un simulador, que sólo trata de reproducir el comportamiento del programa, un emulador trata de reproducir de forma precisa lo que se desea (videojuego, aplicación y sistema operativo) de manera que este funcione como si estuviese siendo usado en el aparato original.

Referencias

http://es.wikipedia.org/wiki/Simulador
http://definicion.de/simulador/
http://es.wikipedia.org/wiki/Emulador?PHPSESSID=0893719d7174c36d9bc1ebbede00933e