Você está na página 1de 9

PRCTICA 1

INTRODUCCIN AL ENSAMBLADOR DEL 8086: TURBOASSEMBLER

OBJETIVO
Al terminar esta prctica, el alumno ser capaz de: Ensamblar un programa usando el ensamblador del 8086: Turbo Assembler. Conocer los diferentes archivos generados por el ensamblador y el ligador.

ITSON

Manuel Domitsu Kono

Introduccin al Ensamblador del 8086: TurboAssembler

ANTECEDENTES TERICOS
El Microprocesador, es un dispositivo que procesa la informacin contenida en memoria. Esta informacin es una secuencia de nmeros binarios que el microprocesador interpreta como instrucciones codificadas y que en conjunto forman un programa. Este programa con las instrucciones codificadas se denomina programa en Lenguaje Mquina o archivo ejecutable. Si una persona quisiera desarrollar un programa para un microprocesador se le dificultara mucho pensar las instrucciones en trminos de nmeros ya que sta no es la forma natural del pensamiento humano, por lo que es ms conveniente pensar el programa en un lenguaje simblico llamado Ensamblador. En este lenguaje, una instruccin no est representada por un nmero, sino que se representa por una palabra corta que nos dan una idea muy clara de la instruccin que se trata, a esta palabra se le conoce como Mnemnico. Un programa escrito en el lenguaje ensamblador se llama programa fuente. Cada microprocesador tiene su propio lenguaje ensamblador. Para traducir un programa fuente escrito en lenguaje ensamblador a su correspondiente programa en lenguaje mquina se necesita un programa traductor llamado Ensamblador. El proceso de traduccin se conoce como ensamblado. Uno de los ensambladores comerciales para la familia de microprocesadores 80x86 es el programa Turbo Assembler de la compaa Borland International. Turbo Assembler es un macroensamblador ya que adicionalmente tiene un preprocesador que le permite ejecutar directivas de inclusin y expansin de macros. Al ensamblar un programa, Turbo Assembler procesa el programa fuente y genera un archivo objeto el cual est formado por los cdigos de las instrucciones. Sin embargo, este programa an no est listo para correr, es decir, este archivo no es ejecutable ya que sus direcciones estn representadas en forma relativa. Este archivo es un archivo binario. Turbo Assembler adems de generar el archivo objeto, genera un archivo texto en el que aparecen el listado del programa fuente y su equivalente en cdigos numricos o cdigo mquina. En este archivo podemos verificar la forma en que fue ensamblado el programa fuente. Una vez que se tiene el programa objeto este se puede convertir en programa ejecutable usando un programa ligador. Un programa ligador le agrega al cdigo objeto la informacin necesaria para que el programa sea ejecutable, asimismo si el programa consta de varios mdulos y/o contiene llamadas a subrutinas que se encuentren en una biblioteca, el ligador establece las ligas entre el cdigo de esos mdulos y bibliotecas. El programa ligador de Turbo Assembler se llama Tlink. Tlink tambin genera un archivo texto en el que se detallan las direcciones y tamaos que ocupan cada uno de los segmentos e instrucciones del programa ejecutable.

ITSON

Manuel Domitsu Kono

Prctica 1

Introduccin al Ensamblador del 8086: TurboAssembler

DESARROLLO
1. Abra una ventana de DOS. 2. Verifique que los directorios c:\tc, c:\tasm y c:\td estn en la lista de rutas de bsqueda del sistema operativo. Para ello ejecute el comando PATH, tecleando: path Aqu aparecen la lista de los directorios en la lista de rutas de bsqueda. Si los tres directorios mencionados aparecen en la lista, pase al paso 8. 3. Si los tres directorios no aparecen en la lista de bsqueda, hay que incluirlos con el comando PATH en el archivo AUTOEXEC.BAT y ejecutar este archivo por lotes para que tenga efecto. Para ello haga que el directorio de trabajo sea el directorio \TC tecleando: cd \tc 4. Entre al programa Turbo C tecleando: tc 5. Cargue en el editor de Turbo C el archivo \autoexec.bat. 6. Busque la lnea que empieza con: path= o con set pah=. Si hay espacio en la lnea agregue a la lista de directorios los tres directorios mencionados, separados por puntos y coma (;): ;c:\tc;c:\tasm;c:\td Si no hay espacio en la lnea, agregue enseguida una nueva lnea con lo siguiente: path=%path%;c:\tc;c:\tasm;c:\td Guarde el archivo y salga del programa Turbo C. 7. Ejecute el archivo por lotes AUTOEXEC.BAT, tecleando: \autoexec 8. Inserte el disquete de trabajo en la unidad de disco A y cambie la unidad de disco por ausencia a la unidad A, tecleando: a: 9. Desde la unidad de disco A, llame al editor de Turbo C tecleando: tc

ITSON

Manuel Domitsu Kono

Introduccin al Ensamblador del 8086: TurboAssembler

