Está en la página 1de 10

Buses y Perifricos. ITIS.

99/00
Ensamblador 8086

Algunas nociones sobre ensamblador del 8086


El 8086 es un procesador de 16 bits. Esto significa que trabaja con registros internos de este tamao y que
la amplitud del bus de datos de tambin de 16 bits. Sin embargo todas las instrucciones que usaremos aqu
sern todava funcionales cuando queramos adaptarnos a generaciones posteriores de procesadores, como
el 80386, 486, Pentium, con tamaos de palabra mayores.

Conceptos de espacio de almacenamiento de datos:


Palabra 16 bits, Doble palabra, cudruple palabra.
Almacenamiento: primero el byte menos significativo y luego el ms significativo (en sentido creciente
de las direcciones de memoria)
Pgina 256 bytes
Segmento 64K bytes
No es necesario que las direcciones se ajusten a palabra (ajuste de frontera) porque el procesador genera
automticamente las lecturas de memoria que necesite. Sin embargo s es recomendable.

Espacio de memoria:
Decimos que un procesador trabaja con un tamao de palabra N, porque sus registros tienen tamao N y
generalmente las transacciones de datos se hacen en bloques de N bits. Pese a esto el bus que comunica al
procesador con el entorno no tiene que corresponder a estas restricciones. Generalmente el bus de datos
va a seguir siendo de tamao N, aunque puede ocurrir que su tamao sea menor y una transaccin haya
que realizarla en dos fases (8088). En cuanto al bus de direcciones no est restringido a N lneas, de hecho
interesa que sea lo mayor posible para que abarque el mayor espacio de direcciones posible.
La memoria en el 8086 est dividida en segmentos. Como el tamao de los registros es de 16 bits, el
mayor rango de direcciones que podemos sealar con ellos es de 64K bytes. Sin embargo el bus de
direcciones tiene veinte bits abarcando un espacio de direcciones de 1M bytes. El modo de sealar una
direccin entonces consiste en fijar una posicin de memoria llamada base e indicar un desplazamiento a
partir de esa direccin. Este desplazamiento puede ser como mximo de 64K bytes.
As toda direccin tendr dos partes, una que indica la direccin base y otra que indica el desplazamiento
(siempre positivo) respecto a esa direccin. Los ejemplos que siguen corresponden todos a la direccin
1050h:
105:0=100:50=10:F50=1:1040=0:1050
A la izquierda del ':' figura el segmento y a la derecha el desplazamiento. El segmento (un valor de 16
bits) no es exactamente la direccin base (que ha de tener 20 bits), para ello hay que desplazarlo todava 4
bits a la izquierda.(recurdese que estamos trabajando en notacin hexadecimal)
1050 + 0=1000+50=100+F50=10+1040=0+1050
Cuando un programa se va a ejecutar, primero tiene que fijar sus segmentos. Un programa trabaja con
cuatro segmentos simultneamente: el segmento de cdigo, dos segmentos de datos y un segmento de
pila. Estos segmentos de memoria, pueden ser disjuntos, o tener parcial o an completo solapamiento. Las
direcciones base de segmentos son siempre mltiplos de 16. As, por ejemplo, el segmento 0 y el
segmento 1 se solapan parcialmente, pero cada uno de ellos tiene diecisis bytes particulares.

Buses y Perifricos. ITIS.99/00


Ensamblador 8086

Recursos del procesador:


Registros.
Para poder programar en un procesador particular debemos conocer primero el conjunto de recursos que
el procesador pone a disposicin del programador: registros, interrupciones, espacio de memoria y
entrada salida. Y luego el conjunto de instrucciones que nos permiten manipularlos para lograr nuestros
fines.
En primer lugar se nos ofrecen cuatro registros de 16 bits de propsito general, aunque cada uno tiene
asignadas labores ms especializadas:
AX: Acumulador
BX: Base
CX: Contador
DX: Dato
Si se trabaja con datos de ocho bits, estos registros pueden ser vistos por las instrucciones como ocho
registros de un byte cada uno
AH,AL
BH,BL
CH,CL
DH,DL
SP,BP
SI,DI
Se pueden utilizar como propsito general, aunque tienen una funcionalidad ms definida. Son llamados
registros de ndice y sirven para mediatizar en accesos a memoria. SP y BP se utilizan en accesos al
segmento de pila y SI y DI, en los accesos a segmentos de datos.
Para mantener la referencia a los segmentos con los que trabaja un proceso durante su ejecucin existen
cuatro registros:
CS: mantiene el segmento de cdigo
DS: segmento de datos
ES: segmento de datos extra
SS: segmento de stack
Estos cuatro registros contienen la referencia al segmento correspondiente (desplazndolos cuatro bits a la
izquierda la direccin base del segmento) Cualquier referencia a memoria utiliza estos registros de forma
automtica, aunque el usuario, puede especificar concretamente qu registros desea usar en transacciones
determinadas.
CS:IP
DS:BX,SI,DI
SS:SP,BP
ES:BX,SI,DI

Flags, IP
El registro IP contiene la siguiente instruccin a ejecutar y el usuario no tiene ningn acceso a este
registro, sin embargo con instrucciones de bifurcacin est modificndolo implcitamente.
En cuanto al registro de flags, contiene una serie de seales que nos indican el estado del procesador en
cualquier momento. Estas seales o banderas nos sirven para dirigir el control del proceso a partir de
sucesos previos. Las banderas que se nos ofrecen son las siguientes:
de estado.
CF: de acarreo.
OF: de overflow
ZF: de resultado cero

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
SF: de resultado negativo
PF: paridad del resultado
AF: auxiliar (correccin en lgica decimal BCD)
de control:
DF: de direccin (en instrucciones mltiples)
IF: de interrupciones
TF: paso a paso.

Interrupciones:
El sistema de interrupciones para un programador consiste en un conjunto de posiciones de memoria
comenzando en la direccin absoluta de memoria 0, que contienen, cada dos palabras, una direccin de
salto a una rutina de atencin a la interrupcin. (la direccin 0 corresponde a la interrupcin 0, la
direccin 2 a la interrupcin 1, etc). Cuando se invoca una interrupcin, sea fsica, por algn dispositivo,
o lgica, algn error de ejecucin o invocacin de programa, el mecanismo de atencin toma de la
direccin correspondiente que le indica el nmero de interrupcin, la direccin destino del salto y obtiene
de all la siguiente instruccin a ejecutar. Para crear una rutina de atencin a determinada interrupcin, el
programador tiene que localizar el programa en memoria y luego almacenar en la posicin de la
interrupcin correspondiente la direccin de comienzo del mismo. Naturalmente escribir una rutina de
interrupcin obliga a respetar ciertos protocolos.

Entrada/Salida
Se dispone de instrucciones especficas de entrada salida. El procesador proporciona un espacio de
direcciones de entrada salida separado del de memoria. No existe registro de segmento de entrada salida
por lo que se supone que todos las direcciones estn en el primer y nico segmento.

Instrucciones:
Hay 92 tipos de instrucciones. Por tipo entendemos instruccin genrica, por ejemplo mover. Una
instruccin genrica puede tener muchos casos segn donde residan los datos y el modo de
direccionamiento que seleccionemos para sealar un dato en memoria.
Todas las instrucciones pueden trabajar con ambos tamaos 8 o 16 bits. Naturalmente ambos operandos
deben ser semejantes para poder realizar una operacin entre ellos. En los accesos a memoria,
dependiendo de los registros utilizados se codifica la instruccin mquina con tamao byte o tamao
palabra. Si no se utilizan registros, el tamao debe venir definidos en la propia instruccin mediante una
directiva.
Hay 7 modos de direccionamiento.
(En todos los casos se usa AX como podra haberse utilizado cualquier otro registro)
1.
2.
3.
4.

5.
6.

MOV AX,BX
De registro a registro
MOV AX, 500
Inmediato.
MOV AX, TABLA
Uso de variable
TABLA es un smbolo que para el compilador tendr el mismo sentido que una direccin de memoria
especificada directamente.
MOV AX, [BX]
Indirecto mediante registro.
MOV AX, [BP]
MOV AX, [DI]
MOV AX, [SI]
Los registros encerrados entre corchetes contienen un desplazamiento dentro del segmento con el que
se trabaje. El uso de determinados registros asume implcitamente un registro de segmento. En este
caso BX, DI y SI asume el registro DS y al usar BP se asume el registro de segmento SS
MOV AX, [BX]+4
Relativo a base
MOV AX, [BP]+4
Al contenido de BX o BP se le suma el valor especificado para obtener el desplazamiento.
MOV AL,TABLA[DI]
Directo indexado
MOV AL,TABLA[SI]

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
7.

