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

jueves, 8 de diciembre de 2016

Control de los Puertos en Lenguaje Ensamblador

Comunicación serial en lenguaje ensamblador.  
En lenguaje ensamblador, se puede acudir a la interrupción 14H de la ROM-BIOS para configurar, leer, escribir o simplemente para conocer el estado del puerto; cada una de estas cuatro opciones es un servicio de la interrupción, y se seleccionan a través del registro AH. La figura 1 muestra los valores que debe contener el registro AH para invocar cada uno de los servicios. En todos los casos, el registro DX debe contener el número del puerto serie; el primero de ellos, COM1 se especifica como 00h.  
 
Servicio
Descripción
00
Inicializar puerto serie
01
Enviar un dato
02
Recibir un dato
03
Obtener el estado del puerto

figura 1.Servicios para el puerto serial disponibles a través de la interrupción 14H

Para configurar o inicializar el puerto serie, bastará con utilizar el servicio 00 de la interrupción, colocando en el registro AL los valores equivalentes a los parámetros, como se puede observar en la figura 2. Con éste método es posible obtener frecuencias de transmisión que van desde los 110 hasta los 9600 baudios. 


figura 2
Para enviar un dato por el puerto serial, bastará con colocar en el registro AH el valor 01 correspondiente a este servicio y en el registro AL el dato a ser enviado, invocando de nuevo la interrupción 14H. La lectura de un dato que ha llegado al puerto se logra con el servicio 02, el cual devuelve en el registro AL el dato. La lectura del estado del puerto se consigue a través del servicio 03 de esta misma interrupción, y retorna en el registro AX el estado del puerto, el cual contendrá los bits que se muestran en la figura 3.
 


figura 3
Por ejemplo, podemos utilizar el lenguaje ensamblador para configurar el puerto serial para 1200 baudios, sin bit de paridad, sin bit de parada y 8 bits, realizando el siguiente programa: 
mov ah,0   ;servicio 00 de INT 14h: inicializar puerto
mov a1,83 ;configuración: 1200 baudios, no paridad,    
                ;un bit de parada, 8 bits de datos  
mov dx,00 ;Seleccionar puerto COM1 
int 14        ;interrupción del BIOS  
mov ah,4c ;servicio 4ch de INT 21h: terminar 
int 21        ;interrupción servicio del DOS
Este programa (en donde todos las cantidades están expresadas en hexadecimal) se puede tornar ejecutable utilizando algunos de los ensambladores para PC, o utilizando el comando DEBUG del DOS. 
Otra forma de seleccionar los parámetros de la comunicación y lograr ésta, es mediante la modificación y consulta de los registros correspondientes al circuito integrado que maneja la comunicación serial: el UART 8250 o similar. Como se sabe, este circuito integrado puede ser manejado como un puerto, en el cual es posible la escritura o lectura de sus estados. 
Comunicación con el puerto paralelo en lenguaje ensamblador.
En lenguaje ensamblador, se puede leer un dato del puerto mediante la instrucción IN ó escribir un dato en el puerto con la instrución OUT ,  en ambos casos el registro AL debe participar activamente en la instrucción, bien sea como fuente (en operaciones de escritura) o destino (en operaciones de lectura) del dato, como en los siguientes casos:
 
out DX, AL  ;lleva al puerto DX el contenido del registro AL
in   AL,DX   ;lleva al registro AL, el contenido del puerto DX
Otra, exigencia, es que el número del puerto sobre el que se va a realizar la transferencia de datos debe estar señalado por le registro DX, a excepción de los casos en los cuales el número del puerto es inferior a 255 (FFh), en cuyo caso la instrucción que lee o escribe puede señalar directamente el puerto. 
Como veran la utilización del puerto paralelo en lenguaje emsamblador es muy sencilla. 


Encender led mediante puerto paralelo.

Codigo.

STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
ASSUME CS:COD ,DS:COD
COD SEGMENT

MES1 DB  ‘Encender y Apagar LED con puerto paralelo’
MES2 DB  ‘Oprimir S para Salir ‘
MES3 DB  ‘Fin del Programa’
MENSAJE DW 0

