Post on 06-Jul-2018
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.