Materias

Mostrando entradas con la etiqueta Lenguaje de Interfaz. Mostrar todas las entradas
Mostrando entradas con la etiqueta Lenguaje de Interfaz. Mostrar todas las entradas

martes, 6 de diciembre de 2016

Programas 26, 27 y 28

Equipo:

  • Jose Angel Ariza Salazar
  • Mauricio Sanchez Mora
  • Abigail Jaramillo Silva
  • Eduardo Rodriguez  Rosas

PROGRAMAS <

jueves, 13 de octubre de 2016

Programas Assambler

Mnemonicos

Un lenguaje en mnemónico o lista de instrucciones consiste en un conjunto de códigos simbólicos, cada uno de los cuales corresponde a una instrucción.

Cada fabricante utiliza sus propios códigos, y una nomenclatura distinta para nombrar las variables del sistema.

El lenguaje en mnemónico es similar al lenguaje ensamblador del micro.

MOV (transferencia)
Sintaxis: MOV dest, origen.
Transfiere datos de longitud byte o palabra del operando origen al operando destino. Pueden ser operando origen y operando destino cualquier registro o posición de memoria direccionada de las formas ya vistas, con la única condición de que origen y destino tengan la misma dimensión.

LEA (carga dirección efectiva)
Sintaxis: LEA destino, origen
Transfiere el desplazamiento del operando fuente al operando destino. Otras instrucciones pueden a continuación utilizar el registro como desplazamiento para acceder a los datos que constituyen el objetivo.

POP (extraer de la pila)
Sintaxis: POP destino
Transfiere el elemento palabra que se encuentra en lo alto de la pila (apuntado por SP) al operando destino que a de ser tipo palabra, e incrementa en dos el registro SP.

PUSH (introduce en la pila)
Sintaxis: PUSH origen
Decrementa el puntero de pila (SP) en 2 y luego transfiere la palabra especificada en el operando origen a la cima de la pila.

CALL (llamada a subrutina)
Sintaxis: CALL destino
Transfiere el control del programa a un procedimiento, salvando previamente en la pila la dirección de la instrucción siguiente, para poder volver a ella una vez ejecutado el procedimiento.

JMP (salto) 
Sintaxis: JMP dirección o JMP SHORT dirección
Transfiere el control incondicionalmente a la dirección indicada en el operando.

RET / RETF (retorno de subrutina)
Sintaxis: RET [valor] o RETF [valor]
Retorna de un procedimiento extrayendo de la pila la dirección de la siguiente dirección. Se extraerá el registro de segmento y el desplazamiento en un procedimiento de tipo FAR (dos palabras) y solo el desplazamiento en un procedimiento NEAR (una palabra). si esta instrucción es colocada dentro de un bloque PROC-ENDP (como se verá en el siguiente capítulo) el ensamblador sabe el tipo de retorno que debe hacer, según el procedimiento sea NEAR o FAR.

INT (interrupción)
Sintaxis: INT n (0 <= n <= 255)
Inicializa un procedimiento de interrupción de un tipo indicado en la instrucción.

ADD (suma)
Sintaxis: ADD destino, origen
Suma los operandos origen y destino almacenando el resultado en el operando destino. Se activa el acarreo si se desborda el registro destino durante la suma.

SUB (resta) 
Sintaxis: SUB destino, origen
Resta el operando destino al operando origen, colocando el resultado en el operando destino. Los operandos pueden tener o no signo, siendo necesario que sean del mismo tipo, byte o palabra.

MUL (multiplicación sin signo)
Sintaxis: MUL origen  (origen no puede ser operando inmediato)
Multiplica el contenido sin signo del acumulador por el operando origen.

DIV (división sin signo)
Sintaxis: DIV origen  (origen no puede ser operando inmediato)
Divide, sin considerar el signo, un número contenido en el acumulador y su extensión (AH, AL si el operando es de tipo byte o DX, AX si el operando es palabra) entre el operando fuente.





Microprocesadores Intel 8080 y 8086 (Resumen)

Intel 8080


