10 clase ensamblador leng ensamblador y directivas

Upload: andres-grimaldo

Post on 03-Mar-2016

9 views

Category:

Documents


0 download

DESCRIPTION

Guia CLase ensamblador en lenguaje maquina y practica de directivas con ejemplos practicos para la participacion de los estudiantes en clase

TRANSCRIPT

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    Requerimientos en Lenguaje Ensamblador

    Un programa en ensamblador es un conjunto de enunciados. I. Comentarios en Ensamblador: Se realizan al final de cada lnea comenzando por el ; Ejemplo: ; esto es un ejemplo ADD AX,BX ; guardo en AX la suma de los valores de los dos registros AX y BX. II. Palabras reservadas: Como todo lenguaje el ensamblador posee sus palabras reservadas, las cuales son de uso exclusivo de l. Nunca pueden ser utilizadas en la programacin. Las categoras de las palabras reservadas son:

    Instrucciones: MOV , ADD , Etc. Operaciones a realizar Directivas: SEGMENT, PROC, Etc. utilizadas para proporcionar comandos en ASM Operadores: FAR, SIZE , DUP , SEG , Etc. Se utilizan en expresiones Smbolos predefinidos: @Data , @Model , Etc. regresan informacin al programa III. Identificadores: Son los nombres que se escogen para darle a elementos dentro del programa. En ensamblador se manejan dos tipos de identificadores: Nombre: Utilizado para referirse a la direccin de elemento de dato. (Elemento o Directiva) Etiqueta: Utilizado para referirse a la direccin de una instruccin. (Instruccin) Caracteres utilizados para los identificadores:

    Letras de a-z o A-Z para el no hay diferencias entre maysculas y minsculas.

    Nmeros del 0 al 9 pero no pueden empezar por este dgito.

    Caracteres especiales como: ?, _ , $ , @ y . Este . no puede ser el 1 carcter El tamao mximo es de 31 caracteres.

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    IV. Instrucciones: Es un conjunto de enunciados que conforman un programa en ensamblador. Existen dos tipos de enunciados: a) Instrucciones las cuales se pasan a cdigo objeto. MOV , ADD , SUB , etc b) Directivas las cuales realizan una funcin especifica como inicializar un elemento de dato. .DATA .CODE etc Formato general de un enunciado: Los que estn en [ ] son opcionales.

    [ Identificador ] Operacin [ Operando(s) ] [ ; Comentarios ] Ejemplos: COUNT DB 1 ; Elemento nombre count MOV AX,BX ; Sume AX con BX RET ; Regresar V. Directivas: Solo actan durante el ensamblado de un programa y no generan cdigo ejecutable de mquina. PAGE: Designa el nmero mximo de lneas para listar en una pgina y el nmero mximo de caracteres en una lnea. Sus valores por defecto son de 50,80. El nmero mximo de lneas por pgina es de 255 y de caracteres por lnea es de 132. Sintaxis: PAGE [ Longitud ] , [ Ancho ]

    Nota: PAGE solo dentro del ensamblador hace que el programa salte a la siguiente pgina a partir de encontrar esta directiva y no realizando las instrucciones que seguan despus de l. TITLE: Es el ttulo para el programa. Sintaxis: TITLE [ Nombre del programa ] SEGMENT: Es la directiva en la cual se definen los diferentes segmentos de ensamblador. Todo segmento finaliza con la directiva ENDS. C/U segmentos es de un mximo de 64K Sintaxis:

    [Nombre] SEGMENT [ Alineacin ] [ Combinar ] [Clase ] Por lo general los segmentos que mas se manejan son los de datos, pila y cdigo. Nombre: Indica el nombre al segmento, puede ser cualquier nombre en particular, por lo general se manejan los utilizados por ensamblador como lo son:

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    STACKSG DATASG CODESG Alineacin: Indica el limite donde inicia el segmento por lo general se deja PARA, debido a que l reconoce el limite de prrafo donde iniciara el segmento, pero puede ser: BYTE: Siguiente direccin WORD: Siguiente direccin par (divisible entre 2) DWORD: Siguiente direccin de palabra doble (divisible entre 4) PARA: Siguiente prrafo (Divisible entre 10H sea 16) PAGE: Siguiente direccin de pgina (Divisible entre 100H sea 256) Combinar: Indica si el segmento se combina con otros segmentos, indicando la manera en que el enlazador maneja el segmento. Los valores que puede tomar son: STACK (Utilizado para enlazar con el segmento de pila) PUBLIC COMMON Clase: Ayuda al enlazador a asociar segmentos con diferentes nombres, identificar segmentos y controlar su orden. Se utilizan para agrupar segmentos cuando se enlazan, se encierran entre apstrofes. Code para el segmento de cdigo. Data para el segmento de datos. Stack para el segmento de pila. Ejemplo: Inisegmento SEGMENT PARA .... .... Inisegmento ENDS PROC: Es la que define los procedimientos a seguir, por lo general esta dentro del segmento de cdigo. Todo procedimiento debe tener un nombre y cumplir con dichas normas. Todo procedimiento finaliza con la directiva ENDP. Para un programa .exe el PROC principal que es el punto de entrada debe ser FAR. Ejemplo: procUno PROC FAR (FAR indica al DOS la primera instruccin a ejecutar.) ... ... procUno ENDP Mas adelante veremos llamadas a procedimientos cercanos (Near) o lejanos (Far) con CALL

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    ASSUME: Es la directiva que define cada uno de los segmentos con los nombres colocados a cada uno de los segmentos para su funcionamiento dentro del programa. Realiza la asociacin de nombres con los segmentos. Ejemplo: ASSUME SS:SegPila , CS: SegCodigo , DS: SegDatos , ES: SegExtra , FS:NOTHING. Se puede omitir END: Directiva que finaliza todo el programa realizado en ensamblador. Ejemplo: END BEGIN finaliza programa y vuelve el control al procedimiento llamado BEGIN. EQU: No define elementos de datos, solo redefine. Es utilizada para inicializar una constante que ensamblador utilizar para sustituir en otras instrucciones.

    Ejemplo Total PAGE 60,120 TITLE Programa de Ensamblador PILA SEGMENT PARA STACK 'stack' .......... PILA ENDS DATOS SEGMENT PARA 'data' VAR1 DW ? VAR2 DW 1010B VAR3 DW 205 DATOS ENDS CODIGO SEGMENT PARA 'code' BEGIN PROC FAR ASSUME SS:PILA,SD:DATOS,SC:CODIGO MOV AX,DATOS Ojo inicializamos con la dir. del SD MOV DS,AX ya que la dir. SC y SS las carga DOS de manera automtica. MOV AX,0C345H MOV BX,34ECH ADD AX,BX MOV VAR1,AX MOV AX,VAR5 ADD AX,VAR2 MOV VAR6,AX MOV BX,VAR3 SUB VAR4,AX INC BX DEC AX PUSH AX PUSH BX

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    MOV AX,9999H POP AX POP BX MOV AX,4C00H INT 21 BEGIN ENDP CODIGO ENDS END Para la casa Analizar los ejemplos de las pginas 56 y 58.

    DIRECTIVAS SIMPLIFICADAS DE SEGMENTOS El lenguaje ensamblador permite la utilizacin de unas directivas especiales que hacen de manera resumida la inicializacin de los segmentos a utilizar. De manera inicial se debe inicializar el modelo de memoria antes de definir algn segmento, por ejemplo: .MODEL [ modelo de memoria ] Recuerde que los segmentos son de 64K Modelo de memoria # de segmentos de cdigo # segmentos de datos Tiny * * Small 1 1 Medium Ms de 1 1 Compac 1 Ms de 1 Large Ms de 1 Ms de 1 Huge Ms de 1 Ms de 1 Tiny es para uso exclusivo de programas .COM La diferencia de Large a Huge es en los arreglos del segundo se pueden superar los 64K

    La directiva .MODEL define de manera AUTOMATICA la directiva ASSUME Los nombre para los segmentos simplificados son: Segmento de Datos DS .Data Segmento de Pila SS .Stack Segmento de Cdigo CS .Code Observe muy detalladamente el cuadro de comparacin entre el uso de directivas tradicional y usando directivas simplificadas.

    Directivas Tradicionales Directivas Simplificadas

    Page 60,132

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    Directivas Tradicionales Directivas Simplificadas

    TITLE Programa de Assembler

    ; ------------------------------------------------------ .MODEL SMALL

    SegPila SEGMENT PARA STACK stack .STACK 64

    SegPila ENDS ; --------------------------------------------------

    ; ------------------------------------------------------ ; --------------------------------------------------

    SegDatos SEGMENT PARA data .DATA

    SegDatos ENDS V1 db 2

    ; ------------------------------------------------------ V2 dw 3,4,5

    SegCodigo SEGMENT PARA code .CODE

    BEGIN PROC FAR inicio PROC NEAR

    ASSUME SS:SegPila,DS:SegDatos,CS:Segcodigo ; --------------------------------------------------

    MOV AX,SegDatos MOV AX,@data

    MOV DS,AX MOV DS,AX

    MOV AX,123AH

    MOV BX,0C345H

    ADD AX,BX

    MOV AX,4C00H MOV AX,4C00H

    INT 21H INT 21H

    BEGIN ENDP inicio ENDP

    Segcodigo ENDS ; --------------------------------------------------

    END BEGIN END

    Explicacin del cuadro de comparacin linea por linea Linea 1 Definicin del nmero de lineas * pagina y caracteres * linea Linea 2 Titulo del programa Linea 3 Comentarios y Inicio del modelo de memoria a manejar .SMALL Linea 4 Inicio del segmento de pila tradicional y con la directiva simplificada Stack Linea 5 Cierre del segmento de pila tradicional y Comentarios Linea 6 Comentarios Linea 7 Inicio del segmentos de datos tradicional y con la directiva .Data Linea 8 Cierre del segmento de datos tradicional y Comentarios Linea 9 Comentarios Linea 10 Inicio del segmentos de cdigo tradicional y con la directiva .Code Linea 11 Inicio del proceso principal del programa Linea 12 Relacin de los segmentos con sus registros de segmentos tradicional Linea 13 Cargar la dir. Seg. Datos en el AX con Segdatos y en el otro con @Data Linea 14 Copia la dir al DS Linea 15 Inicializa el AX con el valor 123AH Linea 16 Inicializa el BX con el valor 0C345H Linea 17 Suma el AX, BX

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    Linea 18 Mueve el 4C al AH para hacer una llamado a una rutina del DOS Linea 19 Invoca la interrupcin de finalizar programa con el valor del AH Linea 20 Finaliza el procedimiento principal Linea 21 Finaliza el Segmento de cdigo y comentarios Linea 22 Finaliza el programa

    DEFINICION DE DATOS EN ENSAMBLADOR

    Como cualquier otro tipo de lenguaje en ensamblador tambin se inicializan variables con una determinada longitud, existen diferentes tipos de longitudes. Para inicializar un dato la sintaxis general es: [ nombre del dato ] D[ n ] [ expresin o valor de inicio ] Los nombres deben cumplir con las reglas de definicin de nombres! Los tipos de datos son los siguientes: DB Define un dato tipo Byte DW Define un dato tipo 2 Bytes (palabra) DD Define un dato tipo 4 Bytes (palabra doble) DF Define un dato tipo 6 Bytes (palabra larga) DQ Define un dato tipo 8 Bytes (palabra cuadruple) DT Define un dato tipo 10 Bytes

    La expresin o valor puede ser: ? cuando no se desea inicializar con un valor vaco # con un valor que sea de un mximo de su longitud permitido constante. #, #, ... con una serie de valores limitados por su longitud mxima permitida y el nmero de lneas manejadas. Definir Bytes DB Su valor mximo es de 8 bits o 2 dgitos hexadecimales. Su valor mximo es FF(16) = 255(10) = 11111111(2) en total pero se parte en dos + y - 7F(16) = 127 (10) 80(16) es adelante se manejan como nmeros negativos. Definir una palabra Word DW Su valor mximo es de 16 bits o 4 dgitos hexadecimales. Su valor mximo es FFFF(16) = 65535(10) = 11111111 11111111(2) en total pero se parte en dos + y -

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    7FFF(16) = 32767 Definir una palabra doble DWORD DD Su valor mximo es de 32 bits o 8 dgitos hexadecimales. Su valor mximo es FFFF FFFF(16) =4294967295(10) = 11111111 11111111 11111111 11111111 en total pero se parte en dos + y - 7FFF FFFF(16) = 2147483647 (10) Definiruna palabra larga FWORD DF Su valor mximo es de 48 bits o 14 dgitos hexadecimales. Definir palabra cuadruple QWORD DQ Su valor mximo es de 64 bits o 16 dgitos hexadecimales. Definir diez bytes TBYTE DT Su valor mximo es de 80 bits o 40 dgitos hexadecimales.

    CONSTANTES NUMRICAS

    Decimal: Son los dgitos del 0 9 y que pueden terminar (opcional) con la letra D. Internamente el maneja cdigo binario pero los muestra en cdigo hexadecimal. Ejemplo: 125 o 125D Binaria: Son los dgitos 0 y 1 seguidos del especificador B. Internamente el pc maneja este cdigo binario. Ejemplo: Hexadecimal: Son los dgitos del 0 9 y A F, seguidos del especificador H. Internamente el maneja cdigo binario pero los muestra en este cdigo hexadecimal. Debido a que el ensamblador siempre espera que una referencia comience con una letra las constantes numricas de este tipo que inicien con una letra se les debe anteponer el 0. Ejemplo: 2FAH 0FF34H Algunos ejemplos: TIPO BYTE variable1 DB ? Variable de 1 byte vaca variable2 DB 23 Variable de 1 byte con valor 23 decimal variable3 DB 18H Variable de 1 byte con valor 18 Hexadecimal

  • Fuentes Libros e Internet

    c.MATI E.I.S. Miguel Fabian Robles A. Material de Apoyo Ing. Sistemas www.robgon.net

    variable4 DB 11110101B Variable de 1 byte con valor binario variable5 DB 8 DUP (2) Variable de 1 byte con 8 bytes con valor de 2 variable6 DB hola Variable de 1 byte con cadena 'hola como estas' variable7 DB 456773 Variable de 1 byte con cadena de nmeros variable8 DB 01, nero, 02, Febrero, 03 Marzo... Variable de 1 byte con tabla de nmeros y cadenas TIPO WORD variable9 DW DDAAFFEEH Variable de 2 bytes con valor hexadecimal variable10 DW 101010101011B Variable de 2 bytes con valor binario TIPO DWORD variable12 DD 7, 4, 2, 1 Variable de 4 bytes para cada nmero 4 bytes para el 7, 4 bytes para el 1, etc TIPO FDWORD variable12 DF 34AAFFEEH

    TIPO QWORD variable12 DQ 12568 TIPO TBYTE variable12 DT Ensamblador