Con la tecnología de Blogger.
RSS

LENGUAJE ENSAMBLADOR


El lenguaje ensamblador, o assembler (assembly language en inglés) es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador.

Nivel del Lenguaje: De Bajo Nivel

Algunas de las ventajas de usar el lenguaje ensamblador, respecto a un lenguaje de alto nivel :

  • Velocidad
  • Eficiencia de tamaño
  • Flexibilidad
Por otro lado al ser un lenguaje mas primitivo, el emsambladro tiene ciertas desventajas respecto a los lenguajes de alto nivel.

  • tiempo de programacion
  • programas fuente grandes
  • peligro de afectar recursos inesperadamente
  • falta de portabilidad
Sintaxis Del Lenguaje Ensamblador

La sintaxis es la siguiente
Nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, ...
El nombre de la instrucción está formada por 2 o 3 letras, los operandos pueden ser registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de la instrucción.
Por ejemplo:
MOV AL, [1000]
Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una dirección de memoria, ésta dirección se escribe entre corchetes, recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una constante dependerá del ensamblador, en el caso del debug (Un programa que sirve para crear y editar aplicaciones que viene con el DOS) se interpretarán como hexadecimales, en los siguientes ejemplos se interpretará que las constantes son números hexadecimales.
También se puede tomar un valor de la memoria apuntado por un registro, por ejemplo:
MOV AL, [DI]
DI está apuntado al valor que está en la memoria que será copiado al registro AL. El nombre MOV viene de la palabra move, que es una palabra del ingles que significa mover. Justamente la instrucción mencionada significa, mover el valor apuntado por DI a AL.
También se puede copiar el valor de un registro a otro
MOV AL, BL
En este caso se copia el valor de BL a AL
Igualmente se puede copiar el valor de la parte baja de un registro a la parte alta de otro registro
MOV CH, DL
Así como también operar con las partes altas
MOV AH, DH
Inclusive se puede copiar el valor de un registro a una dirección de memoria
MOV [1000], AL
Igualmente apuntada la dirección de memoria a DI
MOV [DI], AL
Y también con los registros completos (Solamente completos en el procesador 8086)
MOV AX, DX
También trabajar con los registros completos para todos los procesadores de 32 bits
MOV EBX, EDX
En éste caso mueve la totalidad del registro DX a la totalidad del registro BX, en éste caso se está trabajando con los registros en forma extendida (32 bits), pero hay que tener precaución ya que el procesador 8086 no interpretará correctamente ésta instrucción (El procesador 8086 es obsoleto por ésta desventaja y otras más, por ejemplo sólo puede direccionar 1 MB), además el debug no puede interpretar ésta instrucción.
No se puede realizar lo siguiente porque no se pueden pasar valores en la memoria sin la intervención de un registro, además no se ha especificado el tamaño
MOV [1000], [2000]
Igualmente no se puede hacer lo siguiente
MOV [DI], [1000]
Así como también lo siguiente
MOV [DI], [SI]
Sin embargo lo siguiente es correcto
MOV [1000], AX
Pero no lo siguiente porque no se está especificando el tamaño
MOV [SI], 1F
Lo correcto sería lo siguiente
Si se quiere transferir un byte
MOV byte [SI], 1F
Si se quiere transferir una palabra (16 bits)
MOV word [SI], 1F
Si se quiere transferir una doble palabra (32 bits)
MOV dword [SI], 1F




Listado del ejemplo del código de fuente del lenguaje ensamblador
<>
<>  <>
Dirección EtiquetaInstrucción (sintaxis de AT&T)
          Código de objeto
.begin
.org 2048
a_start.equ 3000
2048longitud del ld, %
2064hágase00000010 10000000 00000000 00000110
2068addcc %r1, - 4, %r110000010 10000000 01111111 11111100
2072addcc %r1, %r2, %r410001000 10000000 01000000 00000010
2076ld %r4, %r511001010 00000001 00000000 00000000
2080lazo del Ba00010000 10111111 11111111 11111011
2084addcc %r3, %r5, %r310000110 10000000 11000000 00000101
2088hecho:jmpl %r15+4, %r010000001 11000011 11100000 00000100
2092longitud:2000000000 00000000 00000000 00010100
2096dirección:a_start00000000 00000000 00001011 10111000
a_start de .org
3000a:












  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read User's Comments0

PROLOG


Prolog es un lenguaje de programación basado en la programación lógica deductiva.

Nivel de Lenguaje: Lenguaje de Alto Nivel
Tipo de Licenciamiento: GNU General Public License o simplemente su acrónimo del inglés GNU GPL


ESTRUCTURA PROLOG



FUNCIONES

Prolog se puede utilizar para resolver, básicamente, cualquier tipo de problema. Principalmente es útil en la gestión de Juegos, en Inteligencia Artificial y Sistemas Expertos, como lenguaje especialmente pensado para construir bases de conocimientos basados en la lógica que forman parte importante de cualquier agente inteligente, en la construcción de Compiladores e Intérpretes, en el Reconocimiento del Lenguaje Natural.
Al principio era sólo un lenguaje interpretado; luego, a mediados de los 70, David Warren desarrolló un compilador que traducía Prolog a un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine (WAM). Desde ese momento Prolog es un lenguaje semi-interpretado.