·         Fue el cerebro de la primera computadora personal: La Altair.
·         Es considerado el primer Microprocesador de propósito general.
·         El Sistema Operativo CPM/80 de Digital Research fue escrito para este procesador.
·         Sus características son:
o   Bus de datos de 8 bits
o   Alimentación +12V, +5V y -5V
o   Frecuencia máxima de clock: 2 MHz
o   Espacio de direccionamiento: 64 Kbytes
o   Contiene alrededor de 6,000 transistores NMOS de 6 Micrones.
Intel 8086


·         Es el primer procesador de 16 bits.
·         Se presentó en Junio de 1978.
·         Un año después el 8088 aprecio con la misma arquitectura interna pero con un bus externo de 8 bits por compatibilidad con el hardware legacy.


miércoles, 12 de octubre de 2016

Versiones de Lenguaje Ensamblador

Cruzados:

Permiten el soporte de medios físicos como pantallas, impresoras, teclado, etc. y la programación que ofrecen maquinas potentes que luego serán ejecutados en sistemas especializados.

Residentes:

Permanecen en la memoria de la computadora, y cargan para su ejecución al programa objeto producido. Es el indicado para el desarrollo de pequeños sistemas de control.

Macroensambladores:

Permiten el uso de macroinstrucciones, son programas grandes que no permanecen en memoria una vez que se a generado el código objeto, normalmente son programas complejos y residentes.

Micro Ensambladores:

Indica al interprete las instrucciones de cómo debe actuar la CPU.
Ensambladores de una fase leen una línea de programa fuente y la traducen directamente para producir una instrucción en lenguaje máquina, estos ensambladores son sencillos, baratos y ocupan poco espacio.

Ensambladores De Dos Fases:

Se llaman así por que realizan la traducción en dos etapas, en la primera fase revisan el código fuente y lo construyen en una tabla de símbolos, en la segunda fase vuelven a leer el programa fuente y pueden traducirlo por completo. Estos ensambladores son los más utilizados en la actualidad.



IDE´S de Lenguaje Ensamblador

Netwide Assambler (NASM)





El Netwide Assembler o NASM, es un ensamblador libre para la plataforma Intel x86. Puede ser usado para escribir programas tanto de 16 bits como de 32 bits (IA-32). En el NASM, si se usan las bibliotecas correctas, los programas de 32 bits se pueden escribir de una manera tal para que sean portables entre cualquier sistema operativo x86 de 32 bits. El paquete también incluye un desensamblador, el NDISASM.

El NASM fue escrito originalmente por Simon Tatham con ayuda de Julian Hall, y actualmente es desarrollado por un pequeño equipo en SourceForge que le hace mantenimiento. Fue lanzado originalmente bajo su propia licencia, pero más adelante fue cambiada por la licencia GNU Lesser General Public License, seguido de un número de problemas políticos causado por la selección de la licencia. La próxima versión del NASM, la 2.00, actualmente está siendo desarrollada bajo la bifurcación 0.99, e incluirá soporte para el x86- 64 (x64/AMD64/Intel 64), junto con la respectiva salida de archivo objeto de 64 bits. Esta versión de desarrollo puede ser encontrada en el NASM git repository.

Nasm-IDE: Editor, compilador y enlazador, es compatible solo con nasm y Windows DOS.

Net Wide Assembler, es un ensamblador bajo licencia BSD para plataformas Intel x86, permite escribir programas en 16, 32, 64 bits. Es compatible para múltiples plataformas, entre ellas DOS, Windows y Linux.

NASM no se acompaña de un enlazador propio, aunque puede utilizarse cualquiera de distribución libre como es ALINK o bien, en el caso de Linux, usar el propio del sistema LINK.

Microsoft Macro Assembler (MASM)




Es un ensamblador para la familia x86 de microprocesadores. Fue producido originalmente por Microsoft para el trabajo de desarrollo en su sistema operativo MS-DOS, y fue durante cierto tiempo el ensamblador más popular disponible para ese sistema operativo. El MASM soportó una amplia variedad de facilidades  para macros y programación estructurada, incluyendo construcciones de alto nivel para bucles, llamadas a procedimientos y alternación (por lo tanto, MASM es un ejemplo de un ensamblador de alto nivel). Versiones posteriores agregaron la capacidad de producir programas para los sistemas operativos Windows. MASM es una de las pocas herramientas de desarrollo de Microsoft para las cuales no había versiones separadas de 16 bits y 32 bits. FLAT Assembler (FASM).

