Está en la página 1de 6

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.

Directivas para listar: PAGE y TITLE


Las directivas PAGE y TITLE ayudan a controlar el formato de un listado de un programa en
ensamblador. ste es su nico fin, y no tiene efecto sobre la ejecucin subsecuente del
programa.
PAGE: Al inicio de un programa, la directiva PAGE designa el nmero mximo de lneas para listar
en una pgina y el nmero mximo de caracteres en una lnea. Su formato general es:
PAGE [longitud],[ancho]
El ejemplo siguiente proporciona 60 lneas por pgina y 132 caracteres por lnea:
PAGE 60,132
El nmero de lneas por pgina puede variar desde 10 hasta 255, mientras que el nmero de
caracteres por lnea desde 60 hasta 132. La omisin del enunciado PAGE causa que el
ensamblador tome PAGE 50,80.
TITLE: Se puede emplear la directiva TITLE para hacer que un ttulo para un programa se imprima
en la lnea 2 de cada pgina en el listado del programa. Puede codificar TITLE de una vez, al inicio
del programa. Su formato general es:
TITLE texto
Para el operando texto, una tcnica recomendada es utilizar el nombre del programa como se
registra en el disco. Por ejemplo si a su programa le puso el nombre de ASMSORT, codifique el
nombre ms de un comentario descriptivo opcional, hasta 60 caracteres, como esto:
TITLE ASMSORT Programa en ensamblador para ordenar los nombres de los clientes

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

;Fin del segmento

El enunciado SEGMENT define el inicio de un segmento. El nombre de un segmento debe estar


presente, ser nico y cumplir las convecciones para nombres del lenguaje. El enunciado ENDS
indica el final del segmento y contiene el mismo nombre del enunciado SEGMENT. El tamao
mximo de un segmento puede tener tres tipos de opciones: alineacin, combinar y clase,
codificadas en este formato:
Nombre

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

PARA STACK stack

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.

La directiva ENDP indica el fin de un procedimiento y contiene el mismo nombre qu e el


enunciado PROC para permitir que el ensamblador relacione a los dos. Ya que los
procedimientos deben estar por completo dentro de un segmento, ENDP define el final de un
procedimiento antes en ENDS defina el final del segmento.
El segmento de cdigo puede contener cualquier nmero de procedimientos usados como
subrutinas, cada uno de los cuales va con su caracterstico conjunto de enunciados PROC y
ENDP. Cada PROC adicional por lo comn se codifica con (o por omisin) el operando NEAR.

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

Examinaremos las instrucciones del programa por nmero de lneas:


LINEA

EXPLICACIN

La directiva PAGE para este listado establece 60 lneas y 132 columnas por pgina.

La directiva TITLE identifica el nombre del programa P04ASM1

Las lneas 3, 7 y 11 son comentarios que clarifican la declaracin de los segmentos


definidos.

4-6

Estos enunciados definen el segmento de la pila, STACKSG (pero no su contenido, en


este ejemplo).

8-10

Estos enunciados definen el segmento de datos, DATASG (pero no su contenido).

12-21

Estos enunciados definen el segmento de cdigo, CODESG.

13-20

Estos enunciados definen el segmento de cdigo del nico procedimiento, llamado


BEGIN. Este procedimiento ilustra los requisitos comunes de inicializacin y de salida
de un programa .EXE. Los dos requisitos para inicializar son:
(1) Avisar al ensamblador que segmentos asocia con los registros de segmentos
y (2) cargar el DS con la direccin de segmento de datos.

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

Dos instrucciones inicializan la direccin del segmento de datos en el registro DS:


MOV AX,DATASG ;Obtiene la direccin del segmento de datos
MOV DS,AX

; Almacena la direccin en DS

18,19

Estas dos instrucciones hacen la peticin de terminacin del programa y regresan al


DOS.

22

El enunciado END indica al ensamblador que este es el final del programa y el


operando BEGIN proporciona el punto de entrada para la ejecucin subsecuente del
programa.

La secuencia en la que define los segmentos por lo regular no es tan importante.


STACK

SEGMENT PARA STACK Stack

DATASG SEGMENT PARA Data


CODESG SEGMENT PARA Code

COMO TERMINAR LA EJECUCION DE UN PROGRAMA


INT 21H es una operacin de interrupcin comn del DOS que utiliza un cdigo de funcin en el
registro AH para especificar una accin que ser realizada. Las diferentes funciones de INT 21H
incluyen entrada desde teclado, manejo de pantalla, E/S de disco y salida de impresora. La
funcin que nos interesa es 4CH, que INT 21H reconoce como una peticin para la terminacin
de la ejecucin de un programa. Tambin puede usar esta operacin para pasar un cdigo de
regreso en el AL para pruebas subsecuentes por medio de un archivo de procesamiento por lotes
como sigue:
MOV AH,4CH

;Solicitud de terminacin

MOV AL,retcode ;Cdigo de regreso opcional


INT

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

;Peticin de terminacin normal

La funcin del 4CH del DOS ha sustituido las operaciones originales de terminacin INT 20H e
INT 21H, funcin 00H.

DIRECTIVAS PARA LA DEFINICIN DE DATOS


Las directivas son convencionales usadas para definir datos, junto con los nombres introducidos
son:
DESCRIPCION

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

También podría gustarte