ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

LENGUAJE ENSAMBLADOR


Enviado por   •  5 de Septiembre de 2011  •  7.179 Palabras (29 Páginas)  •  1.087 Visitas

Página 1 de 29

BREVE RESUMEN DE LENGUAJE ENSAMBLADOR

0.- MOTIVACION.

El lenguaje ensamblador continúa siendo imprescindible para imple-

mentar fragmentos de código donde la velocidad del ejecutable y/o

su tamaño sean críticos. Afortunadamente, muchos compiladores per-

miten la inclusión directa en el código fuente de sentencias en

ensamblador, de forma que ya no es necesario en la mayor parte de

los casos el uso de ensambladores. Como ventaja adicional, no es

necesario conocer las directivas de ensamblador, ya que pueden es-

tablecerse desde el entorno de desarrollo y van implícitas en las

directivas del compilador, por ejemplo, el compilador Pascal de

Borland o el compilador C/C++ de la misma compañía.

Aún así, a muchos programadores les resulta difícil renunciar al

control absoluto de la máquina que permite el lenguaje ensambla-

dor.

1.-REGISTROS DEL 8086

El 8086 dispone de ocho registros de propósito general, que pode-

mos considerar como memorias implementadas sobre la misma CPU de

acceso muy rápido. Estos registros reciben los nombres de AX, BX,

CX, DX, SI, DI, BP, SP. Existe tambien un registro IP (Instruction

Pointer)que apunta a la siguiente instrucción a ejecutar, formando

su dirección junto con el registro CS, que citaremos a

continuación. Aparte de los registros generales y de IP, existen

registros de segmento, llamados CS, DS, SS, ES y un registro de

flags, cuyos bits no son accesibles directamente y que reflejan

los resultados de distintas operaciones.

Cualquiera de los registros de propósito general puede usarse para

escribir a/desde memoria, realizar operaciones, como punteros o

contadores, pero cada uno tiene una personalidad especial, y es

una buena práctica de programación usarlos para lo que fueron

principalmente concebidos.

AX se usa siempre en multiplicaciones y divisiones y es el mas

eficiente para operaciones aritméticas y de movimiento de datos.

BX se usa como puntero, y junto con DS referencia posiciones de

memoria. Por ejemplo, para cargar en AL el contenido de la posi-

ción de memoria número 9:

MOV AX,0

MOV DS,AX

MOV BX,9

MOV AL,[BX]

CX se usa principalmente como contador en los bucles. Estos son

tan frecuentes que existe una instrucción especial, LOOP, que

comprueba su valor, volviendo al principio del bucle si es

distinto de cero:

MOV CX,10

BUCLE:

instrucciones

LOOP BUCLE

DX es el único registro que puede usarse para acceder a puertos.

Por ejemplo, para escribir 62H en la dirección de puerto 1000H:

MOV AL,62H

MOV DX,1000H

OUT DX,AL

SI se usa como puntero. Su nombre proviene de Source Index, y se

usa principalmente con instrucciones de cadena:

CLD

MOV AX,0

MOV DS,AX

MOV SI,20

LODSB

carga en AX el valor de la posición 20 de memoria. SI se incrementa

en una unidad. En combinación con LOOP permite leer posiciones su-

cesivas de memoria.

DI tambien se usa como puntero. Permite escribir en posiciones

sucesivas de memoria cuando se usa con instrucciones de cadena:

CLD

MOV DX,0

MOV ES,DX

MOV DI,2048

STOSB

escribe el contenido de AL en 0000:2048. Mientras que DI usa a ES

como segmento, SI usa a DS.

BX, DI y SI actuan como punteros relativos a DS, o a ES en el caso

de DI cuando se usa con funciones de cadena. BP actua tambien co-

mo puntero, pero relativo al segmento de pila SS.

SP es entre los registros de uso general el mas específico, ya que

no se recomienda su uso, pues apunta al extremo superior de la pi-

la, y por ello no debe modificarse salvo que se sepa exactamente

que se está haciendo.

2.-ESTRUCTURA DE UN PROGRAMA EN ENSAMBLADOR.

Expondremos brevemente la estructura de un programa fuente en en-

samblador. Este está compuesto por una serie de segmentos para la

pila, el código y los datos. Los segmentos no pueden estar anida-

dos.

Cada uno comienza con el nombre del segmento seguido de la pala-

bra SEGMENT y alguna o algunas cadenas exigidas por el enlazador.

Cada segmento termina con el nombre del segmento seguido de la

palabra ENDS.

El programa termina con la palabra END seguida del nombre del pun-

to de entrada al programa.

De esta forma, el armazón de un programa en ensamblador es el si-

guiente:

PILA SEGMENT STACK 'STACK'

.

.

PILA ENDS

DATOS SEGMENT 'DATA'

.

.

DATOS ENDS

CODIGO SEGMENT 'CODE'

.

.

CODIGO ENDS

END [ENTRADA]

donde [ENTRADA] es el nombre del punto donde se inicia la secuen-

cia de instrucciones.

Dentro del segmento de pila, se establece el tamaño de ésta. La

forma habitual de hacerlo es mediante la sentencia DW (define pa-

labra) seguida del número de palabras que vamos a reservar y la

sentencia DUP (?). Así:

PILA SEGMENT STACK 'STACK'

DW 100H DUP(?)

PILA ENDS

establece un segmento de pila con un tamaño de 100H palabras (512

bytes), sin especificar el contenido inicial.

Las directivas que se emplean habitualmente para establecer el

tamaño de la pila son:

DB Define Byte 1 Byte.

DW Define Word 2 Bytes.

DD Define doble palabra 4 Bytes.

DQ Define cuádruple palabra 8 Bytes.

La sintaxis de DUP es expresión1 DUP expresión2. expresión1 indi-

ca el número de veces a incluir consecutivamente expresión2 en el

segmento. Cuando expresión2 es (?) indicamos que no es importante

el contenido inicial. No

...

Descargar como (para miembros actualizados) txt (35 Kb)
Leer 28 páginas más »
Disponible sólo en Clubensayos.com