CONSULTAS...


QUE ES UN PROGRAMA DE COMPUTADORA.
El software, o programas de computadora, sin dudas es el elemento más importante de la PC, ya que si él sería imposible sacarle algún provecho a una computadora personal.
¿Qué es un programa de computadora?
Básicamente, un programa de computadora, aplicación o software, como también son llamados, son un conjunto de instrucciones en forma secuencial, llamado código, que a través de su interpretación por el sistema operativo o hardware, le permiten desarrollar una acción específica a una computadora.
Allá por los albores de la computación, los programadores cargaban estas instrucciones directamente la hardware, lo que afortunadamente cambio gracias a los llamados lenguajes de programación, otro tipo de programa de computadora que simplifican esta tarea mediante la incorporación en sus comandos de ciertas secuencias y herramientas para que el programador no tenga que hacerse problemas con los procesos más oscuros del hardware como el direccionamiento de memoria, las entradas o salidas de datos y las peticiones de interrupción IRQ, entre otros.
Que es un programa de computadora
Antes de poder llegar a nuestra mesa, un programa de computadoras debe ser primero escrito en un lenguaje de programación y luego compilado para lograr un ejecutable que nosotros podamos correr en nuestra computadora.
Este proceso de compilación es absolutamente necesario, ya que sin ello, el hardware de la PC jamás podría interpretarlo, es decir ejecutarlo. El proceso de compilación básicamente es una traducción de un lenguaje de programación de alto nivel, código fuente, a usualmente lenguaje de máquina, un código intermedio (bytecode) o texto el cual sí puede ser interpretado por el hardware.
Por regla general, el usuario solo puede acceder a la versión terminada de un software o programa de computadoras, es decir, el ejecutable del mismo. Pero afortunadamente algunos movimientos como el del Open Source también distribuyen el código fuente del programa para que todos los que poseen el suficiente conocimiento puedan modificarlo y adaptarlo a sus propias necesidades.
Que es un programa de computadora
Cómo se dividen los programas de computadoras o software
Existen básicamente dos clases de software o programas de  computación: el software de sistema, los cuales consisten en un grupo de programas o aplicaciones que hacen que una computadora funcione, entre los cuales podemos citar a los sistemas operativos.
Que es un programa de computadora
Los SO son indispensables para que una PC inicie, reconozca los periféricos y hardware interno de la misma y finalmente nos ofrezca una interfaz de usuario en la cual poder usar los demás programas.
Que es un programa de computadora
En el segundo lugar podemos ubicar a todo el software que realiza una acción específica en el sistema, y que no son indispensables para que el sistema funcione. En este grupo podemos mencionar a las suites de ofimática, los programas de diseño gráfico, juegos y muchos otros.
fuente:http://www.informatica-hoy.com.ar/aprender-informatica/Que-es-programa-computadora.php

QUE ES PROGRAMACIÓN.
 Es la acción y efecto de programar. Este verbo tiene varios usos: se refiere a idear y ordenar las acciones que se realizarán en el marco de un proyecto; al anuncio de las partes que componen un acto o espectáculo; a la preparación de máquinas para que cumplan con una cierta tarea en un momento determinado; a la elaboración de programas para la resolución de problemas mediante ordenadores; y a la preparación de los datos necesarios para obtener una solución de un problema a través de una calculadora electrónica, por ejemplo.

Programación
En la actualidad, la noción de programación se encuentra muy asociada a la creación de aplicaciones informáticas y videojuegos; es el proceso por el cual una persona desarrolla un programa valiéndose de una herramienta que le permita escribir el código (el cual puede estar en uno o varios lenguajes, tales como C++, Java y Python) y de otra que sea capaz de “traducirlo” a lo que se conoce como lenguaje de máquina, el cual puede ser entendido por un microprocesador.

Este último paso se conoce como compilación y es necesario para que el código pueda ser ejecutado por la plataforma para la cual haya sido creado, que puede ser un ordenador, una tableta, una consola o un teléfono móvil, por ejemplo. Existe también una forma de traducir el código denominada interpretación, que consiste en analizar línea a línea, hasta que se traduzca lo suficiente como para poder realizar una tarea. Cabe mencionar que los lenguajes de programación se dividen en dos grandes grupos, donde los que pueden ser compilados no pueden ser interpretados, y viceversa.

