14 DIRECTIVAS

download 14 DIRECTIVAS

of 32

Transcript of 14 DIRECTIVAS

  • 8/18/2019 14 DIRECTIVAS

    1/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 1/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14-DIRECTIVAS

    14.1 INTRODUCCIÓN:

    Las directivas o pseudooperaciones se pueden dividir en cuatro grupos

    funcionales:

    !  Directivas de datos.

    !  Directivas condicionales.

    !  Directivas de listado.

    !  Directivas de macros.

    14.2 DIRECTIVAS DE DATOS:

    A su vez se dividen en seis categorías_

    !  Definición de símbolos: Sirven para asignar nombres simbólicos a

    expresiones

    !  EQU = Asigna un símbolo a una expresión fija.

    !  = = Asigna un símbolo a una expresión variable.

    !  Definición de datos: Sirven para reservar memoria para las variables

    del programa. Opcionalmente se puede dar un valor inicial a cada

    variable.

    !  DB = Definir byte.

    !  DW = Definir palabra.

    !  DD = Definir doble palabra.

    !  DQ = Definir cuádruple palabra.

    !  DT = Definir 10 bytes.

    !  Referencias Externas: Hacen referencia a información que se

    encuentra en módulos o ficheros distintos.

    !  PUBLIC = Definir símbolo público.

    !  EXTRN = Definir símbolo externo

    !  INCLUDE = Incluir fichero fuente.

  • 8/18/2019 14 DIRECTIVAS

    2/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 2/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    !  Control del ensamblador:

    !  END = Fin del módulo fuente.

    !  ORIGIN = Origen de código o datos

    !  EVEN= Poner contador de posiciones en número par.

    !  .RADIX = Base de numeración por defecto.

    !  Definición de segmentos y procedimientos:

    !  SEGMENT = Comienzo de segmento.

    !  ENDS = Fin de segmento o de estructura.

    !  ASSUME = Suponer registro de segmento.

    !  PROC = Comienzo de procedimiento.

    !  ENDP = Fin de procedimiento.

    !  Definición de bloques:

    !  GROUP = Agrupar segmentos.

    !  NAME = Nombre de un módulo.

    !  LABEL = Asigna un atributo a un nombre.

    !  RECORD = Definir registro.

    !  STRUC = Definir estructura.

    14.3 DIRECTIVAS CONDICIONALES:  Sirve para que el ensamblador 

    ejecute ciertos grupos de instrucciones según una condición sea cierta o falsa.

    Estas directivas son del tipo Ifxxx else endif con la siguiente estructura:

    IF [condición]

    .......

    .......

    ELSE

    .......

    .......

    ENDIF

  • 8/18/2019 14 DIRECTIVAS

    3/32

  • 8/18/2019 14 DIRECTIVAS

    4/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 4/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.5 DIRECTIVAS DE MACROS:  Una macro es un conjunto de

    sentencias ensamblador (directivas y/o instrucciones) que pueden aparecer 

    varias veces en un programa con algunas modificaciones opcionales cada vez

    que se usan. Para evitar el tener que teclear estas repeticiones a la hora deprogramar, se definen las macros a las que se puede invocar desde el

    programa con diferentes valores para los parámetros. Esto sólo ocurre en

    tiempo de programación, porque al ensamblar el fichero, dichas macros se

    expanden dentro del código. A este proceso se le llama “expansión de la

    macro” y tiene lugar en todos los puntos del programa donde se utilice la

    macro, por ello se recomienda que el tamaño de estas macros sea pequeño.

    Las macros se definen mediante la directiva MACRO precedida del nombre de

    la macro y seguida por los nombres de los operandos que necesita separados

    por comas. En líneas sucesivas se colocarán las instrucciones de la macro,

    pudiéndose colocar como operandos de ellas los parámetros de la misma. Por 

    último, el final de la macro se indicará con la directiva ENDM.

    Ejemplo.

    Supongamos que tenemos una macro así definida:

    Suma MACRO destino, fuente1,fuente2

    MOV destino,op1

    ADD destino,op1

    ENDM

  • 8/18/2019 14 DIRECTIVAS

    5/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 5/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Si dentro de un programa llamamos a dicha macro:

    Mov Dato,4444hMov AX,1234h

    Mov BX,5678h

    Suma CX,AX,BX

    Suma DX,CX,Dato

    Al ensamblar el programa quedará:

    Mov Dato,4444h

    Mov AX,1234h

    Mov BX,5678h

    Mov CX,AX ; 2 expansiones de la macro

    Add CX,BX

    MOV DX,CX

    ADD DX,Dato

    Puesto que las macros se expanden en todos los lugares en los que son

    utilizadas, no es posible utilizar en ellas etiquetas normales puesto que si se

    expandiese la etiqueta más de una vez, aparecería la etiqueta en varias partes

    del programa, produciéndose un error. La forma de solucionar este

    inconveniente es utilizando las etiquetas locales. Las cuales tienen vigencia

    únicamente dentro de la expansión de la macro, no existiendo fuera de ellas y

    permitiendo por tanto, su utilización repetida.

    Las etiquetas locales se definen mediante la directiva LOCAL, seguidas

    de los nombres de las etiquetas separados por comas

  • 8/18/2019 14 DIRECTIVAS

    6/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 6/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Las directivas de macros se dividen en dos categorías:

    !  DEFINICIÓN DE MACROS

    !  MACRO = Comienzo de macro.

    !  ENDM = Fin de macro.

    !  LOCAL = Define etiquetas dentro de una macro

    !  EXITM = Terminar expansión de la macro.

    !  PURGE = Borrar las macros de la memoria.

    !  REPT = Repetir bloque de sentencias un número de veces.

    !  IRP = Repetir bloque de sentencias con un valor cada vez.

    !  IRPC = Repetir bloque de sentencias con un carácter cada vez.

    !  OPERADORES DE MACROS

    !  & = Operador que concatena textos o símbolos

    !  ;; = Operador para comentarios que no aparecen en la expansión

    !  ! = Operador para interpretar carácter en sentido literal

    !  % = Operador para convertir una expresión en un número.

    14.6 DIRECTIVAS :

    14.6.1 Direct iva &:

    Formato: texto&texto

    Descripción: Es un operador que se utiliza dentro de la definición de una macro

    para concatenar textos o símbolos.

    Observaciones:

    !  Si se utiliza un parámetro de la macro dentro de una cadena de

    caracteres (entre comillas) debe ir precedido por el carácter &, para

    que sea sustituido en la expansión de la macro.

    !  Para formar un símbolo a partir de un texto y un parámetro de la

    macro, es necesario interponer un & entre ellos.

    Ejemplo:

    Ejem1 MACRO X,cond

    Et1&X push BX

    Mov BX,”&X”

    J&cond et&x

    ENDM

  • 8/18/2019 14 DIRECTIVAS

    7/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 7/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Cuando en el programa coloquemos por ejemplo Ejem1 A,GE, al ensamblar la

    expansión quedará:

    Et1A push BX

    Mov BX,”A”

    JGE Et1A

    14.6.2 Direct iva ;;

    Formato: ;; texto

    Descripción: Es un operador que se utiliza dentro de la definición de una macro

    para insertar comentarios que no se desea que aparezcan en la expansión

    incluso usando la directiva .LALL.

    Observaciones: Los comentarios precedidos por un (;) aparecerán en la

    expansiones.

    14.6.3 Direct iva !:

    Formato: !Carácter 

    Descripción: Es un operador que se utiliza dentro de la definición de una macro

    para indicar que el carácter que viene a continuación debe interpretarse de

    forma literal, y no como símbolo.

    Observaciones: Las entradas !x y son equivalentes

    Ejemplo:

    Macro1 macro x

    Mov ax,x

    Macro2 !x

    Endm

    Macro2 macro y

    Push YEndm

  • 8/18/2019 14 DIRECTIVAS

    8/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 8/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.4 Directiva %:

    Formato: %Expresión

    Descripción: Es un operador de macro que sirve para convertir una expresión a

    un número en la base de numeración activa.

    Ejemplo

    Macro1 macro x

    Y = x+1

    Macro2 %Y

    Endm

    Macro2 macro Y

    MOV BX, Y

    Endm

    14.6.5 Directiva COMMENT:

    Formato: COMMENT delimitador texto delimitador 

    Descripción: Permite insertar comentarios en el programa sin tener que

    especificar “;” en cada línea.

    El primer carácter no blanco actúa como delimitador inicial del

    comentario. El delimitador final es otro carácter igual al inicial.

    Un comment definido dentro del cuerpo de una macro no se lista, a

    menos que especifiquemos la directiva .LALL

    Ejemplo

    COMMENT * esto es un comentario que puede ocupar varias líneas

    ............

    ............

    ...........fin del comentario*

  • 8/18/2019 14 DIRECTIVAS

    9/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 9/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

     14.6.6 Directiva .CREF/.XCREF:

    Formato: .CREF

    .XCREF

    Descripción: .XCREF suprime el listado de las referencias cruzadas hasta que

    encuentre un .CREF

    .CREF Restaura el listado de referencias cruzadas, esta opción es

    por defecto

    Observaciones: Las referencias cruzadas se utilizan como ayuda en la

    depuración de un programa. Consta de un listado de los símbolos y números

    de líneas donde es referenciado o definido.

    14.6.7 Directiva DB:

    Formato: [nombre de variable] DB expresión

    Descripción: Reserva memoria para una variable de tipo byte (8 bits), inicializando o

    no dicho byte y los posteriores, nombre de variable es opcional y es el nombre asignado

    al primer byte

    Operandos: -“Expresión” es el valor inicial de la variable, y puede ser:

    !  Una constante positiva o negativa o expresión de constantes

    !  El rango de constantes con signo es:

    !  80h = -128 (mínimo)

    !  7Fh = 127 (máximo)

    !  El rango de constantes con signo es:

    !  00h = 0 (mínimo)

    !  FF

    !  El signo “?” indica indefinición del valor 

    !  Una cadena de caracteres delimitada por comillas simples o dobles!  N1 DUP(n2) indica que la expresión n2 se repite n1 veces, a su vez

    n2 puede tener otro u otros DUP.

  • 8/18/2019 14 DIRECTIVAS

    10/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 10/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Ejemplos:

    !  ABC DB 23,35,48

    !  DFR DB -125

    !  SRGWR DB 0Dh

    !  DB 3Eh,5Fh,31h

    !  SDE DB 4 DUP(0),12*3

    !  WFRG DB 4 DUP(3 DUP(7))

    !  THECS DB “ERROR”,34,-15,0100101b

    14.6.8 Directiva DD:

    Formato: [nombre de variable] DD expresión

    Descripción: Reserva memoria para una variable de tipo doble palabra (2 palabras = 4

     bytes = 32 bits).

    Operandos: -“Expresión” es el valor inicial de la variable, y puede ser:

    !  Una constante positiva o negativa o expresión de constantes

    !  El rango de constantes con signo es:

    !  80000000h = -2.147.483.648 (mínimo)

    !  7FFFFFFFh = 2.147.483.647 (máximo)

    !  El rango de constantes con signo es:

    !  00000000h = 0 (mínimo)

    !  FFFFFFFFh = 4.294.967.295 (máximo)

    !  El signo “?” indica indefinición del valor 

    !  Una cadena de caracteres delimitada por comillas simples o dobles

    N1 DUP(n2) indica que la expresión n2 se repite n1 veces, a su vez n2 puede

    tener otro u otros DUP.

    Observaciones: El orden de almacenamiento de una doble palabra en memoria

    es el siguiente:!  Primero las palabras menos significativas.

    !  Segundo la palabra mas significativa.

    !  A su vez cada palabra se almacena con el byte menos significativo

    en primer lugar 

    !  La doble palabra 45687458 se almacenará como 58, 74, 68, 45.

  • 8/18/2019 14 DIRECTIVAS

    11/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 11/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.9 Directiva DQ:

    Formato: [nombre de variable] DQ expresión

    Descripción: Reserva memoria para una variable de tipo cuádruple palabra (4 palabras

    = 8 bytes = 64 bits).

    Operandos: -“Expresión” es el valor inicial de la variable, y puede ser:

    !  Una constante positiva o negativa o expresión de constantes

    !  El rango de constantes con signo es:

    !  8000000000000000h = -9.223.372.036.854.775.808 (mínimo)

    !  7FFFFFFFFFFFFFFh = 9.223.372.036.854.775.807 (máximo)

    !  El rango de constantes con signo es:

    !  0000000000000000h = 0 (mínimo)

    !  FFFFFFFFFFFFFFFFh = 18.446.774.073.709.551.615

    (máximo)

    !  El signo “?” indica indefinición del valor 

    !  Una cadena de caracteres delimitada por comillas simples o dobles

    N1 DUP(n2) indica que la expresión n2 se repite n1 veces, a su vez n2 puede

    tener otro u otros DUP.

    Observaciones: El orden de almacenamiento de una doble palabra en memoria

    es el siguiente:

    !  Primero la doble palabra menos significativas.

    !  Segundo la doble palabra mas significativa.

    !  A su vez cada doble palabra se almacena con la palabra menos

    significativa en primer lugar 

    La doble palabra AFEBCD4587236954 se almacenará como 54, 69, 23, 87, 45,

    CD, EB, AF.

  • 8/18/2019 14 DIRECTIVAS

    12/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 12/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.10 Directiva DT:

    Formato: [nombre de variable] DT expresión.

    Descripción: Reserva diez bytes de memoria para almacenar dígitos decimales

    empaquetados (dos dígitos decimales por byte).

    Ejemplo:

    Wuh DT 0123456789 ;reserva 10 bytes.

    Es equivalente a :

    Wuh DB 00h,4 DUP(¿),01h,23h,45h,67h,89h

    14.6.11 Directiva DW:

    Formato: [nombre de variable] DW expresión.

    Descripción: Reserva diez bytes de memoria para una variable de tipo palabra

    Operandos: -“Expresión” es el valor inicial de la variable, y puede ser:

    !  Una constante positiva o negativa o expresión de constantes

    !  El rango de constantes con signo es:

    !  8000h = -32.768 (mínimo)

    !  7FFFh = 32.768 (máximo)

    !  El rango de constantes con signo es:

    !  0000h = 0 (mínimo)

    !  FFFFh = 65.535 (máximo)

    !  El signo “?” indica indefinición del valor 

    !  El desplazamiento offset de una variable.

    !  Una cadena de caracteres delimitada por comillas simples o dobles

    N1 DUP(n2) indica que la expresión n2 se repite n1 veces, a su vez n2 puede

    tener otro u otros DUP.Observaciones: El orden de almacenamiento de una palabra en memoria es el

    siguiente:

    !  Primero el byte menos significativo. (byte 0: bit del 0 al 7)

    !  Segundo el byte mas significativo (byte 1 : bit del 8 al 15)

  • 8/18/2019 14 DIRECTIVAS

    13/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 13/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.12 Directiva END:

    Formato: END [expresión]

    Descripción: Indica el final del programa fuente. El operando expresión indica la

    dirección de comienzo del programa fuente. Normalmente se especifica una

    etiqueta.

    14.6.13 Directiva ENDM:

    Formato: ENDM

    Descripción: Indica el final de una de las directivas siguientes: MACRO, REPT,

    IRP, IRPC.

    14.6.14 Directiva ENDP:

    Formato: nombre_procedimiento ENDP [expresión]

    Descripción: Indica el final del procedimiento.

    14.6.15 Directiva ENDS:

    Formato: nombre_segmento ENDS

    Nombre_estructura ENDS

    Descripción: Indica el final de un segmento o de una estructura.

    14.6.16 Directiva EQU:

    Formato: nombre EQU expresión

    Descripción: Asigna un nombre simbólico al valor de una expresión. La

    expresión puede ser:

    !  Una constante numérica.

    !  Una referencia de dirección.

    !  Cualquier combinación de símbolos y operaciones que pueda

    evaluarse como valor numérico.

    !  Otro nombre simbólico.

  • 8/18/2019 14 DIRECTIVAS

    14/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 14/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Observaciones:

    !  Al contrario de la directiva “=”, el nombre simbólico no puede

    redefinirse

    !  EQU no puede utilizarse dentro de una estructura, es decir, entre las

    directivas STRUC y ENDS.

    Ejemplos:

    Columnas equ 80

    Filas equ 25

    Pantalla equ filas*columnas

    Mover equ mov

    14.6.17 Directiva EVEN:

    Formato: EVEN

    Descripción: Fuerza al contador de posiciones a un valor par, es decir, a una

    frontera de palabra. Si el contador de posiciones ya está en una posición par, la

    directiva EVEN no hace nada, en caso contrario Even añade una instrucción

    NOP que ocupa un byte.

    Con esta instrucción se asegura que el código o los datos que vienen

    detrás de esta sentencia están en una dirección de memoria par.

  • 8/18/2019 14 DIRECTIVAS

    15/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 15/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.18 Directiva EXITM:

    Formato: EXITM

    Descripción: Esta directiva se usa en el caso en que un bloque MACRO, REPT,

    IRP o IRPC, y que como consecuencia de una directiva condicional anterior se

    desee finalizar la expansión.

    Ejemplo:

    Por ejemplo deseamos hacer una macro que sume dos cantidades y deje su

    valor en AX en el caso de que la suma sea menor que 9

    SUMA MACRO valor1,valor2

    Mov AX,0000h

      if valor1+valor2 GT 9

    exitm

    else

    mov AX,valor1

    add AX,valor2

    endif 

    endm

    Esta macro realiza la función que hemos planteado, y ahora será

    llamada desde el código por ejemplo

    ejemplo PROC FAR

    suma 2,3

    suma 7,8

    ejemplo ENDP

    En tiempo de ensamblaje, la instrucción (suma 2,3) será expandida de la

    siguiente forma:

    Mov AX,0000h

    Mov AX,2

    Add AX,3

    Sin embargo la instrucción (suma 7,8) será expandida como:

    Mov AX,0000h

  • 8/18/2019 14 DIRECTIVAS

    16/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 16/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.19 Directiva IF

    Formato: IF [condición]

    ......

    ELSE

    ......

    ENDIF

    Descripción: Las directivas que comienzan por IF son directivas condicionales y

    sirven para que el ensamblador incluya o no las sentencias que vienen a

    continuación según se cumpla o no la condición. Si la condición es cierta, se

    incluyen las sentencias entre el IF y el ELSE, si la condición no es cierta, se

    incluyen las condiciones entre IF y ENDIF.

    El bloque ELSE es opcional, si no lo ponemos, se incluirá las sentencias

    entre IF y ENDIF en caso de cumplirse la condición planteada.

    La directiva IF se puede anidar, es decir, meter uno o varios IF dentro de

    otro IF.

    14.6.20 Direct iva =

    Formato: nombre = expresión

    Descripción: Asigna un nombre simbólico a una expresión.

    La expresión puede ser:

    !  Una constante numérica.

    !  Una referencia de dirección

    !  Cualquier combinación de símbolos y operaciones que pueda

    evaluarse como valor numérico

    !  Otro nombre simbólico.

    Observaciones: Esta directiva es similar a EQU, excepto que “nombre” puede

    redefinirse, es decir, puede cambiarse la expresión asociada al nombre.

    Ejemplos:

    !  Valor = 10

    !  Qwdf = Valor + 1

    !  Wgfw = valor /Qwdf 

  • 8/18/2019 14 DIRECTIVAS

    17/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 17/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.21 Directiva INCLUDE

    Formato: INCLUDE nombre_de_fichero

    Descripción: Incluye un fichero de sentencias fuente, este fichero es el indicado

    en nombre_de_fichero

    Ejemplo

    Podemos crear por ejemplo un fichero para guardar los registros AX,BX,CX,DX

    en la pila y por ejemplo lo llamaremos guarda.asm con el contenido:

    PUSH AX

    PUSH BX

    PUSH CX

    PUSH DX

    Y ahora al hacer un programa, si queremos añadir esta secuencia lo haremos

    de la siguiente forma:

    Include guarda.asm

    14.6.22 Directiva IRP

    Formato: IRP nombre,

    Descripción: Hace que el bloque de sentencias contenidas entre IRP y ENDM

    se repita una vez para cada argumento, sustituyendo “nombre” por el

    correspondiente argumento

    Observaciones:

    !  La lista de argumentos debe delimitarse entre los símbolos “”.

    !  Los argumentos se separan por comas.

    !  Si la lista de argumentos es nula (), el bloque de sentencias se

    ejecuta una vez eliminando “nombre”.

    !  El bloque IRP-ENDM no es necesario que resida dentro de unadefinición de macro

    Ejemplo:

    IRP valor,

    ADD AX,valor 

    .....

    Endm

  • 8/18/2019 14 DIRECTIVAS

    18/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 18/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    En este ejemplo se repetiran las instrucciones entre IRP y endm una vez para

    valor=1, otra vez para valor=2 y otra vez para valor = 3, y el ensamblador 

    generará

    ADD AX,1

    ADD AX,2

    ADD AX,3

    14.6.23 Directiva IRPC:

    Formato: IRPC nombre,

    IRPC nombre,cadena_de_caracteres

    Descripción: Hace que el bloque de sentencias contenidas entre IRPC y ENDM

    se repita una vez para cada carácter de la cadena, sustituyendo “nombre” por 

    el correspondiente carácter.

    Ejemplo:

    IRPC valor,

    ADD AX,valor 

    .....

    Endm

    En este ejemplo se repetiran las instrucciones entre IRPC y endm una vez para

    valor=2, otra vez para valor=5 otra vez para valor = 6 y otra vez para valor = 8,

    y el ensamblador generará

    ADD AX,2

    ADD AX,5

    ADD AX,6

    ADD AX,8

  • 8/18/2019 14 DIRECTIVAS

    19/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 19/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.24 Directiva .LALL/.SALL/.XALL:

    Formato: .LALL

    .SALL

    .XALL

    Descripción: Estas directivas controlan la aparición o no en el listado de salida

    del ensamblador de las expansiones de las macros.

    .LALL - Lista las macros y sus expansiones

    .SALL – Suprime el listado de macros y sus expansiones

    .XALL – Lista sólo las sentencias que generan código objeto.

    14.6.25 Directiva .LFCOND/.SFCOND/.TFCOND:

    Formato: .LFCOND

    .SFCOND

    .TFCOND

    Descripción: Estas directivas controlan la aparición o no en el listado de salida

    del ensamblador de los bloques condicionales falsos.

    .LFCOND - Lista los bloques asociados a una condición falsa

    .SFCOND – Suprime el listado de bloques asociados a una condición falsa

    .TFCOND – Invierte el modo de listado de bloques asociados a una condición

    falsa.

    14.6.26 Directiva .LIST/.XLIST:

    Formato: .LIST

    .XLIST

    Descripción: Estas directivas controlan la generación o no del listado de salida

    del ensamblador 

    .XLIST Suprime el listado de las sentencias fuente y del código objeto hastaque se encuentre el próximo .LIST si lo hubiera.

    .LIST restaura el listado. Es la opción por defecto.

  • 8/18/2019 14 DIRECTIVAS

    20/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 20/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.27 Directiva LOCAL:

    Formato: LOCAL etiqueta

    Descripción: Indica al ensamblador las etiquetas que debe cambiar cada vez

    que expande una macro. Con ello se evitan las definiciones múltiples de estas

    etiquetas.

    Si se usa debe ser la primera sentencia del cuerpo de la macro, es decir,

    debe ir a continuación de la directiva MACRO.

    Observaciones:

    !  LOCAL sólo puede usarse dentro de la definición de una macro.

    !  No se permiten comentarios (ni con comment ni con ;) entre las

    directivas macro y local

    !  Los símbolos creados por Assembler para las etiquetas declaradas

    con LOCAL son de la forma: 0000 a FFFF

    Ejemplo:

    esperar MACRO numero

    LOCAL seguir 

    Mov CX,numero

    seguir: LOOP seguir  

    endm

    ejemplo PROC FAR

    include datos.asm

    INICIO: Mov cx,25h

    esperar cx

    Mov cx,32h

    esperar cxJMP INICIO

    MOV AX,4C00h

    INT 21H

    ejemplo ENDP

  • 8/18/2019 14 DIRECTIVAS

    21/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 21/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.28 Directiva MACRO:

    Formato: nombre MACRO lista de parámetros

    .......

    .......

    ENDM

    Descripción: Esta sentencia es la cabecera que indica el comienzo de una

    macro, dicha macro finalizará al encontrar la directiva ENDM. Entre ambas

    directivas se incluyen las sentencias que componen el cuerpo de la macro.

    La invocación de la macro se hace por su propio nombre seguido por los

    parámetros separados por comas

    Al realizar el ensamblado del programa, la invocación de las macros se

    sustituye por el cuerpo de la macro, a este proceso se le llama expansión de la

    macro

    Observaciones:

    !  Pueden existir macros sin parámetros.

    !  El número de argumentos en la invocación no tiene porque coincidir 

    con el número de parámetros que hemos usado al definirla. Si hay

    más argumentos que parámetros, se ignoran los argumentos que

    sobran. Si hay menos argumentos que parámetros, los parámetros

    que faltan se convierten en nulos.

    !  EL nombre de una macro puede ser el de una directiva o el de una

    instrucción. En este caso, se utiliza la definición de la macro,

    sustituyendo el significado normal. Si se utiliza la directiva Purge, se

    restaura el significado original.

  • 8/18/2019 14 DIRECTIVAS

    22/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 22/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.29 Directiva ORG:

    Formato: ORG expresión

    Descripción: Pone el contador de posiciones en el valor indicado por expresión.

    Observaciones:

    !  Es necesario especificar ORG 100h en programas que se vayan a

    convertir a tipo .EXE

    !  “expresión” puede indicarse mediante el carácter $ que indica el

    valor actual del contador de posiciones.

    !  ORG no puede usarse dentro de una estructura (bloque STRUC-

    ENDS)

    Ejemplos:

    !  ORG 100h

    !  ORG 200h

    !  ORG $+4

    14.6.30 Directiva %OUT:

    Formato: %OUT texto

    Descripción: Esta directiva sirve para escribir un mensaje en pantalla durante el

    ensamblaje.

    Se suele utilizar para indicar que camino se ha elegido en una condición

  • 8/18/2019 14 DIRECTIVAS

    23/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 23/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.31 Directiva PAGE:

    Formato: PAGE [operando1][,operando2]

    Descripción: Define la longitud y el tamaño de la página del listado de salida del

    ensamblador. Cada página del listado producida por el ensamblador contiene

    un número de capítulo y un número de página, separados por un guión

    El operando1 puede ser:

    !  Número de líneas por página

    !  El signo “+”, que indica nuevo capítulo (se incrementa en 1) y página

    igual a 1.

    Observaciones: Si se usa PAGE sin operandos, se inserta un salto de página y

    se incrementa en uno el número de página

    El número de página se incrementa cuando se completa una página o

    cuando se encuentra PAGE sin operandos.

    El número de capítulo se incrementa sólo con PAGE +.

    Ejemplos:

    !  PAGE (66 líneas de 80 caracteres)

    !  PAGE 88,132 (88 líneas de 132 caracteres)

    !  PAGE 78 (78 líneas de 80 caracteres)

    !  PAGE ,100 (66 líneas de 100 caracteres)

    !  PAGE + (Nuevo capítulo)

  • 8/18/2019 14 DIRECTIVAS

    24/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 24/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.32 Directiva PROC:

    Formato: nombre_procedimiento PROC [atributo]

    Descripción: Indica el comienzo del procedimiento “nombre_procedimiento”

    Un procedimiento es un bloque de instrucciones que sirve para realizar 

    una tarea determinada y que puede invocarse desde varios puntos del

    programa. Puede asemejarse a una subrutina.

    Operandos: El atributo puede tomar los valores “NEAR” o “FAR”

    !  Un procedimiento NEAR sólo se puede llamar desde el segmento en

    el que esta definido o desde un segmento que tiene el mismo valor 

    definido en ASSUME CS

    !  Al llamar a un procedimiento NEAR, se guarda sólo el

    desplazamiento (valor de IP) de la instrucción siguiente en la pila que

    se recupera al retornar de un procedimiento con la instrucción RET.

    !  Un procedimiento FAR se puede llamar desde cualquier segmento. Al

    llamar a un procedimiento FAR se guarda el segmento y el

    desplazamiento de la instrucción siguiente en la pila en este orden,

    estos valores se recuperan al retornar del procedimiento con la

    instrucción RET

  • 8/18/2019 14 DIRECTIVAS

    25/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 25/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Observaciones: El bloque de sentencias de un procedimiento es:

    Nombre_procedimiento PROC atributos

    ......

    ........

    ........

    ........

    nombre_procedimiento ENDS

    !  Si se desea que un procedimiento de un modulo sea accesible desde

    otros módulos, debe utilizarse la directiva PUBLIC

    PUBLIC Nombre_procedimiento

    Nombre_procedimiento PROC atributos

    ......

    ........

    ........

    ........

    RET

    nombre_procedimiento ENDS

    !  El procedimiento principal de un programa debe ser de tipo FAR

  • 8/18/2019 14 DIRECTIVAS

    26/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 26/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.33 Directiva PUBLIC:

    Formato: PUBLIC símbolo

    Descripción: Permite que los símbolos especificados sean accesibles por otros

    módulos que serán montados conjuntamente, es decir, procesados por el

    programa LINK.

    Operandos: “símbolo puede ser:

    !  Un nombre de variable

    !  Una etiqueta, incluidos nombres de procedimientos

    !  Una constante de 16 bits

    Observaciones:

    !  El módulo que usa un símbolo definido con PUBLIC debe contener 

    una sentencia directiva EXTRN.

    !  La sentencia PUBLIC puede aparecer en cualquier posición del

    programa fuente, por orden se recomienda ponerlas la principio.

    Ejemplo1:Si lo que quiere es hacer un procedimiento accesible desde otro

    módulo

    PUBLIC PROC1

    PROC1 PROC FARMOV AX,BXADD AX,CXRET

    PROC1 ENDP

    El módulo que quiere invocar al procedimiento PROC1 hay que incluir lasentencia:

    EXTRN PROC1:FAR

  • 8/18/2019 14 DIRECTIVAS

    27/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 27/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Ejemplo2: Si lo que quiere es acceder a una variable desde dos módulos

    distintos. En el módulo que contiene la variable (por ejemplo VAR1), deben

    incluirse las sentencias:

    PUBLIC VAR1

    VAR1 DW 0

    El módulo que usa var1 debe contener 

    EXTRN var1:WORD

    Ejemplo 3:Si lo que se desea es bifurcar a la instrucción de etiqueta ET1 desde

    otro módulo y desde el mismo segmento físico:

    El módulo que contiene la etiqueta es:

    Seg_A segment

    Public ET1

    ..........

    ..........

    ..........

    ET1: ........... ; se trata de una etiqueta NEAR ya que tiene :

    ...........

    ...........

    ............

    Seg_A ends

    El módulo desde el que tiene que bifurcar a ET1 es:

    EXTRN ET1:NEAR

    SEG_B SEGMENT

    ................

    ................JMP ET1

    ...............

    ...............

    SEG_B ENDS

    Si la bifurcación a una e3tiqueta de un módulo se hace desde otro módulo en

    diferente segmento físico, el proceso será igual al anterior pero definiendo la

    etiqueta como FAR.

  • 8/18/2019 14 DIRECTIVAS

    28/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 28/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.34 Directiva PURGE:

    Formato: PUBLIC nombre de macro

    Descripción: Borra las macros especificadas de las tablas del ensamblador 

    permitiendo que se reutilice el espacio.

    No es necesario purgar una macro antes de redefinirla.

    14.6.35 Directiva .RADIX

    Formato: .RADIX expresión

    Descripción: Sirve para cambiar la base de numeración por defecto. Por 

    defecto, los números sin sufijo se considera que están en base 10.

    Los sufijos son:

    !  b binario

    !  d decimal

    !  o/q octal

    !  h hexadecimal.

    Expresión está siempre en base 10, independientemente del valor de la

    base de numeración activa.

    Observaciones:

    !  .RADIX no afecta a DD, DQ o DT, pues siempre suponen decimal, a

    menos que se especifique un sufijo del tipo de datos.

    !  Si se especifica .RADIX 16, hay que tener cuidado con los números

    en hexadecimal terminados en D, pues el ensamblador los considera

    como valores decimales, en este caso habría que poner el sufijo h.

    Ejemplo:.RADIX 16 Establece base 16

    .RADIX 10 Establece base 10

    .RADIX 2 Establece base 2

    ............

  • 8/18/2019 14 DIRECTIVAS

    29/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 29/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    14.6.36 Directiva REPT

    Formato: REPT Expresión

    Descripción: Hace que el bloque de sentencias entre REPT y ENDM se repitan

    el número de veces que indica la expresión.

    El bloque REPT-ENDM no es necesario que resida dentro de una

    definición de macro

    Ejemplo 1:

    Reservar cinco palabras inicializadas respectivamente con los cuadrados de los

    cinco primeros números naturales.

    N = 0

    REPT 5

    N = N + 1

    DW N*N

    ENDM

    El ensamblador generará:

    DW 1

    DW 4

    DW 9

    DW 16

    DW 25

    14.6.37 Directiva SEGMENT

    Formato: Nombre SEGMENT [Alineamiento] [Combinación] [‘clase’]

    ........

    ........

    nombre ENDSDescripción: Indica el comienzo del segmento ‘nombre’, el final de dicho

    segmento se indica con la directiva ENDS, y el nombre de ambas directivas

    debe ser el mismo.

    Un segmento es un bloque de sentencias que puede contener:

    !  Definición de variables

    !  Instrucciones

    !

      Combinación de las anteriores

  • 8/18/2019 14 DIRECTIVAS

    30/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 30/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    Un módulo fuente ensamblador puede ser:

    !  Parte de un segmento

    !  Un segmento

    !  Partes de varios segmentos

    !  Varios segmentos

    !  Una combinación de los anteriores.

    Existen cuatro tipos de segmentos que son: de datos (DS), de

    código(CS), de pila(SS) y extra (ES).

    En el alineamiento podemos indicar una de las siguientes opciones:

    !  BYTE: ninguno, el segmento puede comenzar en cualquier posición.

    !  WORD: El segmento empieza en una frontera de palabra, es decir,

    su dirección es múltiplo de 2.

    !  PARA: El segmento empieza en una frontera de párrafo, es decir, su

    dirección es múltiplo de 16, Es el alineamiento por defecto

    !  PAGE: El alineamiento empieza en una frontera de página; es decir,

    su dirección es múltiplo de 256.

    En la combinación podemos indicar una de las siguientes opciones:

    !  Si no se indica los segmentos se colocarán uno tras otro físicamente,

    pero nivel lógico serán independientes usando cada uno de ellos una

    base y un offset.

    !  PUBLIC: El segmento se concatenará a otros del mismo nombre en

    la fase de montaje “LINK”. El nombre de segmento que reconoce el

    montador es “clase”!  AT expresión: El segmento se ubicará en la dirección cuyo segmento

    es “expresión”. Esta dirección no se usa para la carga del segmento

    en una dirección fija. Lo que si se permite es que se definan variables

    dentro del segmento. Normalmente se usa para referenciar zonas de

    memoria, como los vectores de interrupción o la memoria ROM.

  • 8/18/2019 14 DIRECTIVAS

    31/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 31/32

    1º INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN-EUITI VITORIAProfesor: Fernando Oterino Echávarri

    !  STACK: Define este segmento como pila (stack). La pila es una zona

    de memoria que se utiliza para almacenar datos de forma temporal y

    se maneja con las instrucciones: PUSH, POP, PUSHF, POPF, CALL,

    RET, INT e IRET. Al menos debe haber un segmento de pila para

    crear un módulo ejecutable con el montador “link”.

    !  MEMORY: El segmento se ubicará en una zona de memoria superior 

    a la de los otros que aparecen durante el montaje del programa. Sólo

    puede haber un segmento de este tipo, si hubiera varios, sólo se

    procesaría el primero como Memory y el resto como Common

    -  “clase” es el nombre que se utiliza para agrupar segmentos en fase de

    montaje “linker” y se especifica entre comillas simples.

    -  Pueden existir segmentos anidados, uno dentro de otro. En este caso, el

    ensamblador los procesa como si no lo fueran juntando la primera parte del

    segmento partido con la segunda.

    -  No se permiten segmentos que se solapen a excepción del alineamiento

    common

    14.6.38 Directiva SUBTTL

    Formato: SUBTTL texto

    Descripción: Especifica un subtítulo que aparecerá en el listado como segunda

    línea de cada página, detrás del título.

    Observaciones:

    -  Se puede especificar cualquier número de sentencias SUBTTL por 

    módulo.

    -  Si no se utiliza ninguna sentencia SUBTTL, la segunda línea dellistado aparecerá en blanco.

    -  Si después de usar “SUBTTL texto” se desea que vuelva a salir en

    blanco se usa esta misma directiva sin indicar texto alguno.

  • 8/18/2019 14 DIRECTIVAS

    32/32

    ESTRUCTURA DE COMPUTADORES I (Capítulo 14: DIRECTIVAS) 32/32

    14.6.39 Directiva TITLE

    Formato: TITLE texto

    Descripción: Especifica un título que aparecerá en el listado como primera línea

    en cada página. La longitud máxima del texto son 60 caracteres.

    Observaciones:

    Sólo se puede especificar una sentencia TITTLE por módulo

    Los seis primeros caracteres de texto se utilizan como nombre del módulo

    objeto, a menos que se haya incluido la directiva NAME

    Si no se usa ni TITTLE ni NAME el nombre del módulo objeto es el mismo que

    el del módulo fuente.