10. Teclee el siguiente programa fuente en el lenguaje ensamblador y grbelo en su disquete con el nombre primer.asm: PRIMER.ASM ;********************************************************** ; PRIMER.ASM. ; ; Este programa ilustra la estructura de un programa en ; ensamblador. Tambin muestra las principales directivas ; para el ensamblador. ;********************************************************** ;****** CDIGO DE INICIO ********************************** ideal dosseg model small stack 256 ;****** DECLARACIN DE CONSTANTES SIMBLICAS ************** cte equ 10 ;****** VARIABLES DEL PROGRAMA **************************** dataseg codsal db 0 dato1 db ? dato2 db ? resul db ? ;****** CDIGO DEL PROGRAMA ******************************* codeseg inicio: mov ax, @data ; Inicializa el mov ds, ax ; segmento de datos mov add add mov salir: mov mov int ah, 04Ch al, [codsal] 21h al, [dato1] al, [dato2] al, cte [resul], al ; resul = dato1 + dato2 + ; cte

;****** CDIGO DE TERMINACIN ***************************** end inicio

11. Salga del programa Turbo C. 12. Ensamble el programa PRIMER.ASM, tecleando:

ITSON

Manuel Domitsu Kono

Prctica 1

Introduccin al Ensamblador del 8086: TurboAssembler

tasm /l /zi primer.asm Turbo Assembler comenzar a ensamblar al programa desplegando: Turbo Assembler Version 1.0 by Borland International Assembling file: Error messages: Warning messages: Remaining memory: PRIMER.ASM None None 390k Copyright (c) 1988

13. Use el comando DIR para observar los archivos generados por el programa Turbo Assembler, tecleando: dir Estos son: primer.obj primer.lst Utilice el editor de Turbo C para examinar el contenido del archivo PRIMER.LST. En la pantalla del editor aparecer lo siguiente: PRIMER.LST
Turbo Assembler PRIMER.ASM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Version 1.0 02-07-98 11:13:09 Page 1

;*********************************************************** ; PRIMER.ASM ; ; Este programa ilustra la estructura de un programa en ; ensamblador. Tambin muestra las principales directivas ; para el ensamblador. ;*********************************************************** ;****** CDIGO DE INICIO *********************************** ideal dosseg model small stack 256 ;****** DECLARACIN DE CONSTANTES SIMBLICAS *************** = cte equ 10

0000 0000

;****** VARIABLES DEL PROGRAMA **************************** 0100 0000 0001 0002 0003 00 ?? ?? ?? codsal dato1 dato2 resul dataseg db db db db 0 ? ? ?

;****** CDIGO DEL PROGRAMA *******************************

ITSON

Manuel Domitsu Kono

Introduccin al Ensamblador del 8086: TurboAssembler

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

0004 0000 0000 0003 0005 0008 000C 000E 0011 0011 0013 0016

codeseg inicio: B8 0000s 8E D8 A0 02 04 A2 0001r 06 0002r 0A 0003r salir: B4 4C A0 0000r CD 21 mov mov int ah, 04Ch al, [codsal] 21h mov mov mov add add mov ax, @data ds, ax al, [dato1] al, [dato2] al, cte [resul], al ; Inicializa el ; segmento de datos ; resul = dato1 + dato2 + ; cte

;****** CDIGO DE TERMINACIN ****************************** end Version 1.0 inicio Page 2

Turbo Assembler Symbol Table Symbol Name ??DATE ??FILENAME ??TIME ??VERSION @CODE @CODESIZE @CPU @CURSEG @DATA @DATASIZE @FILENAME @WORDSIZE CODSAL CTE DATO1 DATO2 INICIO RESUL SALIR

02-07-98 11:13:09

Type Text Text Text Number Text Text Text Text Text Text Text Text Byte Text Byte Byte Near Byte Near

Value "02-07-98" "PRIMER " "11:13:09" 0100 _TEXT 0 0101H _TEXT DGROUP 0 PRIMER 2 DGROUP:0000 10 DGROUP:0001 DGROUP:0002 _TEXT:0000 DGROUP:0003 _TEXT:0011 Combine Class Stack Public Public STACK DATA CODE

Groups & Segments DGROUP STACK _DATA _TEXT

Bit Size Align Group 16 0100 Para 16 0004 Word 16 0018 Word

Observe que del lado derecho de la pantalla aparece el cdigo fuente. El nmero de lnea aparece a la izquierda seguido de la direccin relativa donde estar almacenada la instruccin o dato y posteriormente el cdigo de la instruccin. Por ejemplo, la lnea 24:
24 0001 ?? dato1 db ?

Aqu la directiva db reserva un byte de memoria en la localidad 0001h del segmento de datos y se le ha asignado el smbolo dato1. El nmero 24 es el nmero de lnea en la que se encuentra esta directiva en el programa fuente. El valor de 0001 es la direccin reservada para la variable dato1,

ITSON

Manuel Domitsu Kono

Prctica 1

Introduccin al Ensamblador del 8086: TurboAssembler