MOV AX,TABLA[BX][SI]
MOV AX,TABLA[BX][DI]
MOV AX,TABLA[BP][SI]
MOV AX,TABLA[BP][DI]

Indexado a base.

La duracin de las instrucciones va de 2 a 206 ciclos de procesador.


El conjunto de instrucciones se puede clasificar en uno de los siguientes grupos:
Transferencia de datos
Aritmticas
Aritmtica de bits
Transferencia de control
Operaciones de cadenas (de bytes)
Interrupciones
Control del microprocesador

Programacin en ensamblador:
Un programa en ensamblador es una especificacin de instrucciones en el orden en que deseamos que se
ejecuten, adems de una especificacin de los datos de partida. Para facilitar esta especificacin existen
las instrucciones ensamblador y adems otras herramientas que nos proporciona el nivel de abstraccin
tales como pseudo instrucciones y directivas.
Las directiva son una serie de comandos que nos permiten controlar las acciones del compilador, tanto las
relacionadas con la propia codificacin de instrucciones como con la generacin de informacin residual
del proceso.
Las pseudo instrucciones son instrucciones en ensamblador que podran no corresponderse directamente
con una instruccin en cdigo mquina. Es una abstraccin que se crea en el nivel de abstraccin para
facilitar la tarea al programador.
En un programa hay que especificar los segmentos; como mnimo el segmento de cdigo que es el que
almacena el programa. Generalmente un segmento de datos y opcionalmente un segmento de pila y un
segmento extra.
El cdigo, naturalmente, va encerrado dentro del segmento de cdigo. Generalmente los datos iniciales se
encierran el segmento de datos quedando el extra para apoyo de la codificacin. Sin embargo cada
situacin requiere sus propias decisiones. Un programa puede carecer de segmentos de datos
predefinidos, aunque no de segmento de cdigo.

Buses y Perifricos. ITIS.99/00


Ensamblador 8086

JNB
- Saltar si no es menor
JNBE
- Saltar si no es menor o igual
JNC
- Saltar si no hay acarreo
JNE
- Saltar si no es igual
JNG
- Saltar si no es mayor
JNGE
- Saltar si no es mayor o igual
JNL
- Saltar si no es menor
JNLE
- Saltar si no es menor o igual
JNO
- Saltar si no se produce desbordamiento
JNP
- Saltar si no hay paridad
JNS
- Saltar si no es negativo
JNZ
- Saltar si no es cero
JMP
- Salto incondicional
JO
- Saltar si se produce desbordamiento
JP
- Saltar si hay paridad
JPE
- Saltar si hay paridad par
JPO
- Saltar si hay paridad impar
JS
- Saltar si el signo es negativo
JZ
- Saltar si el resultado es cero
LOOP
- Bucle hasta que acabe contador
LOOPE - Bucle mientras igual
LOOPNE - Bucle mientras no igual
LOOPNZ - Bucle mientras resultado no cero
LOOPZ - Bucle mientras resultado cero
RET
- Retornar de un procedimiento

INSTRUCCIONES 8086
Transferencia de datos
IN
LAHF
LDS
LEA
LES
MOV
OUT
POP
POPF
PUSh
PUSHF
SAHF
XCHG
XLAT

- entrada de bytes o palabra


- Cargar AH con las banderas
- Cargar puntero usando DS
- Cargar direccin efectiva
- Cargar puntero usando ES
- Mover
- Salida de byte o palabra
- Recuperar palabra de la pila
- Recuperar banderas de la pila
- Depositar palabra en la pila
- Depositar banderas en la pila
- Almacenar Ah en banderas
- Intercambiar dos operandos
- Traducir

Instrucciones aritmticas
AAA
AAD
AAM
AAS
ADC
ADD
CBW
CMP
CWD
DAA
DAS
DEC
DIV
IDIV
IMUL
INC
MUL
NEG
SBB
SUB

