08.05.2013 Views

INTRODUCCIÓN El documento que está visualizando tiene la ...

INTRODUCCIÓN El documento que está visualizando tiene la ...

INTRODUCCIÓN El documento que está visualizando tiene la ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

LENGUAJE ENSAMBLADOR LABORATORIO DE COMPUTADORAS<br />

tipo del dato o procedimiento (BYTE, WORD o DWORD; NEAR o FAR; se emplea además ABS<br />

para <strong>la</strong>s constantes numéricas):<br />

EXTRN proc1:FAR, var_x:WORD<br />

En el ejemplo se accede a los símbolos externos proc1 y var_x (ver ejemplos de PUBLIC) y a<br />

continuación sería posible hacer un CALL proc1 o un MOV CX,var_x. Si <strong>la</strong> directiva EXTRN se<br />

coloca dentro de un segmento, se supone el símbolo dentro del mismo. Si el símbolo <strong>está</strong> en otro<br />

segmento, debe colocarse EXTRN fuera de todos los segmentos indicando explícitamente el<br />

prefijo del registro de segmento (o bien hacer el ASSUME apropiado) al referenciarlo.<br />

Evidentemente, al final, al linkear habrá <strong>que</strong> en<strong>la</strong>zar este módulo con el <strong>que</strong> define los elementos<br />

externos.<br />

INCLUDE nombre_fichero: Añade al fichero fuente en proceso de ensamb<strong>la</strong>je el fichero indicado,<br />

en el punto en <strong>que</strong> aparece el INCLUDE. Es exactamente lo mismo <strong>que</strong> mezc<strong>la</strong>r ambos ficheros<br />

con un editor de texto. Ahorra trabajo en fragmentos de código <strong>que</strong> se repiten en varios programas<br />

(como quizá una librería de macros). No se recomiendan INCLUDE's anidados.<br />

DIRECTIVAS DE DEFINICIÓN DE BLOQUES<br />

NAME nombre_modulo_objeto: indica el nombre del módulo objeto. Si no se incluye NAME, se<br />

tomará de <strong>la</strong> directiva TITLE o, en su defecto, del nombre del propio fichero fuente.<br />

GROUP segmento1, segmento2,... permite agrupar dos o más segmentos lógicos en uno sólo de<br />

no más de 64 Kb totales (ojo: el ensamb<strong>la</strong>dor no comprueba este extremo, aun<strong>que</strong> sí el<br />

en<strong>la</strong>zador). Ejemplo:<br />

superseg GROUP datos, codigo, pi<strong>la</strong><br />

codigo SEGMENT<br />

...<br />

codigo ENDS<br />

datos SEGMENT<br />

dato DW 1234<br />

datos ENDS<br />

pi<strong>la</strong> SEGMENT STACK 'STACK'<br />

DB 128 DUP (?)<br />

pi<strong>la</strong> ENDS<br />

Cuando se accede a un dato definido en algún segmento de un grupo y se emplea el operador<br />

OFFSET es preciso indicar el nombre del grupo como prefijo, de lo contrario el ensamb<strong>la</strong>dor no<br />

generará el desp<strong>la</strong>zamiento correcto ¡ni emitirá errores!:<br />

MOV AX, dato ; ¡incorrecto!<br />

MOV AX, supersegmento:dato ; correcto<br />

La ventaja de agrupar segmentos es poder crear programas COM y SYS <strong>que</strong> contengan varios<br />

segmentos. En todo caso, téngase en cuenta aún en ese caso <strong>que</strong> no pueden emplearse todas<br />

<strong>la</strong>s características de <strong>la</strong> programación con segmentos (por ejemplo, no se puede utilizar <strong>la</strong><br />

directiva SEG ni debe existir segmento de pi<strong>la</strong>).<br />

LABEL: Permite referenciar un símbolo con otro nombre, siendo factible redefinir el tipo. La<br />

sintaxis es: nombre LABEL tipo (tipo = BYTE, WORD, DWORD, NEAR o FAR). Ejemplo:<br />

pa<strong>la</strong>bra LABEL WORD<br />

byte_bajo DB 0<br />

byte_alto DB 0<br />

Página 26 Ing. Sánchez Rivero

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!