21
INTRODUCCION

manual de ensamblador-tasm

Embed Size (px)

DESCRIPTION

este manual te permitira conocer mas acerca del complicado lenguaje de ensamblador

Citation preview

Page 1: manual de ensamblador-tasm
Page 2: manual de ensamblador-tasm

INTRODUCCION

El documento que está visualizando tiene la función primordial de introducirlo a la programación en lenguaje Ensamblador, y está pensado en aquellas personas que nunca han trabajado con este lenguaje y probablemente con ningún otro.

El tutorial se considera como una facilidad ya que el ensamblador basa su funcionamiento en los recursos internos del procesador, los ejemplos descritos no son compatibles con ninguna otra arquitectura.

Se estructura la información en forma de unidades para permitir el fácil acceso a cada uno de los típicos y facilitar el seguimiento del tutorial.

En la sección introductoria se mencionan algunos de los conceptos elementales acerca de los sistemas de cómputo así como del ensamblador mismo, y continúa con el tutorial propiamente dicho.

DEFINICIONES BASICAS

El lenguaje ensamblador, es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, micro controladores, 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. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico a cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro ensambladores.

Page 3: manual de ensamblador-tasm

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido.

Muchos dispositivos programables (como el micro controlador) aún cuentan con el ensamblador como la única manera de ser manipulados.

LENGUAJE DE MÁQUINA

Lenguaje de máquina es el sistema de códigos directamente interpretable por un circuito micro programable, como el microprocesador de una computadora o el micro controlador de un autómata (un PLC) . Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa de computadora consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas.

LENGUAJE ENSAMBLADOR

El lenguaje ensamblador, es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, micro controladores, 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. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico a cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables.

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.

Page 4: manual de ensamblador-tasm

PROCESAMIENTO DE ENSAMBLADO Este ensamblador es de dos pasadas. Durante la primera pasada, el programa origen se lee para desarrollar la tabla de símbolos.

Durante la segunda pasada el archivo objeto se crea (ensamblado) con referencia a la tabla desarrollada en la primera pasada.

Durante la segunda pasada se crea el listado del programa origen.

Cada enunciado origen se procesa completamente antes de que el enunciado siguiente se lea.

A medida que el enunciado se procesa el ensamblador examina los campos de etiqueta, de código de operación y de operados.

La tabla de códigos de operación se revisa para encontrar un código operacional similar.

Durante el procesamiento de un mnemónico correspondiente a un código de operación normal, el código máquina normal se inserta en el archivo objetivo.

La acción buscada por una directriz del ensamblador ocurre durante el procesamiento de dicha directriz.

Cualquier error que detecta el ensamblador se muestra justamente antes de la línea que contiene dicho error.

Aún y cuando no se desee producir un listado origen, los errores se despliegan para indicar que el procesamiento de ensamblado no se llevó a cabo de manera normal.

VENTAJAS DEL ENSAMBLADOR

La primera razón para trabajar con ensamblador es que proporciona la oportunidad de conocer más a fondo la operación de su PC, lo que permite el desarrollo de software de una manera más consistente.

La segunda razón es el control total de la PC que se tiene con el uso del mismo.

Otra razón es que los programas de ensamblador son más rápidos, más compactos y tienen mayor capacidad que los creados en otros lenguajes.

Por último el ensamblador permite una optimización ideal en los programas tanto en su tamaño como en su ejecución.

Page 5: manual de ensamblador-tasm

ESTRUCTURA DE UN PROGRAMA

La estructura de un programa está conectada con:

Los ficheros de código fuente llevarán la extensión *.ASM

Los ficheros de listado llevarán la extensión *.LST

Los ficheros de código objeto llevarán la extensión *.OB]

Los ficheros de errores llevarán la extensión *.ERR

Los ficheros ejecutables en formato Intel Hex llevarán la extensión *.HEX

Comentario descriptivo del programa (utilizar una cabecera estandarizada).

Definir el micro controlador que se usará (con las directivas LIST e INCLUDE).

Introducir las opciones de compilación (que serán vistas más adelante) (opcional).

Establecer las constantes que se usarán (con la directiva EQU).

Reservar espacios de memoria (directiva RES) (si es necesario).

Configurar los puertos.

Desarrollar el programa con comentarios, en lo posible explicando cada línea de código.

Los mnemónicos escritos en minúscula y las constantes y variables en mayúscula hacen que el código escrito sea más visible.

Colocar las rutinas en el mismo sitio, todas contiguas.

Dibujar diagramas de flujo o escribir seudocódigo.

EJEMPLO 1: ESTRUCTURA DE UN PROGRAMA muy simple:

Page 6: manual de ensamblador-tasm

EJEMPLO 2: POSICION DE LOS ELEMENTOS DEL CODIGO

Etiquetas. Las etiquetas se rigen por las siguientes normas:

Debe situarse en la primera columna.

Page 7: manual de ensamblador-tasm

