You are on page 1of 6

Buses y Perifricos. ITIS.

Ensamblador y Turbo debugger


1
BUSES Y PERIFRICOS
(Prctica de introduccin a ensamblador. Va acompaada del documento Ensamblador
del 8086.doc. Su realizacin no cuenta para la nota de prcticas)

Programacin en ensamblador utilizando TASM, TLINK, y TD


1. Introduccin

La idea de esta prctica es introducir al alumno en el manejo de las herramientas de
desarrollo de programas en ensamblador de la familia de procesadores 8086. Estas
herramientas son:
TASM: ensamblador, que transforma el cdigo simblico con el que trabaja el
programador en cdigo mquina.
TLINK: enlazador, que convierte el cdigo mquina obtenido por TASM en un formato
ejecutable en el sistema operativo base.
TD (Turbo debugger): Una herramienta de depuracin de errores del cdigo. Nos
permite simular la ejecucin del cdigo ejecutable y detectar los posibles fallos que se
revelarn en tiempo de ejecucin.

2. Creacin de un programa en ensamblador

Un programa en ensamblador debe ser introducido con un editor de textos como el
Block de Notas o el WordPad. Se recomienda que su extensin sea .asm. A
continuacin se le somete a TASM.

TASM admite una serie de opciones. Principalmente, en tiempo de desarrollo, nos
interesa /zi, que ensambla el cdigo introduciendo elementos aadidos que permitirn
posteriormente su tratamiento mediante TD. Una vez hemos conseguido un programa
depurado, esta opcin nos perjudica porque genera un cdigo menos eficiente. Otra
opcin de inters es /l, que nos devuelve un archivo con extensin .lst, el cual contiene
un listado del cdigo ya ensamblado. En l podemos observar el cdigo mquina que
asocia con cada instruccin, o la direccin relativa de cada instruccin con respecto al
comienzo de segmento.

El resultado de TASM sobre un archivo de cdigo es un nuevo archivo con extensin
.obj. Este archivo ser el parmetro con que alimentaremos a TLINK. ste tambin
lleva una opcin relacionada con el debugger que, por el momento, siempre
aadiremos: /v.

TLINK nos devuelve un archivo con extensin .exe. El ejecutable. Se podr mandar a
ejecutar directamente sobre MSDOS. En este caso, si ocurren errores, slo podremos
observar un comportamiento extravagante del sistema, que se corresponder poco con lo
que esperbamos de l. Por ello preferimos ejecutarlo en el debugger que nos permitir
ver paso a paso (instruccin a instruccin) la ejecucin y determinar en qu momento se
sale de nuestras previsiones.


Buses y Perifricos. ITIS.
Ensamblador y Turbo debugger
2
3.- Eliminacin de errores. (Uso del TD)
Una vez disponemos del archivo ejecutable (extensin .exe) podemos invocar con l al
Turbo Debugger.
Esta herramienta nos permitir ver el programa fuente as como el cdigo generado por
el ensamblador en sus posiciones de memoria definitivas para la actual ejecucin.
Tambin podemos observar (y modificar) los registros del procesador y los datos que
hayamos situado en memoria (segmento de datos). Nos permitir realizar una ejecucin
"segura" del programa, entendiendo por esto que si el programa alberga errores tenemos
la certeza de que estos no van a perjudicar al sistema, lo que no podemos asegurar si
directamente lo sometemos al msdos. Y principalmente, porque es la opcin ms
prctica, podemos ejecutar el programa instruccin a instruccin, con lo cual
comprobamos que cada instruccin modifica exactamente aquellos recursos que
esperbamos que modificase y de la manera en que desebamos que lo hiciera cuando
escribimos el programa.

Para cargar el programa en el debugger basta invocar a ste con el archivo ejecutable
como parmetro. Si la carga se realiza adecuadamente, estaremos visualizando el cdigo
fuente, en ensamblador, de nuestro programa. A partir de aqu podemos mandar a
ejecutar el programa, tanto de forma completa como paso a paso. En este ltimo caso,
tras cada paso, una flechita indicar en el cdigo fuente cual es la ltima instruccin que
se ha ejecutado.

La opcin CPU del men VIEW nos abrir una ventana en la que podremos ver el
cdigo mquina ya localizado en memoria, con la flechita apuntando a la primera
instruccin a ejecutar. Tambin veremos otra ventana en la que aparecen los registros
del procesador y su contenido se ir modificando en cada paso de ejecucin. Y, por
ltimo, podemos ver el contenido del espacio de memoria que tambin se ir
modificando a medida que vamos ejecutando instrucciones que le afecten.

ACTIVIDADES A REALIZAR.

1 Introducirn el cdigo que viene a continuacin en un archivo de texto utilizando
cualquier editor de textos plano (que no aada controles de edicin): WordPad,
NotePad.
(Documento a generar 1: Un listado del programa con cada instruccin comentada.
Aydese con el listado de instrucciones y directivas.)

