Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Directivas Del Asm86
Directivas Del Asm86
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
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
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:
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.
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.
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:
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.
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
Operadores aritmticos
HIGH, LOW (byte alto, byte bajo)
Ej.: MOV AH,HIGH(1234H) ; AH=12H
Ej.: MOV TENHEX EQU (0FF10H) ; TENHEX=10H
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
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
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
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