Está en la página 1de 15

DIRECTIVAS DEL ASM86

Directiva SEGMENT / ENDS


Sintaxis:
nombre SEGMENT [alineacin] [combinacin] [nombre_clase]

PARA PUBLIC
BYTE COMMON
WORD STACK
PAGE MEMORY
INPAGE AT ...
...
nombre ENDS
Se usa para definir un segmento lgico. Este segmento puede combinarse con otros en
el mismo mdulo y/o con segmentos definidos en otros mdulos. Estos formarn luego
los segmentos fsicos en memoria, direccionados por los registros de segmento. El
programador pondr entre las directivas SEGMENT y ENDS el cdigo, los datos o la
pila.

Directiva ASSUME
Sintaxis:
ASSUME reg.segm : nm.pargr [,...:...]
CS Nombre de Segmento Ej. CODIGO
DS Nombre de grupo Ej. CODGRUPO
SS Expresin SEG_nombre
ES NOTHING
Informa al ensamblador de cul ser el contenido de los registros de segmento en el
momento de la ejecucin. No inicializa los registros de segmento. Ayuda al
ensamblador a asegurarse que son direccionables el cdigo o los datos. Ayuda al
ensamblador para la generacin automtica del prefijo SEGMENT OVERRIDE.

Ejemplo:
DATOS SEGMENT ; define un segmento para datos
...
ABYTE DB 0 ; algn dato
...
DATOS ENDS ; fin de la definicin del segmento

PROG SEGMENT ; define un segmento para cdigo


...
MOV AX,DATOS ; AX = direccin base del segmento
MOV DS,AX ; inicializa DS (segmento de datos)
...
PROG ENDS ; fin de la definicin del segmento

ASSUME CS:PROG,DS:DATOS ; asocia PROG al segmento de cdigo ; y DATOS al


segmento de datos

Directiva GROUP
Sintaxis:
nombre GROUP nm.pargr [,...]
Nombre de Segmento Ej. CODIGO
Expresin SEG_nombre
Se usa para combinar varios segmentos lgicos en un segmento fsico. La suma de las
extensiones no debe superar 64 KB.
Ejemplo: CODGRUPO GROUP CODIGO1, CODIGO2

VARIABLES, ROTULOS Y CONSTANTES


Variables
Los dos objetos mas referidos (a excepcin de los registros) son las variables y los
rtulos. Las variables son reas de con nombre donde se almacenan valores. Los rtulos
se refieren a secciones de cdigo a donde se puede saltar o llamar. Una variable es
definida por una sentencia de definicin de datos o una directiva LABEL. Cada variable
tiene tres atributos:

1. Segmento - El segmento en el cual fue definida. Es un valor que representa el nmero


de pargrafo del segmento.
2. Desplazamiento - Es un valor de 16 bits que indica la distancia en bytes desde el
comienzo del segmento hasta la posicin de la variable en memoria.
3. Tipo - El tamao en bytes, usualmente expresado por una palabra clave en la
definicin. Pueden ser: BYTE, WORD, DWORD, QWORD, TBYTE, estructura y
registro.

Rtulos
Los rtulos definen direcciones para las instrucciones ejecutables, representando un
"nombre" para una locacin en el cdigo. Un rtulo puede ser definido de tres formas:
1) un nombre seguido de ":" asociado con una sentencia de instruccin, 2) una directiva
PROC, o 3) una directiva LABEL. Como las variables, los rtulos tienen tres atributos:

1. Segmento - dem que las variables.


2. Desplazamiento - dem que las variables.
3. Tipo - Especifica el tipo de salto o llamado a subrutina que debe ser hecho a esa
locacin. Puede ser NEAR (dentro del mismo segmento) o FAR (desde otro segmento).
Ej.: LAZO: JMP COMIENZO ; este rtulo ser NEAR