La totalidad del proceso de desarrollo abarca varias etapas y requiere del trabajo de diferentes especialistas. En principio, partiendo de la base de un proyecto bien organizado, es necesario dar con una idea atractiva, interesante, que justifique los meses o años de esfuerzo que vendrán. Tan sólo esta primera parte puede tomar mucho tiempo, dado que lo que comienza como un producto perfecto puede convertirse, luego de cuestionarlo y observarlo desde diferentes ángulos, en un fracaso seguro.

Programación Una vez hallada la idea, se debe establecer el diseño de la misma; en otras palabras, se trata de formalizar todo aquello que se haya discutido durante la búsqueda inicial. Si bien cada equipo trabaja a su manera, dado que no se puede estructurar la creación de una forma rígida, es probable que el siguiente paso lógico sea comenzar a experimentar a través de la programación, para facilitar a los diseñadores un contacto directo e interactivo con su idea.
Los programadores tienen en sus manos el poder de dar vida a un sistema, a una aplicación, a un videojuego. Es importante notar que todos estos productos pueden ser definidos en absoluto detalle en un documento, incluyendo imágenes y gráficos que expliquen cómo funciona cada milímetro de los mismos; sin embargo, hasta que un desarrollador de software no entra en acción, no es posible verlos en movimiento, probarlos, pasar de la teoría a la práctica.
En un plano más técnico, la programación se realiza mediante el uso de algoritmos, que son secuencias finitas, ordenadas y no ambiguas de instrucciones que deben seguirse para resolver un problema. Algunas de ellas pueden agruparse y recibir un nombre para poder ser invocadas con facilidad tantas veces como sea necesario. Del mismo modo que los seres humanos necesitamos respirar constantemente, una aplicación informática necesita conocer la posición del puntero del ratón a cada momento, así como su actividad (si se ha hecho clic y con qué botón, si se ha soltado o si se mantiene presionado, etcétera).
Por último, cabe destacar que se conoce como programación al conjunto de los programas de televisión o radio. Por ejemplo: “Tengo ganas de ver una película; veamos qué hay en la programación”. 
LENGUAJE DE PROGRAMACION
Un lenguaje de programación es un lenguaje diseñado para describir el conjunto de acciones consecutivas que un equipo debe ejecutar. Por lo tanto, un lenguaje de programación es un modo práctico para que los seres humanos puedan dar instrucciones a un equipo.
Por otro lado, el término "lenguaje natural" define un medio de comunicación compartido por un grupo de personas (por ejemplo: inglés o francés).
Los lenguajes que los equipos usan para comunicarse entre ellos no tienen nada que ver con los lenguajes de programación; se los conoce como protocolos de comunicación. Se trata de dos conceptos totalmente diferentes. Un lenguaje de programación es muy estricto:
A CADA instrucción le corresponde UNA acción de procesador.
El lenguaje utilizado por el procesador se denomina lenguaje máquina. Se trata de instrucciones que llegan al procesador consistentes en una serie de datos binarios (ceros y unos).