SASM (SimpleASM) - sencillo IDE multiplataforma de código abierto para NASM, MASM, GAS, lenguajes ensamblador MASM.

SASM soporta 4 trabajar con montadores - NASM, MASM, gas y FASM en 2 modos -x64 y x86. Usted puede elegir el modo de configuración de la pestaña "Build". 

También allí se puede cambiar las opciones de ensamblador y enlazador y elegir programas para el montaje y la vinculación.

Flat Assembler (FASM)




Es un ensamblador libre, multi-paso, con el estilo de la sintaxis de Intel que soporta las arquitecturas IA-32 yx86- 64. El proyecto fue iniciado en 1999 por Tomasz Grysztar, que en aquella época era un estudiante no graduado de matemáticas enPolonia. El FASM está escrito en lenguaje ensamblador, viene con el código fuente completo, y fue capaz de ensamblarse a sí mismo (bootstrapping) desde la versión 0.90 del 4 de mayo de 1999. El primer lanzamiento público fue anunciado la 15 de marzo de2000. Es notable por su velocidad rápida, optimizaciones de tamaño, portabilidad, poderosas capacidades de macro, y la comunidad delforo en línea. Sin embargo, casi no usa opciones en la línea de comandos. Hay disponibles archivos binarios y de código fuente paraLinux, Windows (incluyendo un IDE de desarrollo), DOS, OpenBSD, MenuetOS, OctaOS, y DexOS. FASM contiene vínculos (bindings) para la GUI de Windows y OpenGL. Todas las versiones de FASM pueden generar los siguientes archivos objeto: binarios planos (flat binary), ELF o COFF (clásico o de MS), como también executables en formatoMZ, ELF o PE. Existe  un traslado del ensamblador a la arquitectura ARM, llamado FASMARM. La última versión disponible es la 1.70.03, lanzada el 29 junio de 2012.


lunes, 29 de agosto de 2016

Lenguaje de Alto, Medio y Bajo Nivel

Lenguaje de Alto Nivel

Son tipos de lenguajes de programación que permite al programador escribir programas que son más o menos independientes de un tipo particular de computadora. Estos lenguajes son considerados de alto nivel, porque son más parecidos al lenguaje natural humano y más lejanos al lenguaje de las maquinas, la principal ventaja de los lenguajes de alto nivel sobre los de bajo nivel es que son más fáciles de leer, escribir y mantener por los humanos. Al final los programas escritos en alto nivel deben ser traducidos en un lenguaje maquina especifico empleando un compilador o un intérprete. De esta manera pueden ser ejecutados por una maquina especifica.

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 más 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.

Lenguaje de Bajo Nivel

Un lenguaje de programación de características bajo nivel es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de las computadoras que lo soportan. El uso de la palabra bajo en su denominación no implica que el lenguaje sea menos potente que un lenguaje de alto nivel, sino que se refiere a la reducida abstracción entre el lenguaje y el hardware. Por ejemplo, se utiliza este tipo de lenguajes para programar tareas críticas de los sistemas operativos, de aplicaciones en tiempo real o controladores de dispositivos.


Código Fuente

El código fuente de un programa informático (o software) es un conjunto de líneas de texto con los pasos que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el código fuente de un programa está escrito por completo su funcionamiento.




El código fuente de un programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje o código binario; así será más fácil para la máquina interpretarlo (lenguaje máquina o código objeto que sí pueda ser ejecutado por el hardware de la computadora). Para esta traducción se usan los llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.


Programa Fuente

Programa fuente es una noción que se emplea como sinónimo de código fuente. Se trata de las instrucciones que un programa informático transmite a una computadora para que pueda ejecutarse. Dichas instrucciones son líneas de texto escritas en un lenguaje de programación (una estructura capaz de impartir instrucciones informáticas a partir de una determinada base semántica y sintáctica).


