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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

LENGUAJE ENSAMBLADOR LABORATORIO DE COMPUTADORAS<br />

* EVEN: fuerza el contador de posiciones a una posición par, interca<strong>la</strong>ndo un byte con <strong>la</strong><br />

instrucción NOP si es preciso. En buses de 16 ó más bits (8086 y superiores, no en 8088) es dos<br />

veces más rápido el acceso a pa<strong>la</strong>bras en posición par:<br />

EVEN<br />

dato_rapido DW 0<br />

* .RADIX n: cambia <strong>la</strong> base de numeración por defecto. Bastante desaconsejable dada <strong>la</strong><br />

notación elegida para indicar <strong>la</strong>s bases por parte de IBM/Microsoft (si se cambia <strong>la</strong> base por<br />

defecto a 16, ¡los números no pueden acabar en 'd' ya <strong>que</strong> se confundirían con el sufijo de<br />

decimal!: lo ideal sería emplear un prefijo y no un sufijo, <strong>que</strong> a menudo obliga además a iniciar los<br />

números por 0 para distinguirlos de <strong>la</strong>s eti<strong>que</strong>tas).<br />

DIRECTIVAS DE DEFINICIÓN DE SEGMENTOS Y PROCEDIMIENTOS<br />

* SEGMENT-ENDS: SEGMENT indica el comienzo de un segmento (código, datos, pi<strong>la</strong>,<br />

etc.) y ENDS su final. <strong>El</strong> programa más simple, de tipo COM, necesita <strong>la</strong> dec<strong>la</strong>ración de un<br />

segmento (común para datos, código y pi<strong>la</strong>). Junto a SEGMENT puede aparecer, opcionalmente,<br />

el tipo de alineamiento, <strong>la</strong> combinación, el uso y <strong>la</strong> c<strong>la</strong>se:<br />

nombre SEGMENT [alineamiento] [combinación] [uso] ['c<strong>la</strong>se']<br />

. . . . .<br />

nombre ENDS<br />

Se pueden definir unos segmentos dentro de otros (el ensamb<strong>la</strong>dor los ubicará unos tras otros). <strong>El</strong><br />

alineamiento puede ser BYTE (ninguno), WORD (el segmento comienza en posición par),<br />

DWORD (comienza en posición múltiplo de 4), PARA (comienza en una dirección múltiplo de 16,<br />

opción por defecto) y PAGE (comienza en dirección múltiplo de 256). La combinación puede ser:<br />

- (No indicada): los segmentos se colocan unos tras otros físicamente, pero son<br />

lógicamente independientes: cada uno <strong>tiene</strong> su propia base y sus propios offsets re<strong>la</strong>tivos.<br />

- PUBLIC: usado especialmente cuando se trabaja con segmentos definidos en varios<br />

ficheros <strong>que</strong> se ensamb<strong>la</strong>n por separado o se compi<strong>la</strong>n con otros lenguajes, por ello debe<br />

dec<strong>la</strong>rarse un nombre entre comil<strong>la</strong>s simples -'c<strong>la</strong>se'- para ayudar al linkador. Todos los<br />

segmentos PUBLIC de igual nombre y c<strong>la</strong>se <strong>tiene</strong>n una base común y son colocados<br />

adyacentemente unos tras otros, siendo el offset re<strong>la</strong>tivo al primer segmento cargado.<br />

- COMMON: simi<strong>la</strong>r, aun<strong>que</strong> ahora los segmentos de igual nombre y c<strong>la</strong>se se so<strong>la</strong>pan. por<br />

ello, <strong>la</strong>s variables dec<strong>la</strong>radas han de serlo en el mismo orden y tamaño.<br />

- AT: asocia un segmento a una posición de memoria fija, no para ensamb<strong>la</strong>r sino para<br />

dec<strong>la</strong>rar variables (inicializadas siempre con '?') de cara a acceder con comodidad a zonas<br />

de ROM, vectores de interrupción, etc.<br />

Ejemplo:<br />

vars_bios SEGMENT AT 40h<br />

p_serie0 DW ?<br />

vars_bios ENDS<br />

De esta manera, <strong>la</strong> dirección del primer puerto serie puede obtenerse de esta manera (por<br />

ejemplo):<br />

MOV AX,variables_bios ; segmento<br />

MOV ES,AX ; inicializar ES<br />

MOV AX,ES:p_serie0<br />

- STACK: segmento de pi<strong>la</strong>, debe existir uno en los programas de tipo EXE; además el<br />

Linkador de Bor<strong>la</strong>nd (TLINK 4.0) exige obligatoriamente <strong>que</strong> <strong>la</strong> c<strong>la</strong>se de éste sea también<br />

'STACK', con el TLINK de Microsoft no siempre es necesario indicar <strong>la</strong> c<strong>la</strong>se del segmento<br />

de pi<strong>la</strong>. Simi<strong>la</strong>r, por lo demás, a PUBLIC.<br />

Página 24 Ing. Sánchez Rivero

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

Saved successfully!

Ooh no, something went wrong!