- Ajuste ASCII en suma


- Ajuste ASCII en divisin
- Ajuste ASCII en multiplicacin
- Ajuste ASCII en resta
- Sumar con acarreo
- Sumar (sin acarreo)
- Convertir byte en palabra
- Comparar operandos
- Convertir palabra a doble palabra
- Ajuste decimal en suma
- Ajuste decimal en resta
- Decrementar en uno
- Dividir sin signo
- Dividir con signo
- Multiplicar con signo
- Incrementar en uno
- Multiplicar sin signo
- Negar/formar complemento a 2
- Restar con acarreo
- Restar (sin acarreo)

Instrucciones de manejo de cadenas.


CMPS
- Comparar cadenas de bytes o palabras
CMPSB - Comparar cadenas de bytes
CMPSW - Comparar cadenas de palabras
LODS
- Cargar cadena (bytes o palabras)
LODSB - Cargar cadena de bytes
LODSW - Cargar cadena de palabras
MOVS
- Mover cadena (bytes o palabras)
MOVSB - Mover cadenas de bytes
MOVSW - Mover cadenas de palabras
REP
- Repetir operacin de cadena
REPE
- Repetir mientras igual
REPNE - Repetir mientras no igual
REPNZ - Repetir mientras resultado no cero
REPZ
- Repetir mientras resultado cero
SCAS
- Explorar cadena (b o p)
SCASB - Explorar cadena de bytes
SCASW - Explorar cadena de palabras
STOS
- Almacenar cadena (b o w)
STOSB - Almacenar cadena de bytes
STOSW - Comprarse una tienda en el polo norte.

Instrucciones de manejo de bits


AND
- Y lgico
NOT
- Negacin lgica
OR
- O lgico
RCL
- Rotacin a izquierda a travs del bit de acarreo
RCR
- Rotacin a derecha a travs del bit de acarreo
ROL
- Rotacin a izquierda
ROR
- Rotacin a derecha
SAL
- Desplazamiento aritmtico a izquierda
SAR
- Desplazamiento aritmtico a derecha
(conservando el signo)
SHL
- Desplazamiento lgico a izquierda
SHR
- Desplazamiento lgico a derecha
TEST
- Comparacin lgica de dos operandos
XOR
- O lgico exclusivo

Instrucciones de interrupcin.
INT
INTO
IRET

Instrucciones de control de microprocesador.


CLC
- Borrar bandera de acarreo
CLD
- Borrar bandera de direccin
CLI
- Borrar bandera de interrupcin
CMC
- Complementar bandera de acarreo
ESC
- Escape (transmitir informacin a un
coprocesador)
HLT
- Parar el procesador
LOCK
- Bloquear el bus
NOP
- No operacin
STC
- Activar bandera de acarreo
STD
- Activar bandera de direccin
STI
- Activar bandera de interrupcin
WAIT
- Esperar a que termine un coprocesador.

Instrucciones de transferencia del control


CALL
JA
JAE
JB
JBE
JC
JCXZ
JE
JG
JGE
JL
JLE
JNA
JNAE

- Invocar a la interrupcin
- Interrupcin si desbordamiento
- Retorno de interrupcin

- Llamada a procedimiento
- Saltar si superior
- Saltar si superior o igual
- Saltar si inferior
- Saltar si inferior o igual
- Saltar si hay acarreo
- Saltar si CX es cero
- Saltar si igual
- Saltar si mayor
- Saltar si mayor o igual
- Saltar si menor
- Saltar si menor o igual
- Saltar si no es mayor
- Saltar sino es mayor o igual

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
Directivas de listado

DIRECTIVAS DEL
COMPILADOR

Formato del listado


PAGUE - Formato de la pgina del listado
TITLE
- Ttulo del listado
SUBTTL - Subttulo del listado

Directivas de datos
Definicin de smbolos
EQU
=

Listado de macros

- Asigna smbolo a expresin fija


- Asigna smbolo a expresin variable

.LALL
.SALL
.XALL

Definicin de datos
DB
DW
DD
DQ
DT