Constantes
Son nmeros puros, sin ningn atributo. Una constante puede ser un nmero binario,
octal, decimal, hexadecimal, ASCII, real decimal o real hexadecimal. Se pueden evaluar
en 8 bits, 16 bits o real. Ejemplos: 11011B, 174Q, 983[D], F7DH, 'texto', 3.1416 o
.002E7 y 40490FDBR.

DEFINICION E INICIALIZACION DE VARIABLES


Directiva DB
Sintaxis:
[nombre] DB valor [,...]
Constante decimal o entera (<255)
?
Cadena de caracteres
repeticiones DUP valor
Inicializacin de un byte.

Directiva DW

Sintaxis:
[nombre] DW valor [,...]
Constante decimal o entera (<65535)
?
Variable o expresin
repeticiones DUP valor
Inicializacin de una palabra (2 bytes).

Directiva DD
Sintaxis:
[nombre] DD valor [,...]
Constante entera (<232-1) o real (<E38)

?
Variable o expresin
repeticiones DUP valor
Inicializacin de una palabra doble (4 bytes).

Directiva DQ
Sintaxis:
[nombre] DQ valor [,...]
Constante entera (<264-1) o real (<E308)
?
Variable o expresin
repeticiones DUP valor
Inicializacin de una palabra cudruple (8 bytes).

Directiva DT
Sintaxis:
[nombre] DT valor [,...]
Constante entera BCD (<1018-1), real (<E4932)
?
Variable o expresin
repeticiones DUP valor
Inicializacin de 10 bytes.

Ejemplos:
1 - El operador DUP se puede usar para reservar espacio de memoria sin inicializar.

PILA SEGMENT STACK ; define un segmento para la pila


...
DW 128 DUP (?) ; reserva 128 palabras de 16 bits
...
PILA ENDS ; fin de la definicin del segmento

2 - Los textos se pueden ingresar directamente en ASCII

CARTEL DB 'NUMEROS, CONVERSION...$'

Directiva RECORD
Sintaxis: (plantilla)
nombre RECORD nombre_campo : expresin [=val_inicial] [,...]
Sintaxis: (inicializacin)
nombre nombre_record <[expresin] [,...]>
nombre nombre_record repeticiones DUP (<[expresin] [,...]>)

El ASM86 tiene una sentencia de inicializacin de datos especial que permite construir
estructuras de datos orientadas a bits, llamadas records, que pueden tener 8 o 16 bits de
tamao. Cada record se define con un nmero de campos conteniendo un cierto nmero
de bits por campo. Se puede almacenar informacin en esos campos y tambin acceder
a esa informacin. Los records son tiles cuando se desea acceder a bits especficos en
una estructura de datos. Estos pueden ser indicadores (flags) o los campos usados para
almacenar un nmero real.
Para utilizar un record, primero hay que definir la plantilla (template) que especifica el
tamao del record y sus campos. Luego se usa el nombre del record en una sentencia de
inicializacin de datos para asignar el almacenamiento.
Ejemplo de plantilla:

ERRORFLAGS RECORD IOERR:3=0, SYSERR:3=0, MEMERR:3

Ejemplo de inicializacin:
FLAGS ERRORFLAGS <0,3,0> ; sobrescribe las asignaciones de la plantilla

Directiva PROC
Sintaxis:
nombre PROC [tipo]
NEAR (valor por defecto)
FAR
nombre ENDP
Se usa para definir un rtulo, que normalmente comprende una serie de instrucciones y
es referido como una subrutina. las instrucciones que se encuentren fuera del par PROC
/ ENDP no sern ejecutadas en el llamado a "nombre".

Directiva LABEL
Sintaxis:
nombre LABEL [tipo]
BYTE
WORD
DWORD
TBYTE
QWORD
nombre de estructura
nombre de record
NEAR (valor por defecto)

