Directivas Lenguaje Ensamblador
Directivas Lenguaje Ensamblador
Directivas Lenguaje Ensamblador
DIRECTIVAS
El lenguaje ensamblador permite usar diferentes enunciados que permiten controlar la manera
en que un programa ensambla y lista. Estos enunciados, llamados directivas, actan solo durante
el ensamblado de un programa y no generan cdigo ejecutable de la mquina.
Directiva SEGMENT
Un programa ensamblado en formato .EXE consiste en uno o ms segmentos. Un segmento de
pila define el almacn de la pila, un segmento de datos define los elementos de datos y un
segmento de cdigo proporciona un cdigo ejecutable. Las directivas para definir un segmento,
SEGMENT y ENDS, tienen el formato siguiente:
NOMBRE
nombre
.
.
.
nombre
OPERACIN
SEGMENT
ENDS
OPERANDO
[opciones]
COMENTARIO
;Inicia el segmento
SEGMENT
alineacin
combinar
clase
Tipo alineacin. La entrada alineacin indica el lmite en el que se inicia el segmento. Para el
requerimiento tpico, PARA, alinea el segmento con el lmite de un prrafo, de la manera que la
direccin inicial es divisible entre 16, o 10H. En ausencia de un operando hace que el
ensamblador por omisin tome PARA.
Tipo combinar. La entrada combinar indica si se combina el segmento con otros segmentos
cuando son enlazados despus de ensamblar. Los tipos combinar son STACK, COMMON, PUBLIC
y la expresin AT. Por ejemplo, el segmento de la pila por lo comn es definido como:
Nombre
SEGMENT
PARA STACK
Puede utilizar PUBLIC Y COMMON en donde tenga el propsito de combinar de forma separada
programas ensamblados cuando los enlaza. En otros casos, donde un programa no es
combinado con otros, puede omitir la opcin o codificar NONE.
Tipo clase. La entrada clase, encerrada entre apstrofos, es utilizada para agrupar segmentos
cuando se enlazan. La clase code para el segmento de cdigos, data por segmento de datos
y stack para el segmento de la pila.
El ejemplo siguiente se define un segmento de pila con tipos de alineacin, combinar y clase:
nombre
SEGMENT
Directiva PROC
El segmento de cdigo contiene el cdigo ejecutable de un programa. Tambin tiene uno o ms
procedimientos, definidos con la directiva PROC. Un segmento que tiene solo un procedimiento
puede aparecer como sigue:
NOMBRE
nomsegmto
nomproc
nomproc
nomsegmnto
OPERACIN
SEGMENT
PROC
.
.
.
ENDP
ENDS
OPERANDO
PARA
FAR
COMENTARIO
;Un
;procedimiento
;dentro
;del segmento
; de cdigo
El nombre del procedimiento debe estar presente, ser nico y seguir las reglas para la formacin
de nombres del lenguaje. El operando FAR en este caso est relacionado con la ejecucin del
programa. Cuando usted solicita la ejecucin de un programa, el cargador del programas de DOS
utiliza este nombre de procedimiento como el punto de entrada para la primera instruccin a
ejecutar.
Directiva ASSUME
Un programa utiliza al registro SS para direccionar la pila, al registro DS para direccionar el
segmento de datos y al registro CS para direccionar el segmento de cdigo. Para este fin, usted
tiene que indicar al ensamblador el propsito de cada segmento en el programa. La directiva
para este propsito ASSUME, codificada en el segmento de cdigo como sigue:
OPERACIN
ASSUME
OPERANDO
SS:nompila, DS:nomsegdatos, CS:nomsegcdigo,
SS: nompila significa que el ensamblador asocia el nombre del segmento de la pila con el registro
SS, y de manera similar con los dos operandos mostrados. Los operandos pueden aparecer en
cualquier orden. ASSUME tambin puede contener una entrada para ES, tal como es ES:
nomsegdatos; si su programa no utiliza el registro ES, puede omitir su referencia o codificar ES:
NOTHING.
Al igual que otras directivas, ASSUME es slo un mensaje que ayuda al ensamblador a convertir
cdigo simblico a cdigo mquina; an puede tener que codificar instrucciones que fsicamente
cargan direcciones en registros de segmentos en el momento de la ejecucin.
Directiva END
Como ya se mencion, la directiva ENDS finaliza un segmento y la directiva ENDP finaliza un
procedimiento. Una directiva END finaliza todo el programa. Su formato general es:
OPERACIN
OPERANDO
END
[nomproc]
El operando puede estar en blanco si el programa no es para ejecutarse; por ejemplo, usted
puede ensamblar solo las definiciones de datos o puede querer enlazar el programa con otro
mdulo (principal). En la mayora de los programas, el operando contiene el nombre del primero
o nico PROC designado como FAR, donde inicia la ejecucin del programa.
COMO INICIALIZAR UN PROGRAMA PARA SU EJECUCIN
Los dos tipos bsicos de programas ejecutables son .EXE y .COM. Primero desarrollaremos los
requisitos para programas .EXE.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PAGE
60,132
TITLE
P04ASM1
Estructura de un programa .EXE
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
STACKSG
SEGMENT PARA STACK Stack
DATASG
ENDS
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
DATASG
SEGMENT PARA Data
DATASG
ENDS
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
CODESG
SEGMENT PARA Code
BEGIN
PROC
FAR
ASSUME
SS: STACKSG, DS: DATASG, CS:CODESG
MOV
AX,DATASG
;Obtiene la direccin del segmento de datos
MOV
DS,AX
;Almacena direccin en DS
AX,4C00H
MOV
;Peticin
INT
21H
;Salida al DOS
BEGIN
ENDP
CODESG
ENDS
END
BEGIN
Estructura de un programa .EXE
EXPLICACIN
La directiva PAGE para este listado establece 60 lneas y 132 columnas por pgina.
4-6
8-10
12-21
13-20
14
La directiva ASSUME avisa al ensamblador que asocie ciertos segmentos con ciertos
registros de segmento, en este caso, STACKSG con el SS, DATASG con el DS y CODESG
con el CS:
ASSUME SS: STACKSG, DS: DATASG, CS: CODESEG
Al asociar segmentos con registros de segmentos, el ensamblador puede determinar
las direcciones de desplazamientos para los elementos en la pila, para los elementos
en el segmento de datos y para las instrucciones en el segmento de cdigo. Por
ejemplo, cada instruccin de mquina en el segmento de cdigo de una longitud
especfica. La primera instruccin en lenguaje mquina tendra un desplazamiento de
0 y si es de dos bytes de longitud, la segunda instruccin tendra un desplazamiento
de 2 y as sucesivamente.
15,16
; Almacena la direccin en DS
18,19
22
;Solicitud de terminacin
21H
;Salir al DOS
El cdigo de regreso para una terminacin normal de un programa por lo comn es el 0 (cero).
Tambin puede codificar dos MOV como un enunciado.
MOV AX,4C00H
La funcin del 4CH del DOS ha sustituido las operaciones originales de terminacin INT 20H e
INT 21H, funcin 00H.
DIRECTIVAS
CONVENCIONALES
DIRECTIVAS
MASM 6.0
Definir byte
(s)
DB
BYTE
Definir una
palabra
DW
WORD
Definir una
palabra doble
DD
DWORD
Definir una
palabra larga
DF
FWORD
Definir una
palabra
cudruple
DQ
QWORD
Definir diez
bytes
DT
TBYTE