Debe contener únicamente caracteres alfanuméricos.

El máximo de caracteres es de 31.

Operación. En esta columna se situarán las instrucciones. El campo del código de

operación es el único que nunca puede estar vacío; éste siempre contiene una instrucción o una directiva del ensamblador.

Operandos El campo de operandos o de dirección puede contener una dirección o

un dato, o puede estar en blanco. Normalmente contendrá registroso literales con los que se operará (f, l ok , b y w).

Comentario. El campo del comentario o de etiquetas es opcional. Aquí se situará

cualquier comentario personalizado que deseemos. Estos son útiles para saber qué hace un programa sin tener que descifrar el código entero. El compilador (ensamblador) ignorará todo texto más allá del carácter punto y coma ";".

Los comentarios generalmente se sitúan en la cuarta columna para describir la acción de una línea de código, pero pueden situarse en cualquier parte de programa para describir cualquier otro evento, siempre que estén después del carácter ";" (semiculto en inglés).

Delimitadores (separación entre campos)

Los campos van separados sólo con espacios y/o tabulaciones. No agregue nunca otros caracteres (comas, puntos, etc.)

No utilice espacios extra, particularmente después de comas que separan operandos.(Ej.: movlw 5, w )

No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.

ESTRUCTURA DE UN LENGUAJE ENSAMBLADOR

CAMPOS DE UNA INSTRUCCIÓN EN ENSAMBLADOR

Page 8: manual de ensamblador-tasm

Etiqueta

Identifica la línea en la cual se encuentra.

Se asocia a la dirección en la cual se encuentra la instrucción o el dato, o a la constante definida.

Recomendaciones

Utilizar sólo letras o números (comenzar por una letra).

Colocar la primera letra de la etiqueta en el primer carácter de la línea.

Nemotécnico

Identifica:

Un código de operación del lenguaje

Una pseudoinstrucción

*Campo de operandos

Identifica los operandos que intervienen en la instrucción o pseudoinstrucción.

Tipos de operandos:

Constantes

Numéricas: decimales (D), binarias (%,B), octales (O,@,Q,C),

Hexadecimales (H,$).

Alfabéticas: entre comillas.

Símbolos

Predefinidos: registros, contador de dirección de ensamblado.

Implícitos: etiquetas de dirección.

Explícitos: mediante pseudoinstrucciones.

Expresiones

Comentarios

Indicaciones para una mejor comprensión del programa ensamblador.

Pueden comenzar con el símbolo “;”.

Estructura y Tecnología de Computadores I

Page 9: manual de ensamblador-tasm

Estructura de un lenguaje ensamblador -3-

PSEUDOINSTRUCCIONES

Manipulación del contador de dirección de ensamblado

Indica la dirección a partir de la cual se localizan los datos o instrucciones acontinuación.

Ej. : ORG operando

Definición de símbolos

Da un valor a un símbolo.

Ej.: ETIQ EQU expresión

Reserva de espacio en memoria (definición de variables)

Con valor inicial: reserva espacio para los datos indicados en la lista deexpresiones, y les pone los valores iniciales indicados (tamaño de cada dato:S=B,W ó L).

Ej. : ETIQ DC.S expr1, expr2,…,exprN

Sin valor inicial: reserva espacio para tantas variables como se indica en laexpresión (tamaño de cada dato: S=B,W ó L).

Ej.: ETIQ DS.S expresión

Control de traducción

Marca el final del programa fuente

Ej.: END

Almacenamiento en posición par

Hace que el siguiente objeto se almacene a partir de la próxima posición dememoria con dirección par.

Ej.: EVEN

Enlace entre programas

Indicación de símbolos externos: EXT, REF, XREF, EXTERNAL.

Indicación de símbolos exportables: ENT, DEF, XDEF, PUBLIC.

Acciones de ensamblado condicional

Incluyen en el ensamblado o no grupos de instrucciones del programa fuente.

Page 10: manual de ensamblador-tasm

Ej.: IF…ELSE… ENDIF

Ejecución de listados e informes

Título para la cabeceras: TITLE, NAME.

Salto de página: PAGE, SPAGE.

Impresión u omisión de parte del programa fuente: LIST, NOLIST.

Inclusión de la tabla de símbolos: SYMBOL, TABLE.

INTRODUCCION BASICA DEL LENGUAJE ENSAMBLADOR

Instrucciones lógicas. Son utilizadas para realizar operaciones lógicas sobre los operando.

AND

Propósito: Realiza la conjunción de los operandos bit por bit.

Sintaxis: AND destino, fuente

Con esta instrucción se lleva a cabo la operación "y" lógica de los dos operando.

El resultado de la operación se almacena en el operando destino.

NEG

Propósito: Genera el complemento a 2

Sintaxis: NEG destino

Esta instrucción genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Por ejemplo, si AX guarda el valor de 1234H, entonces:

NEG AX

Nos dejaría almacenado en el registro AX el valor EDCCH.