- Definir byte
- Definir palabra
- Definir doble palabra
- Definir cudruple palabra
- Definir diez bytes

- Listar macros y expansiones


- Suprimir listado macros y expansiones
- Listar slo macros que generan cdigo objeto

Control del listado


.XCREF
.CREF
.XLIST
.LIST

Referencias externas

- Suprimir referencias cruzadas


- Restaurar listado de referencias cruzadas
- Suprimir listado ensamblador
- Restaurar listado ensamblador

Comentarios

PUBLIC - Definir smbolo pblico


EXTRN - Definir smbolo externo
INCLUDE - Incluir fichero fuente

COMMENT - Comentario
Mensajes

Control del ensamblador

%OUT

END
- Fin del mdulo fuente
ORIGIN - Origen de cdigo o datos
EVEN
- Poner contador de posiciones a par
.RADIX - Definir base de numeracin por defecto.

Control del listado de los bloques asociados a una


condicin falsa
.LFCOND - Listar bloques asociados a una condicin falsa
.SFCOND - Suprimir ese listado mencionado arriba
.TFCOND - Invertir el modo de listado de los bloques...

Definicin de segmentos y procedimientos


SEGMENT - Comienzo de segmento
ENDS
- Final de segmento
ASSUME - Suponer registros de segmentos
PROC
- Comienzo de procedimiento
ENDP
- Fin de procedimiento

Directivas de macro
Definicin de macros
MACRO - Comienza macro
ENDM - Fin macro
LOCAL - Define etiquetas dentro de macro
EXITM - Terminar expansin de la macro
PURGE - Borrar macros de la memoria
REPT
- Repetir bloque de sentencias un nmero de
veces
IRP
- Repetir bloque de sentencias con un valor cada
vez
IRPC
- Repetir bloque de sentencias con un carcter
cada vez
Operadores de macro
&
- Operador para concatenar smbolos o texto
;;
- Operador para comentarios que no aparecern
en la expansin
!
- Operador para interpretar caracteres en sentido
literal
%
- Operador para convertir una expresin en un
nmero

Definicin de bloques
GROUP - Agrupar segmentos
NAME - Nombrar un mdulo
LABEL - Asignar un atributo a un nombre
RECORD - Definir registro
STRUC - Definir estructura
Directivas condicionales
IF
ELSE
ENDIF

- Emitir un mensaje durante el ensamblaje

- Evaluar condicin y decidir


- Si condicin es falsa
- Fin de estructura condicional

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
Programacin en ensamblador.
El desarrollo de un programa ensamblador se lleva a cabo sobre un simple editor de texto. Ha de
trabajarse en texto plano, sin controles, para lo que se recomienda el Block de Notas, de windows o el
Edit de MSDOS.
A continuacin mostramos un programa ensamblador x86.
com_pantalla EQU 0B800h
tam_pantalla EQU 4000
DATOS
SEGMENT
TEXTO
DB "BUSES Y PERIFERICOS. EUI.",13,10,"TITULACION DE INGENIERO TECNICO DE
SISTEMAS",13,10,'$'
TEXTE
DB "AMIGOS Y AMIGAS, BIEN VENIDOS A LAS PRACTICAS DE BUSES
PERIFERICOS",13,10,'$'
DATOS
ENDS
PILA

SEGMENT
DB 127 DUP('p')
DB 'P'
ENDS

apuntador
PILA
CODIGO SEGMENT

ASSUME CS:CODIGO, DS:DATOS, SS:PILA


borra_pantalla PROC
PUSH ES
PUSH AX
PUSH CX
PUSH DI
PUSHF
MOV AX, com_pantalla
MOV ES,AX
MOV CX, (tam_pantalla/2)+1
MOV DI, tam_pantalla
MOV AL, '-'
MOV AH, 07h
STD
REP STOSW
POPF
POP DI
POP CX
POP AX
POP ES
RET
ENDP
Todo_es_empezar:
MOV AX, DATOS
MOV DS, AX
MOV AX, PILA
MOV SS, AX
MOV SP, OFFSET apuntador
MOV AH,09h
MOV DX, OFFSET TEXTO
INT 21h
Call borra_pantalla

NO:
f:

CODIGO ENDS
END