El lenguaje máquina, por lo tanto, no es comprensible para los seres humanos, razón por la cual se han desarrollado lenguajes intermediarios comprensibles para el hombre. El código escrito en este tipo de lenguaje se transforma en código máquina para que el procesador pueda interpretarlo.
El ensamblador fue el primer lenguaje de programación utilizado. Es muy similar al lenguaje máquina, pero solo los desarrolladores pueden comprenderlo. A pesar de su parecido con lenguaje máquina, depende estrictamente del tipo de procesador utilizado (cada tipo de procesador puede tener su propio lenguaje máquina). Así, un programa desarrollado para un equipo no puede ser "portado" a otro tipo de equipo. El término portabilidad describe la capacidad de usar un programa de software en diferentes tipos de equipos. Para poder utilizar un programa de software escrito en un código ensamblador en otro tipo de equipo, ¡a veces será necesario volver a escribir todo el programa!
Por lo tanto, un lenguaje de programación tiene varias ventajas: es mucho más fácil de comprender que un lenguaje máquina, y permite mayor portabilidad, es decir que puede adaptarse fácilmente para ejecutarse en diferentes tipos de equipos.
Lenguajes de programación imperativos y funcionales
Los lenguajes de programación generalmente se dividen en dos grupos principales en base al procesamiento de sus comandos: lenguajes imperativos y lenguajes funcionales.
Lenguaje de programación imperativo
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. Estos fueron los primeros lenguajes de programación en uso y aún hoy muchos lenguajes modernos usan este principio.
No obstante, los lenguajes imperativos estructurados carecen de flexibilidad debido a la secuencialidad de las instrucciones.
Lenguaje de programación funcional
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. Cuando una función se invoca a sí misma, hablamos de recursividad.
Interpretación y compilación
Los lenguajes de programación pueden, en líneas generales, dividirse en dos categorías: lenguajes interpretados y lenguajes compilados.
Lenguaje interpretado
Un lenguaje de programación es, por definición, diferente al lenguaje máquina. Por lo tanto, debe traducirse para que el procesador pueda comprenderlo. Un programa escrito en un lenguaje interpretado requiere de un programa auxiliar (el intérprete), que traduce los comandos de los programas según sea necesario.
Lenguaje compilado

Un programa escrito en un lenguaje compilado se traduce a través de un programa anexo llamado compilador que, a su vez, crea un nuevo archivo independiente que no necesita ningún otro programa para ejecutarse a sí mismo. Este archivo se llama ejecutable.
Un programa escrito en un lenguaje compilado posee la ventaja de no necesitar un programa anexo para ser ejecutado una vez que ha sido compilado. Además, como sólo es necesaria una traducción, la ejecución se vuelve más rápida. Sin embargo, no es tan flexible como un programa escrito en lenguaje interpretado, ya que cada modificación del archivo fuente (el archivo comprensible para los seres humanos: el archivo a compilar) requiere de la compilación del programa para aplicar los cambios.
Por otra parte, un programa compilado tiene la ventaja de garantizar la seguridad del código fuente. En efecto, el lenguaje interpretado, al ser directamente un lenguaje legible, hace que cualquier persona pueda conocer los secretos de fabricación de un programa y, de ese modo, copiar su código o incluso modificarlo. Por lo tanto, existe el riesgo de que los derechos de autor no sean respetados. Por otro lado, ciertas aplicaciones aseguradas necesitan confidencialidad de código para evitar las copias ilegales (transacciones bancarias, pagos en línea, comunicaciones seguras...).
Lenguajes intermediarios
Algunos lenguajes pertenecen a ambas categorías (LISP, Java, Python...) dado que el programa escrito en estos lenguajes puede, en ciertos casos, sufrir una fase de compilación intermediaria, en un archivo escrito en un lenguaje ininteligible (por lo tanto diferente al archivo fuente) y no ejecutable (requeriría un intérprete). Los pallets Java, pequeños programas que a menudo se cargan en páginas web, son archivos compilados que sólo pueden ejecutarse dentro de un navegador web (son archivos con la extensión .class).
Algunos ejemplos de lenguajes ampliamente usados

A continuación, encontrará una breve lista de los lenguajes de programación actuales:
Lenguaje
Principal área de aplicación
Compilado/interpretado
ADA
Tiempo real
Lenguaje compilado
BASIC
Programación para fines educativos
Lenguaje interpretado
C
Programación de sistema
Lenguaje compilado
C++
Programación de sistema orientado a objeto
Lenguaje compilado
Cobol
Administración
Lenguaje compilado
Fortran
Cálculo
Lenguaje compilado
Java
Programación orientada a Internet
Lenguaje intermediario
MATLAB
Cálculos matemáticos
Lenguaje interpretado
Cálculos matemáticos
Cálculos matemáticos
Lenguaje interpretado
LISP
Inteligencia artificial
Lenguaje intermediario
Pascal
Educación
Lenguaje compilado
PHP
Desarrollo de sitios web dinámicos
Lenguaje interpretado
Inteligencia artificial
Inteligencia artificial
Lenguaje interpretado
Perl
Procesamiento de cadenas de caracteres
Lenguaje interpretado