FAR
La directiva LABEL crea un nombre para la locacin actual del ensamblado, ya sean
datos o cdigo. La directiva LABEL define un rtulo o variable que tendr los atributos
que fueran tratados en definicin de rtulos.
Puede ser usada para nombrar la misma posicin con dos nombres diferentes.
Ejemplo:
AWORD LABEL WORD
LOWBYTE DB 0
HIGHBYTE DB 0
Se puede acceder a la palabra completa con AWORD o a cada uno de los bytes con
LOWBYTE o HIGHBYTE.
Contador de locaciones
El contador de locaciones sigue el desplazamiento actual dentro del segmento actual que
est siendo ensamblado. este valor, simbolizado por el carcter $ puede ser usado en
ciertos contextos (por ejemplo: expresiones o instrucciones). Este smbolo representa un
rtulo NEAR.

Directiva ORG

Sintaxis:
ORG expresin
La directiva ORG permite controlar el contador de locaciones dentro del segmento
actual. Se usa para fijar el contador de locaciones al valor deseado. Usada con un
segmento absoluto, se puede especificar la locacin de memoria en la cual el cdigo o
los datos sern localizados.
Ejemplo:
ORG OFFSET ( $ + 1000 )

Directiva EVEN
Sintaxis:
EVEN
El cdigo o los datos que siguen a la directiva sern alineados en lmite de palabras,
logrando mayor velocidad en el 8086. El ensamblador colocar una instruccin de no
operacin NOP (90H) si es necesario.

Directiva PURGE
Sintaxis:
PURGE nombre
Borra la definicin de un smbolo, permitiendo su re definicin.

Directivas de vinculacin de programas.