MAIN PROC FAR
MOV AX.CS
MOV DS.AX

MOV MENSAJE OFFSET MES1
CALL ESCRIBIR
MOV MENSAJE OFFSET MES2
CALL ESCRIBIR
bucle

MOV AH.1
MOV DL.0FFH
INT 21H
CMP AL ‘S’
JE SALIR
MOV DX.378H
OUT DX.AL
JMP bucle
MAIN  ENDP

ESCRIBIR PROC NEAR
PUSH AX
PUSH DX
MOV AH.09H
MOV DX.MENSAJE
INT 21H

MOV AX.06
MOV DL.0DH
INT 21H
MOV AH.06H
MOV DL.0AH
INT 21H
POP DX
POP AX
RET
ESCRIBIR ENDP

SALIR
MOV AH.06
MOV DL.0DH
INT  21H
MOV AH.06H
MOV DL.0AH
INT 21H

MOV MENSAJE OFFSET MES3
CALL ESCRIBIR

MOV AH.4CH
INT 21H
COD ENDS
END MAIN

Fuentes: http://hgr.tripod.com/puertos_ensamblador.html

              https://www.youtube.com/watch?v=ImamnvO1YOE





lunes, 5 de diciembre de 2016

Programas En Turbo Assembler


 Suma de dos números ASCII (mediante suma Hexadecimal). 


Suma de dos números introducidos como binarios. 


Suma de dos números. 

Unidad IV (Lenguajes de Interfaz)


Programación de dispositivos
Programar interfaces de software y hardware para la manipulación de puertos y dispositivos de computadora.


4.1 El buffer de video en modo texto

 4.2 Acceso a discos en lenguaje ensamblador

4.3 Programación del puerto serial

4.4 Programación del puerto paralelo

 4.5 Programación híbrida


4.6 Programación de puerto usb

lunes, 14 de noviembre de 2016

Programas En Turbo Assembler

Letrero con colores 


Valor área de datos. 

Imprime números decimal y Hexadecimal. 

 Conversión de caracteres ASCII a su correspondiente binario. 

Imprime números en Hexadecimal. 

Unidad III Modularizacion (Lenguajes de Interfaz)

Modularizacion

Comprender la importancia de la utilidad de las macros y procedimientos dentro del desarrollo de una aplicación de software.


3.1 Procedimientos


3.2 Macros

miércoles, 12 de octubre de 2016

Programas En Turbo Assembler

¡Hola mundo! 
Uso de Constantes 

Hola mundo! con PROCEDIMIENTO. 
Identidad con PROCEDIMIENTO 
Borra pantalla 
Psosiciona cursor 

lunes, 3 de octubre de 2016

Mnemónicos

http://www.clase.net16.net/?p=98

Unidad II (Lenguajes de Interfaz)

2.1 Ensamblador (y ligador) a utilizar

2.2 Ciclos numéricos

2.3 Captura básica de cadenas

2.4 Comparación y prueba

2.5 Saltos

2.6 Ciclos condicionales

2.7 Incremento y decremento

2.8 Captura de cadenas con formato

 2.9 Instrucciones aritméticas

2.10 Manipulación de la pila

2.11 Obtención de cadena con representación decimal

2.12 Instrucciones lógicas

2.13 Desplazamiento y rotación

2.14 Obtención de una cadena con la representación hexadecimal

2.15 Captura y almacenamiento de datos numéricos


2.16 Operaciones básicas sobre archivos de disco

martes, 30 de agosto de 2016

Resumen intel 8086 y 8088.

El Intel 8086 y el Intel 8088 (i8086, llamados oficialmente iAPX 86, y i8088) son los primeros microprocesadores de 16 bits diseñados por Intel. Fueron el inicio y los primeros miembros de la arquitectura x86. El trabajo de desarrollo para el 8086 comenzó en la primavera de 1976 y fue lanzando al mercado en el verano de 1978. El 8088 fue lanzado en 1979