¿QUÉ ES UN LENGUAJE DE ALTO NIVEL?

Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C se pueden usar palabras tales como: case, if, for, while, etc. para construir con ellas instrucciones como:
if( numero > 0 ) printf( "El número es positivo" )
Que traducido al castellano viene a decir que: si número es mayor que cero, entonces, escribir por pantalla el mensaje: "El número es positivo".
Ésta es la razón por la que a estos lenguajes se les considera de alto nivel, porque se pueden utilizar palabras de muy fácil comprensión para el programador. En contraposición, los lenguajes de bajo nivel son aquellos que están más cerca del "entendimiento"  de la máquina. Otros lenguajes de alto nivel son: Ada, BASIC, COBOL, FORTRAN, Pascal, etc.
Otra característica importante de los lenguajes de alto nivel es que, para la mayoría de las instrucciones de estos lenguajes, se necesitarían varias instrucciones en un lenguaje ensamblador para indicar lo mismo. De igual forma que, la mayoría de las instrucciones de un lenguaje ensamblador, también agrupa a varias instrucciones de un lenguaje máquina.
tipos de instrucciones





LENGUAJE DE UNA MAQUINA
Fue el primer lenguaje utilizado en la programación para las primeras computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, y que además reducen la posibilidad de cometer errores.

La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción, por consiguiente una instrucción es un conjunto de unos y ceros, las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina.

El lenguaje máquina es el único lenguaje que puede ejecutar una computadora, es específico en cada arquitectura, es un código que es interpretado directamente por el microprocesador, está compuesto por un conjunto de instrucciones ejecutadas en secuencia que representan acciones que la máquina podrá tomar.

El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits; físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.

Todo código fuente en última instancia debe llevarse a un lenguaje máquina mediante el proceso de compilación o interpretación para que la computadora pueda ejecutarlo.

Las instrucciones preparadas en cualquier lenguaje de máquina tienen por lo menos dos partes, el comando u operación, que dice a la computadora cuál es la función que va a realizar y la instrucción es el operando, que indica a la computadora donde hallar o almacenar los datos y otras instrucciones que se van a manipular; el número de operando de una instrucción varía en las distintas computadoras, una instrucción en lenguaje máquina puede, por ejemplo, representarse de la siguiente forma:

011011001010010011110110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aún más difícil la interpretación de un programa escrito de esta forma, esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas.

Como se puede observar, estas instrucciones serán fáciles de leer por la computadora y difíciles por un programador, y viceversa, esta razón hace difícil escribir programas en código o lenguaje a máquina y requiere buscar otro lenguaje para comunicarse con la computadora, pero que sea más fácil de escribir y leer por el programador. Para evitar la tediosa tarea de escribir programas en lenguaje máquina, se han diseñado otros lenguajes de programación que facilitan la escritura y posterior ejecución de los programas.

EJEMPLO

0011  
0001

1010

0001

01 A1

1000

1001

1001

1010

FF 9A

0011

1010

1001

1100

3A 9C

0111

0100

0111

0011

74 F0

1110

1001

0010

1100

C8 30


Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se podría escribir:

ALMACENAR 11010110, 00011101

Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición 00011101 si se sabe que al grupo alfabético ALMACENAR le corresponde la secuencia de bits 11110101.

La máquina traduciría la anterior instrucción como:

11110101 11010110 00011101

A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez más para que la labor del programador fuera más fácil, incluyendo las denominadas directivas del ensamblador, que son órdenes o información que el programador da al traductor, no instrucciones de lenguaje máquina.

El código máquina, o lenguaje de máquina, está formado por instrucciones sencillas, que dependiendo de la estructura del procesador pueden especificar:

Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria específicas (offset).
Modos de direccionamiento usados para interpretar operando.
Las instrucciones de máquina o instrucciones del computador son las que determinan el funcionamiento de la CPU que las ejecuta, la CPU puede realizar una diversidad de funciones que son el reflejo de la variedad de las instrucciones definidas para dicha CPU, el programador tiene un repertorio de instrucciones como medio para controlar la CPU.

Las operaciones más complejas se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas secuencialmente o mediante instrucciones de control de flujo.