Prolog es un lenguaje de programación seminterpretado. Su funcionamiento es muy similar a Java. El código fuente se compila a un código de byte el cual se interpreta en una máquina virtual denominada Warren Abstract Machine (comúnmente denominada WAM).
Por eso, un entorno de desarrollo Prolog se compone de:
  • Un compilador. Transforma el código fuente en código de byte. A diferencia de Java, no existe un standard al respecto. Por eso, el código de byte generado por un entorno de desarrollo no tiene por qué funcionar en el intérprete de otro entorno.
  • Un intérprete. Ejecuta el código de byte.
  • Un shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los interfaces de línea de comando de los sistemas operativos.
  • Una biblioteca de utilidades. Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
• Existen diversos compiladores de prolog

– B-prolog
– Strawberry Prolog
– DGKS Prolog
– GNU Prolog
– Logtalk
– SWI Prolog

VENTAJAS


Una ventaja desde el punto de vista del usuario es la facilidad para programar ya que se pueden escribir programas rápidamente, con pocos errores originando programas claramente legibles, aun si no se conocemuy bien el lenguaje.

Otra ventaja de este tipo de lenguajes frente a otros, como Java o C++, es que no hay que pensar demasiado en la solución del problema, ya que Prolog infiere sus respuestas basándose en las reglas declaradas dentro del programa.



La resolución automática no siempre es eficiente, por lo que eventualmente se podría dar una respuesta incorrecta a una consulta.
DESVENTAJAS
Ciertos problemas están ligados a la representación del conocimiento, que Prolog no posee.


SINTAXIS DE PROLOG

Hay tres conceptos generales para el uso de Prolog:
  • Hechos : Nos dicen como se relacionan los objetos entre si.
  • Variables : Son los objetos que prolog determina , pueden ser instanciadas.
  • Reglas : Relacionan hechos entre sí.
Ejemplo de lo anterior:
Un hecho sería come(pollo,pienso) dentro de este hecho tendriamos los objetos pollo y pienso, nosotros a la hora de trabajar con Prolog podriamos hacer consultas de tipo ?-come(pollo,X), X en este caso seria una variable la cual se´ra instanciada por pienso si Prolog lo determina. Dentro de nuestra base de datos conforme avanzamos en busqueda de la regla nos podriamos encontrar lo siguiente: come(X,Y)--->se_alimenta(X,Y), animal(X) comida(Y), esto es una regla ya que relaciona distintos hechos.

Funciones con las que se puede general la base de datos, funciones de entrada salida y de comandos
Funciones de Prolog
Tipo de Funcion Nombre de la función Breve descripción Ejemplo
Comando *consult Compila y lee un programa derivado del fichero por parametros.Agrega dichas sentencias. consult(sentencias.txt)
Comando *recon Similar al consult, pero reemplaza la base de datos. recon(nuevas_sentencias.txt)
Comando *forget Elimina las sentencias que se pasen a través del fichero por parametros forget(sentencias_viejas.txt)
Comando *exitsys Volvemos al Sistema Operativo. exitsys
Entrada / Salida write Escribe en nuestro fichero.Podemos meter variables y constantes write('Manuel')
Entrada / Salida nl Escribimos retorno de carro write('Manu') nl write('Garcia de Vinuesa')
Entrada / Salida read Lee de teclado hasta que se pulse '.' read('Manuel')
En Prolog a la hora de general la base de datos debemos tener en cuenta que en Prolog se pueden usar los siguientes tipos de datos.
  • Symbol.
  • String (Cadenas de caracteres entre dobles comillas).
  • Integer(Dependiendo de la version del Prolog tendran un rango u otro, normalmente son de 16bits.)
  • Real (Puede tener: signo, numero, punto decimal, fracción, E(exponente), signo para el exponente, exponente)
  • Char
Con Prolog se pueden hacer todas las operaciones de matemática básica (suma, resta, división...) y las básicas de comparaciones lógicas, igualdad, mayor que, menor que...
La estructura de un programa en prolog, es decir de un fichero donde se creará a partir de el la base de datos para luego trabajar con ella es la siguiente.

** Hechos **
animal(pollo).
animal(perro).
comida(pienso).

** Relaciones **
se_aliementa(pollo,pienso).
mata(perro,pollo).


** Reglas **
ave(X):- animal(X)
come(X,Y):-se_aliementa(X,Y),animal(X),comida(Y).

Ejercicio en Prolog


Los programas se escriben en ficheros de texto, generalmente con extension .pl y pueden
contener comentarios y código. Para ello puede utilizar cualquier editor de texto. Le
recomendamos que intente escribir el siguiente programa desde el principio para familiarizarse con la sintáxis.

% Este es mi primer programa en Prolog
%
% Se trata de un arbol genealogico muy simple
%
%
% Primero defino los parentescos basicos
% de la familia.
% padre(A,B) significa que B es el padre de A...
padre(juan,alberto).
padre(luis,alberto).
padre(alberto,leoncio).
padre(geronimo,leoncio).
padre(luisa,geronimo).
% Ahora defino las condiciones para que
% dos individuos sean hermanos
% hermano(A,B) significa que A es hermano de B...
hermano(A,B) :-
padre(A,P),
padre(B,P),
A \== B.
% Ahora defino el parentesco abuelo-nieto.
% nieto(A,B) significa que A es nieto de B...
nieto(A,B) :-
padre(A,P),
padre(P,B).


Esta es básicamente la estructura de prologo ya que es un lenguaje basado en la lógica y muy utilizado para inteligencia artificial: 









http://www.monografias.com/trabajos12/inteartf/inteartf2.shtml#base
http://html.rincondelvago.com/lenguaje-prolog.html


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read User's Comments0