2 Ensamblarn y enlazarn el archivo generado hasta obtener un ejecutable. (Este
cdigo en principio no tiene errores, de manera que cualquier problema que surja se
deber a la transcripcin). Realizar una ejecucin en msdos.
(Documento a generar 2: Explicar qu es lo que hace el programa)

3 Cargarn el cdigo en el TD y lo ejecutarn paso a paso.
(Documento a generar 3: Explicar qu funcin realizan las teclas F1, F2, ALT-F5)
(Documento a generar 4: Tratar de identificar en el programa qu secciones de cdigo
realizan cada parte del resultado de ejecucin del programa segn el documento 2)

Buses y Perifricos. ITIS.
Ensamblador y Turbo debugger
3
Bibliografa:
Turbo Debugger 3.0, User's Guide BORLAND
Turbo Assembler 3.0, User's Guide BORLAND
8086/87 Programacin ensamblador en entorno msdos. Miguel Angel Rodrguez
Rosell Ediciones Anaya Multimedia 1990

Buses y Perifricos. ITIS.
Ensamblador y Turbo debugger
4
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')
apuntador DB 'P'
PILA ENDS


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: MOV AH,09h
MOV DX, OFFSET TEXTE
INT 21h
f: MOV AH, 4Ch
INT 21h


CODIGO ENDS
END Todo_es_empezar






Buses y Perifricos. ITIS.
Ensamblador y Turbo debugger
5
INSTRUCCIONES 8086
Transferencia de datos
IN - entrada de bytes o palabra
LAHF - Cargar AH con las banderas
LDS - Cargar puntero usando DS
LEA - Cargar direccin efectiva
LES - Cargar puntero usando ES
MOV - Mover
OUT - Salida de byte o palabra
POP - Recuperar palabra de la pila
POPF - Recuperar banderas de la pila
PUSh - Depositar palabra en la pila
PUSHF - Depositar banderas en la pila
SAHF - Almacenar Ah en banderas
XCHG - Intercambiar dos operandos
XLAT - Traducir
Instrucciones aritmticas
AAA - Ajuste ASCII en suma
AAD - Ajuste ASCII en divisin
AAM - Ajuste ASCII en multiplicacin
AAS - Ajuste ASCII en resta
ADC - Sumar con acarreo
ADD - Sumar (sin acarreo)
CBW - Convertir byte en palabra
CMP - Comparar operandos
CWD - Convertir palabra a doble palabra
DAA - Ajuste decimal en suma
DAS - Ajuste decimal en resta
DEC - Decrementar en uno
DIV - Dividir sin signo
IDIV - Dividir con signo
IMUL - Multiplicar con signo
INC - Incrementar en uno
MUL - Multiplicar sin signo
NEG - Negar/formar complemento a 2
SBB - Restar con acarreo
SUB - Restar (sin acarreo)
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 transferencia del control
CALL - Llamada a procedimiento
JA - Saltar si superior
JAE - Saltar si superior o igual
JB - Saltar si inferior
JBE - Saltar si inferior o igual
JC - Saltar si hay acarreo
JCXZ - Saltar si CX es cero
JE - Saltar si igual
JG - Saltar si mayor
JGE - Saltar si mayor o igual
JL - Saltar si menor
JLE - Saltar si menor o igual
JNA - Saltar si no es mayor
JNAE - Saltar sino es mayor o igual
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 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 interrupcin.
INT - Invocar a la interrupcin
INTO - Interrupcin si desbordamiento
IRET - Retorno de interrupcin
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.

Buses y Perifricos. ITIS.
Ensamblador y Turbo debugger
6
DIRECTIVAS DEL COMPILADOR
Directivas de datos
Definicin de smbolos
EQU - Asigna smbolo a expresin fija
= - Asigna smbolo a expresin variable
Definicin de datos
DB - Definir byte
DW - Definir palabra
DD - Definir doble palabra
DQ - Definir cudruple palabra
DT - Definir diez bytes
Referencias externas
PUBLIC - Definir smbolo pblico
EXTRN - Definir smbolo externo
INCLUDE - Incluir fichero fuente
Control del ensamblador
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.
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
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 - Evaluar condicin y decidir
ELSE - Si condicin es falsa
ENDIF - Fin de estructura condicional
Directivas de listado
Formato del listado
PAGE - Formato de la pgina del listado
TITLE - Ttulo del listado
SUBTTL - Subttulo del listado
Listado de macros
.LALL - Listar macros y expansiones
.SALL - Suprimir listado macros y expansiones
.XALL - Listar slo macros que generan cdigo objeto
Control del listado
.XCREF - Suprimir referencias cruzadas
.CREF - Restaurar listado de referencias cruzadas
.XLIST - Suprimir listado ensamblador
.LIST - Restaurar listado ensamblador
Comentarios
COMMENT - Comentario
Mensajes
%OUT - Emitir un mensaje durante el ensamblaje
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...

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

You might also like