NOT

Propósito: Lleva a cabo la negación bit por bit del operando destino.

Page 11: manual de ensamblador-tasm

Sintaxis: NOT destino

El resultado se guarda en el mismo operando destino.

OR

Propósito: OR inclusivo lógico

Sintaxis: OR destino, fuente

La instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos operados.

TEST

Propósito: Comparar lógicamente los operandos

Sintaxis: TEST destino, fuente

Realiza una conjunción, bit por bit, de los operandos, pero a diferencia de AND esta instrucción no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas.

XOR

Propósito: OR exclusivo

Sintaxis: XOR destino, fuente

Su función es efectuar bit por bit la disyunción exclusiva lógica de los dos operandos.

Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los operando.

ADC

Propósito: Adición con acarreo.

Sintaxis: ADC destino, fuente

Page 12: manual de ensamblador-tasm

Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF esté activada, esto es, en caso de que exista acarreo.

El resultado se guarda en el operando destino.

ADD

Propósito: Adición de los operandos.

Sintaxis: ADD destino, fuente

Suma los dos operandos y guarda el resultado en el operando destino.

DIV

Propósito: División sin signo

Sintaxis: DIV fuente

El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción.

Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX: AX, tomando como palabra alta DX y como baja AX.

Si el divisor fue un byte el cociente se almacena en el registro AL y el residuo en AH, si fue una palabra el cociente se guarda en AX y el residuo en DX.

IDIV

Propósito: División con signo

Sintaxis: IDIV fuente

Consiste básicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo.

Para sus resultados utiliza los mismos registros que la instrucción DIV.

MUL

Page 13: manual de ensamblador-tasm

Propósito: Multiplicación sin signo

Sintaxis: MUL fuente

El ensamblador asume que el multiplicando será del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits.

Cuando se realiza una multiplicación con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicación es con valores de 16 bits el resultado se almacena en el registro par DX: AX.

IMUL

Propósito: Multiplicación de dos enteros con signo.

Sintaxis: IMUL fuente

Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican.

Los resultados se guardan en los mismos registros que en la instrucción MUL.

SBB

Propósito: Substracción con acarreo

Sintaxis: SBB destino, fuente

Esta instrucción resta los operandos y resta uno al resultado si CF está activada. El operando fuente siempre se resta del destino.

Este tipo de substracción se utiliza cuando se trabaja con cantidades de 32 bits.

SUB

Propósito: Substracción

Sintaxis: SUB destino, fuente

Page 14: manual de ensamblador-tasm

Resta el operando fuente del destino.

EJERCICIOS:

SUMA, RESTA, MULTIPLICACION, DIVISION.

SUMAR NUMEROS EN LENGUAJE ENSAMBLOR

.model small

.stack

.data var1 db ?.code.startup

mov ah,01hint 21h

sub al,30hmov var1,al

mov ah,01hint 21hsub al,30hadd al,var1

mov dl,aladd dl,30hmov ah,02h

Page 15: manual de ensamblador-tasm

int 21h.exitEnd

RESTAR NUMEROS EN LENGUAJE ENSAMBLADOR

.model small

.stack

.data var1 db ?.code.startupmov ah,01hint 21hsub al,30hmov var1,al

mov ah,01hint 21hsub al,30hsub al,var1mov dl,aladd dl,30hmov ah,02hint 21h.exitend

Page 16: manual de ensamblador-tasm

MULTIPLICACION DE LENGUAJE ENSAMBLADOR

.model small

.stack

.data

var1 db ?.code.startup

mov ah,01hint 21hsub al,30hmov var1,al

mov ah,01hint 21hsub al,30hmul byte ptr [var1]

mov dl,aladd dl,30hmov ah,02hint 21h

.exitEnd

DIVISION DE LENGUAJE ENSAMBLADOR

Page 17: manual de ensamblador-tasm

invokewrite, addr num1 ;mensaje del primer valor call leer ;lee un numeromovEbx,numero ;muevo al a bl invokewrite, addrsaltinvokewrite, addr num2 ;mensaje del segundo valor

call leer ;lee un numeromovEax,EbxmovEbx,numerodiv Ebx ;sumo bl / almovnumero,Eax ;respaldomovEbx,Edx invokewrite, addrsalt

invokewrite, addr res ;mensaje del resultado

call mostrar ;muestra el resultado

invokewrite, addrresi;mensaje de residuo

movnumero,Ebxcall mostrar ;muestra el residuo

callreadc ;espero a que presione tecla

jmp repite

LINKOGRAFIAhttp://es.wikipedia.org/wiki/Compilador

http://usuarios.multimania.es/patricio/ensam/ensam1.htm

http://www.pro-gramas.com/scripts/Calculadora-de-32bits-suma,-resta,-multiplica,-divide-en-ensamblador-43-26.html

http://www.monografias.com/trabajos76/estructura-programa-ensamblador/estructura-programa-ensamblador.shtml