Las operaciones disponibles en la mayoría de los conjuntos de instrucciones incluyen:

Mover
Llenar un registro con un valor constante
Mover datos de una posición de memoria a un registro o viceversa
Escribir y leer datos de dispositivos
Computar
Sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado en uno de ellos o en otro registro
Realizar operaciones binarias, incluyendo operaciones lógicas (AND/OR/XOR/NOT)
Comparar valores entre registros (mayor, menor, igual)
Afectar el flujo del programa
Saltar a otra posición en el programa y ejecutar instrucciones allí
Saltar si se cumplen ciertas condiciones (IF)
Saltar a otra posición, pero guardar el punto de salida para retornar (CALL, llamada a subrutinas)
Las instrucciones de un lenguaje de programación se pueden clasificar en:

Instrucciones de transferencias de datos: Son aquellas de entrada o lectura y de salida o escritura. En el caso de las instrucciones de entrada o lectura, se lleva el dato de entrada o lectura desde la unidad de entrada a la memoria. Si por el contrario es una instrucción de salida o escritura, se lleva el dato de la memoria a la unidad de salida.
Instrucciones de tratamiento: Se trata de las instrucciones aritmético-lógicas y las de desplazamientos. Así como suma de datos, comparaciones.
Instrucciones de flujo de control o de bifurcación y salto: Las instrucciones de flujo de control son aquellas instrucciones que alteran el orden secuencial de la ejecución de un programa. También hay instrucciones que posibilitan la interrupción de la ejecución o saltar a ejecutar otro programa. Cuando termina cualquiera de estas instrucciones, el programa continúa ejecutándose desde el punto en el que se interrumpió.
Direccionamiento de lenguaje maquina: Es la forma en cómo se accede a la memoria, recordamos que un programa no puede ejecutarse sino se encuentra en memoria principal, la forma de acceder a la memoria depende del microprocesador, pero en general existen dos tipos de direccionamiento: directo e indirecto.
El direccionamiento directo también recibe el nombre de direccionamiento absoluto y el acceso a las direcciones se hace de manera directa.
El direccionamiento indirecto también recibe el nombre de direccionamiento relativo y se basa a partir de una dirección genérica, generalmente el inicio del programa.
Para acceder a una dirección relativa se suma a la dirección base el número de espacios de memorias necesarias, e direccionamiento relativo hace a los programas relocalizarles e independientes, si la dirección base es el inicio de la memoria fija el direccionamiento pasa a ser un variante de direccionamiento absoluto.
Ventajas del Lenguaje Máquina
Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.
Desventajas del Lenguaje Máquina

Dificultad y lentitud en la codificación.
Poca fiabilidad.
Gran dificultad para verificar y poner a punto los programas.
Los programas solo son ejecutables en el mismo procesador (CPU)


LENGUAJE DE ENSAMBLADOR
El lenguaje ensamblador es el lenguaje de programación utilizado para escribir programas informáticos de bajo nivel, y constituye la representación más directa del Código máquina específico para cada arquitectura de computadoras legible por un programador. Aun hoy se utiliza en la programación de handler o manipuladores de dispositivos de hardware.

Características
El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido directamente por un ser humano ya que su estructura se acerca más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un Microprocesador, suele necesitar ser modificado, muchas veces en su totalidad para poder ser usado en otra máquina distinta, aun con el mismo Microprocesador, solo pueden ser reutilizados secciones especiales del código programado.
Los programas hechos en lenguaje ensamblador, al ser programado directamente sobre Hardware, son generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un Microprocesador por lo que se pueden crear segmentos de código difíciles de programar en un lenguaje de alto nivel.
También se puede controlar el tiempo en que tarda una Rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.
El lenguaje ensamblador es un código estructurado y gravitatorio desarrollado sobre un archivo de programación (.ASM), en el cual pueden existir varios programas, macros o rutinas que pueden ser llamados entre sí.
Lenguaje
Un programa escrito en lenguaje ensamblador consiste en una serie de Instrucciones que corresponden al flujo de órdenes ejecutables que pueden ser cargadas en la Memoria de un sistema basado en Microprocesador. Por ejemplo, un Procesador x86 puede ejecutar la siguiente instrucción Binaria como se expresa en código de máquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)
La representación equivalente en lenguaje ensamblador es más fácil de recordar:

MOV al, 061h
Esta instrucción significa:

Asigna el valor Hexadecimal 61 (97 Decimal) al registro "al".
El mnemónico "mov" es un código de operación u "opcode", elegido por los diseñadores de la colección de instrucciones para abreviar "move" (mover, pero en el sentido de copiar valores de un sitio a otro). El opcode es seguido por una lista de argumentos o parámetros, completando una instrucción de ensamblador típica. A diferencia de los lenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad necesaria. Por ejemplo, para un código máquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudo instrucción al grupo "haga si menor que", y "si = 0" sobre el resultado de la condición anterior.
Código máquina
El código máquina, o lenguaje de máquina, está formado por instrucciones sencillas, que -dependiendo de la estructura del procesador- pueden especificar:

Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria específicas (offset).
Modos de direccionamiento usados para interpretar operando.
Las operaciones más complejas se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas secuencialmente o mediante instrucciones de control de flujo. Casi todas las instrucciones utilizan 2 operando específicos para realizar su función. Ejemplo, cuando deseamos mover un valor constante hacia un registro de almacenamiento debemos especificar ambos operando. Las operaciones disponibles en la mayoría de los conjuntos de instrucciones incluyen:

Mover
Llenar un registro con un valor constante (Ej.: mov al, `20`). O mover datos de una posición de memoria a un registro o viceversa (Ej.: mov al, [si]) o escribir y leer datos de dispositivos (Ej.: lea dx, offset cadena)
Computar
Sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado en uno de ellos o en otro registro (Ej.: sum, mal, div, entre otras instrucciones). O realizar operaciones binarias, incluyendo operaciones lógicas (AND/OR/XOR/NOT) o comparar valores entre registros (mayor, menor, igual) (Ej.: cmp)

Afectar el flujo del programa
Saltar a otra posición en el programa y ejecutar instrucciones allí (Ej.: jmp) o saltar si se cumplen ciertas condiciones (IF) (Ej.: jnb, jnz, jb, jz, jne, je, entre otros) o saltar a otra posición, pero guardar el punto de salida para retornar (Ej.: CALL, llamada a subrutinas) Algunas computadoras incluyen instrucciones complejas dentro de sus capacidades. Una sola instrucción compleja hace lo mismo que en otras computadoras puede requerir una larga serie de instrucciones, por ejemplo:

Salvar varios registros en la Pila de una sola vez
Mover grandes bloques de memoria

Ejemplos de lenguaje ensamblador
Ejemplo 1

El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS) en modo texto (por defecto).

.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code

programa:
   mov ax, @data
   mov ds, ax
   mov dx, offset Cadena1
   mov ah, 9
   int 21h
   int 20h
end programa
                                      COPILADOR
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.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 cómo piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Cómo funciona
El proceso de traducción se compone internamente de varias etapas o fases, que realizan distintas operaciones lógicas. Es útil pensar en estas fases como en piezas separadas dentro del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se integren juntas.

Fase de análisis
Análisis léxico
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, etc.) 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, se usan principalmente los autómatas finitos que acepten expresiones regulares. 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.

Análisis sintáctico
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.

Análisis semántico
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 operando 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.2 Revisa que los arreglos tengan definido el tamaño correcto.



Fase de síntesis
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 relocalizarle 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.

Generación de código 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.

Optimización de código
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 intérprete 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.

INTERFACE
CONCEPTO DE INTERFAZ O INTERFACE JAVA. AMPLIACIÓN.