El 8086 y el 8088 ejecutan el mismo conjunto de instrucciones. Internamente son idénticos, excepto que el 8086 tiene una cola de 6 bytes para instrucciones y el 8088 de sólo 4. Exteriormente se diferencian en que el 8086 tiene un bus de datos de 16 bits y el del 8088 es de sólo 8 bits, por ello, el 8086 era más rápido. Por otro lado, el 8088 podía usar menos circuitos lógicos de soporte, lo que permitía la fabricación de sistemas más económicos.
El 8088 fue el microprocesador usado para la primera computadora personal de IBM, la IBM PC, que salió al mercado en agosto de 1981. Hay que tener en cuenta que la mayoría del hardware, de principios de los 80, era de 8 bits, y más barato. El hardware de 16 bits era casi inexistente en 1981 y carísimo.

El proyecto 8086 comenzó en mayo de 1976 y fue pensado originalmente como un sustituto temporal para el ambicioso y retrasado proyecto del iAPX 432. Era un intento de robar la atención de los menos retrasados procesadores de 16 y 32 bits de los otros fabricantes (tales como Motorola, Zilog, y National Semiconductor) y al mismo tiempo contrarrestar la amenaza del Zilog Z80, que llegó a ser muy exitoso (diseñado por anteriores empleados de Intel). Por lo tanto, tanto la arquitectura y el chip físico fueron desarrollados algo rápidamente por un pequeño grupo de personas, y usando los mismos elementos básicos de la microarquitectura y técnicas físicas de implementación que fueron empleadas para el ligeramente más viejo 8085 (y para el cuál el 8086 también funcionaría como una continuación).

Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje ensamblador en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII.
Mercadeado como compatible a nivel de código fuente, el 8086 fue diseñado de modo que el lenguaje ensamblador para el 8008, 8080, o el 8085 pudiera ser convertido automáticamente en (subóptimo) código fuente equivalente del 8086, con poca o ninguna edición a mano. Para hacer esto posible, el modelo de programación y el conjunto de instrucciones fueron (flojamente) basados en el 8080. Sin embargo, el diseño del 8086 fue ampliado para soportar el completo procesamiento de 16 bits, en vez de las bastante básicas capacidades de 16 bits del 8080/8085.

También fueron agregadas nuevas clases de instrucciones, compatibilidad para enteros con signo, direccionamiento de base + offset, y las operaciones auto-repetidas fueron semejantes a las del diseño del Z80,4 pero todas fueron hechas levemente más generales en el 8086. También fueron agregadas instrucciones que soportaban las funciones anidadas de la familia de lenguajes ALGOL tales como Pascal y PL/M. De acuerdo al principal arquitecto Stephen P. Morse, esto fue un resultado de un acercamiento más centrado en el software que en el que hubo en el diseño de procesadores anteriores de Intel (los diseñadores tenían experiencia trabajando con implementaciones de compiladores). Otras mejoras incluyeron instrucciones de multiplicación y división por microcódigo y una estructura de bus mejor adaptada para futuros coprocesadores (tales como el 8087 y el 8089) y a los sistemas de multiprocesadores.

La primera revisión del conjunto de instrucciones y la arquitectura de alto nivel estaba lista después de cerca de tres meses,5 y como no fue usada casi ninguna herramienta CAD, cuatro ingenieros y 12 personas de diagramación estaban simultáneamente trabajando en el chip.6 El 8086 tomó un poco más de dos años desde la idea hasta el producto trabajando, lo que fue considerado algo rápido para un complejo diseño en 1976-1978.

El 8086 fue secuenciado7 usando una mezcla al azar de lógica y microcódigo y fue implementado usando circuitería de depletion load nMOS con aproximadamente 20.000 transistores activos (29.000 contando todos los sitios del ROM y el PLA). Pronto fue movido a un nuevo proceso de fabricación refinado de nMOS llamado HMOS (por High performance MOS) que Intel desarrolló originalmente para la fabricación de productos de RAM estática rápida.8 Esto fue seguido por versiones de HMOS-II, HMOS-III, y, eventualmente, una versión completamente estática de CMOS para dispositivos energizados con baterías, manufacturados usando los procesos de CHMOS de Intel.9 El chip original midió 33 mm² y el mínimo tamaño fue de 3.2 µm.