MOV AH,09h
MOV DX, OFFSET TEXTE
INT 21h
MOV AH, 4Ch
INT 21h

Todo_es_empezar

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
Comentarios:
En primer lugar tenemos una directiva de ensamblador EQU por medio de la cual identificamos un
smbolo con un valor. Durante el ensamblado, en cualquier lugar del programa en que hayamos utilizado
el smbolo, ser sustituido por su valor.
A continuacin definimos un segmento, indicado por la directiva SEGMENT. Le llamamos DATOS,
porque es el que vamos a utilizar como segmento de datos. Dentro de l podemos observar el uso una
directiva de reserva de memoria: DB. Esta directiva reserva bytes y existen mltiples maneras de indicar
el nmero. Lo que figura a la izquierda de la directiva es la Etiqueta, que vamos a utilizar dentro del
programa para acceder a la primera posicin de memoria que vamos a reservar. Estudiamos la lnea que
comienza con la etiqueta TEXTO:
Primero se reservan tantos bytes como caracteres hay en la cadena. Se excluyen las comillas, que son los
delimitadores de la cadena. La coma es un separador, no implica reserva de bytes. A continuacin viene
un nmero, con ello solicitamos que reserve un byte con el valor 13h. Los siguientes elementos son
semejantes a los descritos excepto el ltimo: $, con este indicamos que queremos reservar un byte con el
carcter ascii encerrado entre comillas simples. Las comillas simples son un delimitador de carcter.
El fin de un segmento viene especificado por la directiva ENDS
Debajo definimos otro segmento que va a ser el de pila. No es realmente necesario si no hacemos un uso
abusivo de la pila porque el propio ensamblador se encarga de generar un pequeo segmento de pila e
inicializar los registros pertinentes. No obstante lo hemos definido, en cuyo caso nosotros debemos
inicializar los registros en el programa.
Aqu usamos la directiva DB, pero para reservar espacio utilizamos 127 DUP(p), con esto estamos
diciendo que reserve 127 bytes y que los inicialice al carcter p. (esto tiene ninguna relevancia en lo que respecta
al manejo de la pila, es una cuestin esttica)
apuntador es la etiqueta que vamos a utilizar para inicializar el Puntero de Pila.
Viene a continuacin la definicin de otro segmento. A este le llamamos cdigo porque va a contener el
programa ensamblador.
La directiva ASSUME es un indicador para el ensamblador donde le explicamos para qu vamos a utilizar
cada uno de los segmentos definidos. Aqu le estamos indicando que el segmento DATOS va a ser el
segmento de datos del programa y que utilice por defecto el registro de segmento DS cada vez que
aludamos a una etiqueta de las definidas dentro de este segmento. Lo mismo hacemos para el segmento
de cdigo y el segmento de pila. Ojo: esta directiva no inicializa los registros, salvo el CS, as que habr
que hacerlo en el programa.
El programa.
En el programa podemos ver primero una definicin de rutina. sta viene encerrada entre dos difectivas
PROC y ENDP. Naturalmente junto a PROC est la etiqueta que nos servir para invocar a la rutina.
La etiqueta Todo_es_empezar marca el comienzo del programa. Es en este punto donde empieza a
ejecutarse el programa. Para indicrselo al ensamblador hay que poner al final del archivo una directiva
END con el nombre de la etiqueta. Esta accin es estrictamente necesaria para que el procesador empiece
a ejecutar el cdigo en este punto precisamente y no desde el comienzo de segmento como lo hara de
forma natural.
Las primera instrucciones que se ejecutan son las que inicializan los registros de segmento. Primero
inicializamos el registro DS, despus el SS y despus el SP. Observar que lo hacemos mediante el registro
AX, esto es porque no es posible mover datos inmediatos directamente a un registro de segmento.
Si estudiamos el cdigo podemos ver algunos ejemplos de uso de la interrupcin 21h con la funcin
Ah=9h
Observar que lo ltimo que se ejecuta es una interrupcin 21h con la funcin AH=4Ch. Esta llamada es la
que permite a procesador volver al sistema operativo. Es estrictamente necesario incluir como instruccin
final un retorno al sistema operativo, esta es una de las forma, pero hay otras.

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
Ensamblado.
Una vez que tenemos editado el programa debemos ensamblarlo. Para ello utilizamos el comando tasm
tasm [/zi]ejemplo.asm
el parmetro /zi es opcional para el ensamblado, pero necesario si queremos trabajar con el turbo
debugger. Este comando devolver un archivo ejemplo.obj, al que someteremos al linkado:
tlink [/v] ejemplo.obj
el parmetro /v es opcional para el linkado, pero necesario si queremos trabajar con el turbo debugger.
El resultado de este comando es el archivo ejecutable ejemplo.exe.
Para ejecutar el archivo invocamos su nombre como un comando.
Turbo debugger.
El turbo debugger es una herramienta que nos permite analizar la ejecucin del cdigo, su efecto en los
registros y la memoria
Para utilizarlo, tenemos que invocarlo con el nombre del ejecutable que queremos analizar como
parmetro: td ejemplo.exe.
Lo primero que debe aparecer es una ventana con el cdigo ensamblador del programa. Si no es as es que
en alguno de los pasos de ensamblado hemos invocado al comando sin el adecuado parmetro.
Men: RUN
Aqu podemos encontrar las opciones de ejecucin: paso a paso, paso a paso saltndose las llamadas a
rutina (las ejecuta como un todo), ejecutar hasta donde est el cursor, etc. Lo ms relevante de todo esto
es que hay que realizar un program reset para iniciar una nueva ejecucin.
Si el programa muestra datos por pantalla, para ver la pantalla de ejecucin hay que pulsar alt-F5, y para
retornar al debugger, cualquier tecla.
Men: VIEW
Lo interesante de ejecutar un programa en el debugger es observar los cambios en los registros y la
memoria. La opcin ms interesante de este men es CPU. Cuando pulsas esta opcin se abre una ventana
compusta: arriba a la izquierda aparece el cdigo, a la derecha los registros y debajo del cdigo, la
memoria. Cuando ejecutamos paso a paso podemos ver el cursor movindose a cada nueva instruccin y
las modificaciones en los registros. Cada subventana tiene su propio men local: los registros pueden
verse como 32 bits o 16bits y pueden modificarse a voluntad, la ventana de la memoria puede localizarse
en cualquier direccin y modificarse a voluntad, etc.
Otros submen de VIEW de inters son: Variables, donde podemos ver los contenidos de las variables de
nuestro programa (una variable es una etiqueta definida en un segmento de datos), Dump, que nos
muestra otra ventana de memoria, Registers, otra ventana de registros, Mdule, que muestra el cdigo
fuente, etc.
Otras entradas nos permiten introducir breakpoints, modificar contenidos de memoria a travs de las
variables, etc, etc,etc.

