Story Transcript
DIRECTIVAS DEL ASM86 Directiva SEGMENT / ENDS Sintaxis: nombre SEGMENT [alineación] [combinación] [nombre_clase]
PARA PUBLIC BYTE COMMON WORD STACK PAGE MEMORY INPAGE AT ... ... nombre ENDS Se usa para definir un segmento lógico. Este segmento puede combinarse con otros en el mismo módulo y/o con segmentos definidos en otros módulos. Estos formarán luego los segmentos físicos en memoria, direccionados por los registros de segmento. El programador pondrá entre las directivas SEGMENT y ENDS el código, los datos o la pila.
Directiva ASSUME Sintaxis: ASSUME reg.segm : núm.parágr [,...:...] CS Nombre de Segmento Ej. CODIGO DS Nombre de grupo Ej. CODGRUPO SS Expresión SEG_nombre ES NOTHING Informa al ensamblador de cuál será el contenido de los registros de segmento en el momento de la ejecución. No inicializa los registros de segmento. Ayuda al ensamblador a asegurarse que son direccionables el código o los datos. Ayuda al ensamblador para la generación automática del prefijo SEGMENT OVERRIDE.
Ejemplo: DATOS SEGMENT ; define un segmento para datos ... ABYTE DB 0 ; algún dato ... DATOS ENDS ; fin de la definición del segmento
PROG SEGMENT ; define un segmento para código ... MOV AX,DATOS ; AX = dirección base del segmento MOV DS,AX ; inicializa DS (segmento de datos) ... PROG ENDS ; fin de la definición del segmento
ASSUME CS:PROG,DS:DATOS ; asocia PROG al segmento de código ; y DATOS al segmento de datos
Directiva GROUP Sintaxis: nombre GROUP núm.parágr [,...] Nombre de Segmento Ej. CODIGO Expresión SEG_nombre Se usa para combinar varios segmentos lógicos en un segmento físico. 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 excepción de los registros) son las variables y los rótulos. Las variables son áreas de con nombre donde se almacenan valores. Los rótulos se refieren a secciones de código a donde se puede saltar o llamar. Una variable es definida por una sentencia de definición 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 número de parágrafo del segmento. 2. Desplazamiento - Es un valor de 16 bits que indica la distancia en bytes desde el comienzo del segmento hasta la posición de la variable en memoria. 3. Tipo - El tamaño en bytes, usualmente expresado por una palabra clave en la definición. Pueden ser: BYTE, WORD, DWORD, QWORD, TBYTE, estructura y registro.
• Rótulos Los rótulos definen direcciones para las instrucciones ejecutables, representando un "nombre" para una locación en el código. Un rótulo puede ser definido de tres formas: 1) un nombre seguido de ":" asociado con una sentencia de instrucción, 2) una directiva PROC, o 3) una directiva LABEL. Como las variables, los rótulos 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 locación. Puede ser NEAR (dentro del mismo segmento) o FAR (desde otro segmento). Ej.: LAZO: JMP COMIENZO ; este rótulo será NEAR
• Constantes Son números puros, sin ningún atributo. Una constante puede ser un número 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 (