La arquitectura fue definida por Stephen P. Morse con cierta ayuda y asistencia de Bruce Ravenel (el arquitecto del 8087) en refinar las revisiones finales. Los diseñadores de la lógica Jim McKevitt y John Bayliss fueron los ingenieros que encabezaban el equipo de desarrollo de nivel de hardware,10 y William Pohlma el gerente para el proyecto. La herencia del 8086 perdura en el conjunto de instrucción básico de los computadores personales y servidores de hoy; el 8086 también prestó sus últimos dos dígitos a posteriores versiones extendidas de diseño, tales como el Intel 286 y el Intel 386, todas las cuales eventualmente serían conocidas como la familia x86. (Otra referencia es que la identificación de vendedor del PCI para los dispositivos de Intel es 8086h!)
Unidad de interfaz del bus y unidad de ejecución

Diagrama de bloque de los microprocesadores Intel 8086 y 8088.
1 Bloque de registros de propósito general
2 Bloque de registros de segmento y registro IP
3 Sumador de direcciones
4 Bus de direcciones interno
5 Cola de instrucciones (4 bytes para el 8088 y 6 bytes para el 8086)
6 Unidad de control (muy simplificada)
7 Interfaz del bus
8 Bus de datos interno
9 Unidad aritmético lógica (ALU)
10, 11, 12 Bus de direcciones, datos y control externos


El 8086 y el 8088 tienen internamente dos componentes, la Unidad de Interfaz del Bus y la Unidad de ejecución (Bus Interface Unit (BIU) y Execution Unit (EU)).

La Unidad de Ejecución procesa las instrucciones del CPU. Está conformada por los registros generales, los registros índice y apuntadores, los flags, la unidad aritmético lógica, y la lógica de control que maneja todo el proceso para ejecutar las instrucciones.
La Unidad de Interfaz del Bus maneja la lectura y escritura desde y hacia la memoria y los puertos de entrada/salida. Está conformada por los registros de segmento, una cola de 4 bytes para instrucciones en el 8088 y de 6 en el 8086, y lógica para controlar los buses externos del microprocesador.
En la figura de la derecha, la Unidad de Ejecución se encuentra en la parte de abajo y la Unidad de Interfaz del Bus está en la parte superior. Las dos están interconectadas mediante un bus interno.

Registros
Registros de propósito general
AH      AL       AX (Acumulador)
BH      BL       BX (Base)
CH      CL       CX (Contador)
DH      DL       DX (Datos)
Registros índices
SI        Source Index (Índice origen)
DI        Destination Index (Índice Destino)
BP      Base Pointer (Puntero Base)
SP      Stack Pointer (Puntero de Pila)
Registro de Bandera
-   -    -     -   O    D   I  T  S  Z    -  A  -    P   -    C     Flags (Banderas)
Registros de Segmentos
CS      Code Segment (Segmento de Código)
DS      Data Segment (Segmento de Datos)
ES      ExtraSegment (Segmento Extra)
SS      Stack Segment (Segmento de Pila)
Registro apuntador de instrucciones
IP        Instruction Pointer

Modelo de los registros
Los registros del i8086 e i8088 se basaron en el diseño del Intel 8080 y el Intel 8085, y de hecho son compatibles a nivel de lenguaje ensamblador con el i8080. El conjunto de registros también es similar al del i8080, pero ampliados a 16 bits. Tanto el i8086 como el i8088 tienen cuatro registros de propósito general de 16 bits, que también pueden ser accedidos como ocho registros de 8 bits, y tienen cuatro registros índice de 16 bits (incluyendo el puntero de pila). Los registros de datos se usan a veces de forma implícita por las instrucciones, haciendo más difícil la organización de los registros para emplearlos con valores temporales.