El ASM86 suministra las directivas necesarias para soportar programas multimodulares. Un programa puede estar compuesto por varios mdulos individuales
(ASM(&, PL/M86, PASCAL86, FORTRAN86) los cuales son ensamblados o
compilados individualmente. Cada mdulo puede definir variables que los otros pueden
usar. El mecanismo para comunicar informacin de smbolos entre un mdulo y otro
son las directivas EXTRN y PUBLIC.

Directiva PUBLIC
Sintaxis:
PUBLIC nombre [,...]
La directiva PUBLIC especifica que smbolos en el mdulo son accesibles a otros
mdulos en el momento de la vinculacin. Estos smbolos pueden ser variables, rtulos
o constantes.

Directiva EXTRN
Sintaxis:
EXTRN nombre : tipo [,...]
La directiva EXTRN especifica aquellos smbolos que sern referidos en el mdulo y
que han sido declarados PUBLIC otro mdulo. La directiva EXTRN indicar el nombre
del smbolo y su tipo (vase tipo en la explicacin correspondiente a la directiva
LABEL).
La directiva EXTRN se debe colocar en el mismo segmento en el que se defini como
PUBLIC en el otro mdulo. Si no se conoce en que segmento fue definido PUBLIC, se
debe poner EXTRN fuera de todos los pares SEGMENT / ENDS del programa.

Directiva END
Sintaxis:
END [rtulo]
La directiva END es necesaria en todos los mdulos de programa ASM86 y es la ltima
sentencia del mdulo. Ella determina la finalizacin del proceso de ensamblado;
cualquier texto que se encuentre despus no ser tenido en cuenta.
Otro propsito de la directiva END es definir un mdulo como principal (MAINMODULE). Esto quiere decir que contiene el cdigo que ser ejecutado primero,
cuando se cargue el programa en memoria. La ejecucin comenzar a partir del rtulo
indicado como direccin de arranque en la directiva END. Como opcional, puede usarse
para definir el contenido inicial de los registros de segmento DS y SS; en este caso debe
especificarse tambin el par CS:IP.

Directiva NAME
Sintaxis:
NAME nombre de mdulo
La directiva NAME se utiliza cuando se vincularn a la vez distintos mdulos.

OPERADORES Y EXPRESIONES
Expresiones de direccionamiento

ADD DX,COUNT ; DX se suma al valor contenido en COUNT


ADD DX,COUNT + 2 ; DX se suma al valor contenido en COUNT + 2
ADD DX,COUNT [2] ; dem anterior (otra sintaxis)

Operadores aritmticos
HIGH, LOW (byte alto, byte bajo)
Ej.: MOV AH,HIGH(1234H) ; AH=12H
Ej.: MOV TENHEX EQU (0FF10H) ; TENHEX=10H

* , /, +, - (multiplicacin, divisin, suma, resta)


Ej.: CMP AL,2*4 ; compara AL con 8
Ej.: MOV CX,123H/16 ; CX=12

SHR, SHL (desplazamiento a la derecha, desplazamiento a la izquierda)


Ej.: MOV BX,0FACBH SHR 4 ; BX = FACH

Operadores relacionales
EQ igual
NE no es igual
LT menor
LE menor o igual
GT mayor
GE mayor o igual
Ej.: MOV AL,3 EQ 0 ; AL = 0 (falso)
Ej.: MOV BX,2 LE 15 ; BX = 0FFFFH (verdadero)

Operadores Lgicos
OR, XOR, AND, NOT

Operadores para forzar atributos


Ignorar segmento por defecto (segment override)
Sintaxis:
CS: variable
CS: variable
CS: variable
CS: variable
nombre seg.: variable
nombre grupo: variable
1 - Tiene precedencia sobre la sentencia ASSUME pero slo para esa lnea de programa.
2 - Tiene precedencia sobre la asignacin de segmentos por defecto para una
instruccin.
Ejemplos:
1ASSUME DS:DATA, CS:CODE
DATA SEGMENT
ABYTE DB 0
DATA ENDS
CODE SEGMENT
MOV BL,ABYTE ; la referencia es cubierta por ASSUME
MOV BL,ES:ABYTE ; no se requiere assume para esta referencia
CODE ENDS

2MOV BL,[BX] ; en este caso se usar el segmento de datos (DS)


MOV BL,ES:[BX] ; en este caso se usar el segmento extra (ES)

Operador PTR
Sintaxis:
tipo PTR nombre
BYTE
WORD
DWORD
QWORD
TBYTE
NEAR
FAR
Define una referencia a memoria de un tipo en particular, para que el programa
ensamblador seleccione la instruccin correcta.
Ejemplos:
MOV WORD PTR [BX], 5 ; en la palabra apuntada por BX pone 5
MOV CL, BYTE PTR AWORD ; lee el primer byte de AWORD
MOV DL, BYTE PTR AWORD+1 ; lee el segundo byte de AWORD

Operador SHORT
Ej.: JMP FWDLAB ; instruccin de 3 bytes
Ej.: JMP SHORT FWDLAB ; instruccin de 2 bytes

Operador THIS
Define la posicin de memoria actual, del tipo indicado.
Ej.: AWORD EQU THIS WORD

Nota: los siguientes operadores tienen la sintaxis: OPERADOR variable

Operador SEG
Toma el valor del segmento en el que fue definida la variable.
Ej.: ASSUME CS: SEG START

Operador OFFSET
Toma el valor del desplazamiento (desde el comienzo del segmento) que tiene la
variable. En definitiva: es la direccin relativa.
Ej.: MOV BX, OFFSET ASCIITABLE ; es equivalente a
Ej.: LEA BX, ASCIITABLE

Operador TYPE
Devuelve un valor acorde a la cantidad de bytes de ese tipo de variable.
Ej.: byte = 1 ; dword = 4

Operador LENGTH
Devuelve un valor acorde a la cantidad de unidades de datos (bytes, words, etc.)
asignados a un nombre de variable.
Ej.: AWORDARRAY DW 150 DUP (0) ; LENGTH = 150

Operador SIZE

Devuelve un valor acorde a la cantidad de bytes asignados a esa variable.


Ej.: AWORDARRAY DW 150 DUP (0) ; SIZE = LENGTH * TYPE = 150 * 2 = 300

Directiva EQU
Sintaxis:
nombre EQU valor
Asigna un valor/expresin numrico o un registro a un nombre que resulte mas
mnemotcnico, sin asignar posiciones de memoria.
Ej.: COUNT EQU CX
...
MOV COUNT, 10 ; CX = 10

Ej.: MOVER EQU MOV


...
MOVER AX, BX

También podría gustarte