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.