Los registros del procesador, se usan para contener los datos con que se está trabajando puesto que el acceso a los registros es mucho más rápido que los accesos a memoria. Se pueden realizar operaciones aritméticas y lógicas, comparaciones, entre otras. Se pueden hacer estas operaciones con todos los registros excepto los de segmento, el IP, y los flags.

Registros de Propósito General
Los registros de propósito general son el AX, BX, CX, y DX, de 16 bits. Cada uno de ellos se divide en dos registros de 8 bits, llamados AH y AL, BH y BL, CH y CL, y, DH y DL, H significando High (alto) y L significando Low (bajo), indicando la parte alta o la parte baja del registro correspondiente de 16 bits (ver esquema). Un programa podía usar tanto los registros de 16 bits como los registros de 8 bits. Aparte del uso general de los registros para hacer cálculos aritméticos y lógicos, existen instrucciones que usan estos registros con un uso particular especializado, como se indica a continuación:

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, multiplicación y división (estas dos últimas en conjunto con el registro DX)
Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede ser un índice para direccionamiento indexado
Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits
Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el número de puerto de entrada/salida, y en las operaciones de multiplicación y división de 16 bits se utiliza junto con el acumulador AX
Registros Índice
Los registros SI y DI están disponibles para direccionamiento indexado y para operaciones de cadenas de caracteres.

Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas de caracteres. El SI está asociado con el segmento DS.
Registro DI: El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. El DI está asociado con el segmento ES.
Registros Apuntadores
Los registros SP (apuntador de pila) y BP (apuntador base) están asociados con el registro SS y permiten al sistema acceder a datos en el segmento de la pila.

Registro SP: El apuntador de pila de 16 bits está asociado con el segmento SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila. El sistema maneja de manera automática este registro, aunque el programa puede hacer ciertas manipulaciones con él.
Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros dentro de la pila.
Registros de Banderas
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la máquina y el resultado del procesamiento. Muchas instrucciones aritméticas y de comparación cambian el estado de las banderas y apoyándose en ellas se pueden tomar decisiones para determinar la acción subsecuente.

La tabla contiene 16 posiciones (de 0 a 15), que son los 16 bits del registro de banderas, numeradas de derecha a izquierda. La posición 0 la encontraremos a la derecha y la posición 15 a la izquierda.

-  -  -   -  OF   DF  IF  TF SF  ZF   -  AF   -    PF   -    CF
Los bits de las banderas son las siguientes:

OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números con signo (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera.
DF (dirección): Controla la selección de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.
IF (interrupción): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones). La interrupción no enmascarable es la única que no puede ser bloqueada por esta bandera. El estado de la bandera IF se controla con las instrucciones STI y CLI.
TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)
SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).
ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero).
AF (acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL después de una suma o resta BCD.
PF (paridad): Indica si el número de bits 1, del byte menos significativos de una operación, es par (0=número de bits 1 es impar; 1=número de bits 1 es par).
CF (acarreo): Contiene el acarreo del bit de mayor orden después de una operación aritmética; también almacena el contenido del último bit en una operación de desplazamiento o de rotación.

Registros de Segmento
Definen áreas de 64 Kb dentro del espacio de direcciones de 1 Mb del 8086. Estas áreas pueden solaparse total o parcialmente. No es posible acceder a una posición de memoria no definida por algún segmento: si es preciso, habrá de moverse alguno.

Registro CS: El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS. Esta dirección de segmento, más un valor de desplazamiento en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución. Para propósitos de programación normal, no se necesita referenciar el registro CS.

Registro DS: La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. Esta dirección, más un valor de desplazamiento en una instrucción, genera una referencia a la localidad de un byte específico en el segmento de datos.

Registro SS: El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en el registro SS. Esta dirección de segmento, más un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que está siendo direccionada. Para propósitos de programación normal, no se necesita referenciar el registro SS.

Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento para manejar el direccionamiento de memoria. El registro ES está asociado con el registro DI (Índice). Un programa que requiere el uso del registro ES puede inicializarlo con una dirección de segmento apropiada.
Registro Apuntador de Instrucciones



El registro IP de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se está ejecutando actualmente en la memoria.

jueves, 25 de agosto de 2016

Tipos de Lenguajes


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 numero 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 carácterí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





Figura - Relación entre las instrucciones de alto nivel, ensamblador y máquina.

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.

Lenguaje Intermedio

En ciencias de la computación, un lenguaje intermedio es el lenguaje de una máquina abstracta diseñada para ayudar a realizar el análisis de un programa informático. El término proviene de su uso en compiladores, donde el código fuente de un programa es traducido a un modo más apropiado para transformaciones de mejora de código antes de generar el código objeto o código máquina para una máquina determinada. El diseño del lenguaje intermedio difiere típicamente del lenguaje de máquina de tres maneras fundamentales:

Cada instrucción representa exactamente una operación fundamental; por ejemplo, los modos de direccionamiento "shift-add" (desplazar y añadir) comunes en microprocesadores no están presentes.
La información de la estructura de control puede no estar incluida en el juego de instrucciones.
El número de registros disponibles puede ser grande, incluso ilimitado.
Un formato popular para lenguajes intermedios es el de código de tres direcciones.

El término también es usado para referirse a lenguajes usados como intermedios por algunos lenguajes de alto nivel que no crean código objeto o código máquina por sí mismos, sino que solamente el lenguaje intermedio. Este lenguaje intermedio es enviado a un compilador para tal lenguaje, que genera el código objeto o código máquina finalizado. Esto se suele hacer para facilitar el proceso de optimización o para incrementar la portabilidad mediante el uso de un lenguaje intermedio que tenga compiladores para la mayoría de CPUs y sistemas operativos, como puede ser C. Los lenguajes usados para esto tienen una complejidad que se sitúa entre los lenguajes de alto y bajo nivel, como el lenguaje ensamblador.



miércoles, 24 de agosto de 2016

Compilador

Básicamente el Compilador consiste en un sistema que posibilita la transformación del Código Fuente, escrito por el usuario formando líneas de programación, hacia lo que se comprende como Código Objeto, de tal manera de que el "texto" que se programó pueda ser leíble e interpretado por el sistema o plataforma sobre lo cual se lo desea ejecutar. En este contexto, el compilador ayuda a visualizar errores, caso que hubieran, ya sean sintácticos o de semántica, y de ese modo, lograr que el programa fluya correctamente.

Cabe destacarse que el lenguaje que resulta es lo que se conoce como lenguaje de máquina, que consiste en un sistema de códigos plausible de ser interpretado por un circuito micro programable, tal es el caso del microprocesador de una computadora. Aunque también puede ser un código intermedio o solamente texto.
Ahora bien, la generación de un compilador informático implicará dos episodios centrales. Por un lado, el análisis del programa fuente y por el otro, la síntesis en relación al lenguaje objeto.


Lenguaje Maquina

El Lenguaje Maquina es el conjunto de datos que la parte física de la computadora (Hardware) es capaz de comprender e interpretar “El Código Binario” comprendido por los Valores 0 y 1 con tensiones comprendidas entre 0 y 4 Voltios y 4 y 5 Voltios respectivamente, la secuencias de estos valores formaran cadenas de información para que se realice una instrucción.

Este Lenguaje fue el primero empleado por el hombre en la programación de las primeras computadoras, con secuencias como esta 01101100101001001111 prácticamente se le decía a las computadoras que hacer, esto sera muy fácil de comprender para la maquina debido a que le hablamos en su propio “idioma” pero es muy difícil de comprender para nosotros. Indicarle a una Maquina lo que debe hacer es muy distinto que indicarle a un ser Humano lo que debe hacer, aunque sea la misma orden.

En los tiempos de desarrollo de la “Maquina” el Programador debía usar esta serie de combinaciones binarias para dictar ordenes siendo él mismo el traductor, poco después se pensó ¿Si se usara la misma maquina para traducir su propio código? con esto surgieron los llamados “Compiladores” y lo que se considera el segundo lenguaje de programación el Lenguaje “Ensamblador o Assambly”

El Lenguaje Ensamblador (Assambly) esta diseñado para una computadora especifica, es decir, en los lenguajes de alto nivel no se necesita conocer la arquitectura de una computadora para programar, en el Ensamblador si, se programara de manera mas correcta para una determinada familia de Microprocesadores.

Se paso de las complicadas cadenas de dígitos por palabras claves en nuestro idioma que despues serian traducidas por la misma computadora. Ejemplo.
¿Que seria mas fácil de comprender para ti?
Esto:
01000010010100100100010101001111010001110100000101001110010001110100000101001100
O esto:
BreoganGal

Sin lugar a dudas la segunda, seria de mas fácil compresión sin mencionar que la cadena es mas corta pero antes de que pronunciemos BreoganGal ya al computadora habrá procesado esa cadena ¡y quien sabe cuantas mas!.


El lenguaje Assambly permitió el avance y compresión de las computadoras preparando el camino para que posteriormente salieran a la luz los llamados Lenguajes de alto Nivel que facilitarían aun mas el trabajo, pero el Assamby sigue siendo un lenguaje muy util y directo a la hora conectarse con la computadora, indispensable para crear los Sistemas operativos y diversas piezas que conforman el Hardware.



martes, 23 de agosto de 2016

Entornos de desarrollo integrado (IDE) para lenguaje ensamblador



Entornos de desarrollo integrado (IDE) para MASM, FASM, GoASM

1. WinAsm


WinAsm Studio es un entorno de desarrollo integrado (IDE) gratuito para desarrollar programas en Windows 32-bit y DOS 16-bit utilizando Microsoft Macro Assembler MASM y FASM utilizando el Add-In para FASM. Ha sido escrito por Antonis Kyprianou (akyprian).

2. Easy Code


Entorno visual de desarrollo en lenguaje ensamblador.


Easy Code es el entorno visual de programación en ensamblador hecho para generar aplicaciones de 32 bits para Windows. La interfaz de Easy Code, muy parecida a la de Visual Basic, le permite programar una aplicación en ensamblador de manera rápida y fácil como nunca antes había sido posible.


 3. RadASM


RadASM es un IDE gratuito para ensambladores de 32 bits para Windows.


Soporta masm, tasm, fasm, nasm, goasm y hla


Fuente: https://www.clubdelphi.com/foros/showthread.php?t=55787

4. Fresh IDE

Es un IDE visual para el lenguaje ensamblador con un compilador integrado Flat assembler (FASM). Está escrito en Fresh IDE y es una aplicación independiente compilable. Es totalmente compatible con FASM y puede ser compilado también con todas las versiones de FASM. El objetivo principal de Fresh IDE es hacer la programación en ensamblador tan rápido y eficiente como en los lenguajes de alto nivel, sin sacrificar el tamaño de una pequeña aplicación que potencia el lenguaje ensamblador. Se trata de una aplicación Windows, pero se ejecuta en Wine muy bien y puede crear, compilar, depurar y ejecutar aplicaciones para Windows y Linux en Windows y Linux. Descarga aquí.

5. Assembler IDE

Se trata de un entorno de desarrollo para código ensamblador, cuyo propósito es automatizar al máximo este proceso integrando el editor de código, el depurador (debugger) y el desensamblador.

Entre las posibilidades que nos ofrece el entorno Assembler IDE, destacan la depuración de código (debugging), el editor de código, el desensamblador o la compilación con NASM, TASM/MASM y FASM.

Como puedes comprobar se trata de una herramienta de lo más completita.

Y no dejes que te intimide el hecho de que el programa Assembler IDE esté únicamente disponible con los textos que aparecen en pantalla en idioma inglés, ya que sus desarrolladores han diseñado una interfaz de usuario que resulta muy clara, sencilla e intuitiva, de tal manera que cualquiera que se ponga a los mandos de esta aplicación la encontrará de lo más accesible.

Y no queremos poner el punto y final a esta reseña sin mencionar el que, sin lugar a dudas, será uno de los aspectos más interesantes y atractivos del programa: su inmejorable precio. Y es que, como estamos ante una aplicación que se distribuye mediante licencia "freeware", podremos descargar Assembler IDE gratis.