Gua de programacin en lenguaje ensamblador. -- Las Palmas de Gran Canaria : Universidad de Las
Palmas de Gran Canaria, Escuela Universitaria de Informtica, 1994
36 p. ; 30 cm
ISBN 8480980184
INF 681.31.0 PAD gui

Buses y Perifricos. ITIS.99/00


Ensamblador 8086
Scanlon, Leo J.
80286 assembly language on MS-DOS computer / Leo J. Scanlon. -- New York : Brady, 1986
316 p. ; 24 cm.
ISBN 0893036188
INF 800.92 SCA och
Thorne, Michael
Programming the 8086/8888 for the IBM PC and compatibles / Michael Thorne. -- Menlo Park
(California) : Benjamin Cummings, 1986
XI, 398 p. ; 23 cm.
ISBN 0805350047
INF 681.31.0 THO pro
MS-DOS con ayuda del ensamblador / Martine Trio, Jean-Michel Trio. -- Madrid : Paraninfo, 1989
382 p. ; 24 cm + 1 disquette 5 1/4
ISBN 8428316880
INF 800.92 TRI msd BIG S-2
Ensamblador x86:
http://www.ee.bilkent.edu.tr/~ee212/
http://www.iro.umontreal.ca/~feeley/cours/ift2240/doc/assembly/
Interrupciones DOS:
http://spike.scu.edu.au/~barry/interrupts.html#ah0a
Acceso a disco:
http://home.teleport.com/~brainy/diskaccess.htm

10

También podría gustarte