Puede decirse que, en el programa fuente, un software detalla la totalidad de su funcionamiento. Un programador es quien desarrolla dichas instrucciones, respetando los principios del lenguaje de programación elegido. El sistema en cuestión, al acceder al programa fuente, interpreta las instrucciones y las pone en marcha.

Compilador

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 un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.




Fases del compilador

Un compilador típicamente opera en fases, cada una lleva a cabo una tarea sobre el programa fuente, las primeras tres fases suelen agruparse en una sola fase llamada fase de análisis y las últimas tres en una llamada fase de síntesis.

La fase de análisis y el módulo de manejo de errores se describen posteriormente en este mismo capítulo. La fase de síntesis no es relevante en el contexto de un lenguaje cultivase de datos, ya que este sigue un enfoque diferente que el de los lenguajes tradicionales, por esta razón solo se menciona.
Partes de un compilador

Básicamente, un compilador cuenta con dos partes fundamentales: El Front End y el Back End. Estas partes se complementan para lograr el objetivo del compilador. A continuación, describiremos cada una de estas partes:

Front End: El Front End es la parte del compilador que interactúa con el usuario y por lo general, es independiente de la plataforma en la que se trabaja. Se encarga de realizar el análisis del código fuente a compilar y verifica que este sea válido, así como también, genera el árbol de derivación y rellena los valores de la tabla de símbolos.

Back End: Esta parte del compilador es la encargada de generar el código en formato de máquina, a partir del trabajo hecho por el Front End.

Lenguaje Ensamblador

Un lenguaje ensamblador puro es aquel en que cada sentencia produce exactamente una instrucción máquina. En otras palabras, hay una correspondencia biunívoca entre las instrucciones de máquina y las sentencias del programa en ensamblador.

Si cada línea de un programa en ensamblador contuviera una sentencia ensamblador y si cada palabra de máquina contuviera una instrucción de máquina, entonces un programa de n líneas escrito en ensamblador produciría un programa en lenguaje de máquina que ocuparía n palabras.

Ensamblador.png

¿Dónde se utiliza el lenguaje ensamblador?

El lenguaje ensamblador trabaja directamente con el microprocesador de una máquina, es decir, programamos un microprocesador con este lenguaje, también lo podemos utilizar para desarrollar controladores de dispositivos (Drivers) y sistemas operativos de computadoras.

IDE para lenguaje ensamblador

Flat assembler (FASM) es un ensamblador libre, multi-paso, con el estilo de la sintaxis de Intel que soporta las arquitecturas IA-32 y x86-64.

El proyecto fue iniciado en 1999 por Tomasz Grysztar, que en aquella época era un estudiante no graduado de matemáticas en Polonia. El FASM está escrito en lenguaje ensamblador, viene con el código fuente completo, y fue capaz de ensamblarse a sí mismo (bootstrapping) desde la versión 0.90 del 4 de mayo de 1999. El primer lanzamiento público fue anunciado la 15 de marzo de 2000.

Es notable por su velocidad rápida, optimizaciones de tamaño, portabilidad, poderosas capacidades de macro, y la comunidad del foro en línea. Sin embargo, casi no usa opciones en la línea de comandos. Hay disponibles archivos binarios y de código fuente para Linux, Windows (incluyendo un IDE de desarrollo), DOS, OpenBSD, MenuetOS, OctaOS, y DexOS. FASM contiene vínculos (bindings) para la GUI de Windows y OpenGL.

Todas las versiones de FASM pueden generar los siguientes archivos objeto: binarios planos (flat binary), ELF o COFF (clásico o de MS), como también ejecutables en formato MZ, ELF o PE. Existe un traslado del ensamblador a la arquitectura ARM, llamado FASMARM.

Lenguaje Máquina

El lenguaje de máquina o código máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. 

Está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones más un conjunto de datos sobre el cual se trabaja.



Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos.

El lenguaje de máquina es específico de la arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre arquitecturas distintas