Você está na 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

Você também pode gostar