Ya hemos dicho que interface en Java es una palabra que puede tener diferentes significados. Vamos a repasar algunos significados que ya hemos visto y a introducir otros nuevos. Es habitual que entre las personas que estudian Java haya dificultades para entender el concepto de interface. Esto es hasta cierto punto normal porque este término tiene varios usos.
Ya hemos dicho que interface en Java es una palabra que puede tener diferentes significados. Vamos a repasar algunos significados que ya hemos visto y a introducir otros nuevos.
a) Interface: parte visible y pública de una clase que describe qué hace y cómo usarla. La documentación de una clase en el API de Java vendría siendo su interface.
b) Interface: parte visible y pública de un método que describe qué hace y cómo usarlo (signatura del método + instrucciones de uso). La documentación de un método en el API de Java vendría siendo su interface.
c) Interfaz Gráfica de Usuario, interfaz de usuario o GUI (Graphical User Interface): es el entorno de objetos gráficos disponibles para un usuario en el marco de una aplicación o sistema operativo. El sistema operativo MS-Dos se basaba en intérpretes de comando (escritura de instrucciones por consola) pero Windows se basa en una interfaz gráfica de usuario (su entorno de escritorio), Linux en otra y Macintosh en otra.
d) Herramientas para crear Interfaces gráficas de usuario en Java. Hacemos referencia principalmente a los paquetes (packages) del API de Java swing y awt (Abstract Windowing Toolkit). Las clases de estos paquetes permiten crear interfaces gráficas de usuario basadas en ventanas estilo “Windows” para nuestras aplicaciones.
e) Interfaces de Java: son unas entidades abstractas conceptualmente por encima de las clases cuyo concepto vamos a introducir a continuación.
Para explicar el concepto de interface nos valdremos de un ejemplo. Supongamos que al crear un programa creamos una ciudad. Para crear la ciudad no partimos de cero: disponemos de edificios prefabricados (las clases del API de Java). Pero también disponemos de algo más: de normas de urbanismo ya definidas (las interfaces del API de Java). Cada norma vamos a decir que es una interface: nos dice qué debemos cumplir para que al construir un edificio (clase) se pueda calificar con un nombre determinado. Supongamos una norma denominada “Edificio a dos aguas”, cuyo contenido incluye:
a) El edificio habrá de tener cuatro paredes.
b) El edificio habrá de tener un tejado formado por dos planos.
c) Otras especificaciones.
Si al construir un edificio se cumplen las condiciones de las normas de urbanismo, el ayuntamiento nos permite que en la publicidad y escrituras del edificio conste que se trata de un edificio a dos aguas. Si no cumplimos las especificaciones, no podemos usar esa denominación. Por ejemplo, estaría prohibido que un edificio con forma de pentágono y cinco paredes se denominaran “Edificio a dos aguas”. Por el contrario, sería posible denominar edificio a dos aguas a una capilla que cumpla la norma, también a una vivienda unifamiliar que la cumpla, o a una biblioteca que la cumpla. Trasladémoslo a Java. Consideremos la interface “List” que equivale a nuestra norma, cuyo contenido incluye:
a) La clase habrá de tener un método cuya signatura sea get(int index) que devuelva el objeto de la lista en la posición especificada por el entero index.
b) La clase habrá de tener un método cuya signatura sea isEmpty() que devuelva un valor booleano true si la lista no contiene objetos o false en caso contrario.
c) Otras especificaciones.
Si una clase cumple y declara que cumple las especificaciones de la interfaz, decimos que esa clase implementa la interfaz. Si no cumple las especificaciones, no la implementa. Para implementar la interfaz la clase ha de incluir todos los métodos que defina la interfaz. Por ejemplo, una clase que no incluya el método get(int index) no cumplirá la especificación y por tanto no podrá decirse que implemente la interfaz List. Veamos ahora cómo empieza la documentación de esta interface del API de Java:
Java. Útil
Interface List<E>
All Superinterfaces:
Collection<E>, Iterable<E>
All Known Implementing Classes:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, LinkedList, RoleList, Stack, Vector y otras

Una interface puede tener “normas” superiores, a las que denominamos “Superinterfaces”, y “normas” inferiores, a las que denominamos “Subinterfaces”, de acuerdo con una jerarquía. A su vez, una interface puede tener clases que la implementan. Por ejemplo en el caso de List, esta interface está implementada por las clases ArrayList, LinkedList, Stack y otras. Todas las clases que implementan una interface podemos decir que tienen algo en común. De esta manera, todas las clases del API de Java están organizadas.
Fuente: http://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=644:concepto-o-definicion-de-interface-java-ique-es-una-interface-tipos-de-interfaz-ejemplo-practico-cu00677b&catid=68&Itemid=188





No hay comentarios:

Publicar un comentario