?? significa que la variable no ha sido inicializada. Compare esta lnea con la lnea 23 en la que la variable codesal est inicializada a 0. La lnea:
35 0005 A0 0001r mov al, [dato1] ; resul = dato1 + dato2 +

muestra el formato generado por el ensamblador para una instruccin. El primer nmero corresponde a la lnea en la que se encuentra esta instruccin en el programa fuente. Enseguida aparece la direccin en la que ser almacenado el cdigo. Despus aparece el cdigo de la instruccin. Note que los comentarios al final de la lnea no producen cdigo. 14. Salga del editor de Turbo C. 15. Para convertir el programa objeto en un programa ejecutable usaremos el programa TLINK.EXE, tecleando: tlink /v /m /s /l primer TLink empezar a convertir el programa desplegando lo siguiente: Turbo Link Version 2.0 Borland International Copyright (c) 1987, 1988

16. Use el comando DIR para observar los archivos generados por el programa TLink, tecleando: dir Estos son: primer.map primer.exe 17. Utilice el editor de Turbo C para examinar el contenido del archivo PRIMER.MAP. En la pantalla del editor aparecer lo siguiente: PRIMER.MAP
Start Stop Length Name Class CODE DATA STACK 00000H 00017H 00018H _TEXT 00018H 0001BH 00004H _DATA 00020H 0011FH 00100H STACK Detailed map of segments 0000:0000 0018 C=CODE S=_TEXT G=(none) M=PRIMER.ASM ACBP=48 0001:0008 0004 C=DATA S=_DATA G=DGROUP M=PRIMER.ASM ACBP=48 0002:0000 0100 C=STACK S=STACK G=DGROUP M=PRIMER.ASM ACBP=74 Address Publics by Name

ITSON

Manuel Domitsu Kono

Introduccin al Ensamblador del 8086: TurboAssembler

Address

Publics by Value

Line numbers for pRIMER.obj(PRIMER.ASM) segment _TEXT 32 0000:0000 33 0000:0003 37 0000:000C 39 0000:000E 46 0000:0016 Program entry point at 0000:0000 35 0000:0005 44 0000:0011 36 0000:0008 45 0000:0013

Este archivo nos muestra cmo estn distribuidos los segmentos a lo largo del mapa de memoria. Este archivo es utilizado por algunos depuradores para mostrar las etiquetas y nombres simblicos al depurar un programa. De otra manera slo mostrara sus valores numricos. 18. Cargue en el editor de Turbo C el programa fuente PRIMER.ASM y modifique la lnea 35 para que en lugar de tener la instruccin: mov al, [dato1] ; resul = dato1 + dato2 + cte

se tenga un error de sintaxis: mob al, [dato1] ; resul = dato1 + dato2 + cte

Grabe el programa y salga del editor. 19. Trate de ensamblar el programa, repitiendo el paso 12. El ensamblador desplegar el siguiente mensaje de error:
Turbo Assembler Version 1.0 Copyright (c) 1988 by Borland International

Assembling file: PRIMER.ASM **Error** PRIMER.ASM(35) Illegal instruction Error messages: 1 Warning messages: None Remaining memory: 390k

20. Observe en el editor de Turbo C que en el archivo PRIMER.LST generado al intentar ensamblar el programa aparece un mensaje de error en la lnea donde ste se encuentra. 21. Corrija el error y vuelva a ensamblar y ligar el programa, pasos 12 y 15. 22. A continuacin se presenta un archivo de procesamiento por lotes (Batch) que permite automatizar el proceso de ensamblar y ligar un programa en ensamblador. Utiliza el editor de Turbo C para crearlo y grbelo en su disquete de trabajo, con el nombre ASSM.BAT. Guarde tambin una copia de este archivo. ASSM.BAT Rem Este archivo de procesamiento por lotes ensambla y liga un rem programa fuente usando el macroensamblador del 8086: rem TURBO ASSEMBLER y el ligador TLINK de Borlant Int. @echo off rem Si no se incluyo el nombre del archivo
ITSON Manuel Domitsu Kono

Prctica 1

Introduccin al Ensamblador del 8086: TurboAssembler

if $$%1 == $$ goto ERROR1 rem Si no existe el archivo if not exist %1.asm goto ERROR2 rem llama al ensamblador tasm /l /zi %1.asm rem Si hubo un error al ensamblado if errorlevel 1 goto FIN rem Llama al ligador tlink /v /m /s /l %1 goto FIN :ERROR1 echo . echo Uso: ASSM nomArch (omita la extension .asm) echo . goto FIN :ERROR2 echo . echo No existe el archivo %1.asm echo . :FIN

23. La sintaxis para ensamblar y ligar un programa fuente utilizando el archivo por lotes ASSM.BAT, es: assm nomArch donde nomArch es el nombre del archivo con el programa fuente, sin la extensin. Ensamble y ligue el programa PRIMER.ASM, tecleando: assm primer 24. Verifique que el programa PRIMER.ASM ha sido ensamblado y ligado listando los archivos generados.

ITSON

Manuel Domitsu Kono

Você também pode gostar