Sei sulla pagina 1di 12

UNIVERSIDAD TECNOLÓGICA DE PANAMÁ

FACULTAD DE INGENIERÍA DE SISTEMAS COMPUTACIONALES


LICENCIATURA EN INGENIERÍA DE SISTEMAS Y COMPUTACIÓN

ORGANIZACIÓN Y ARQUITECTURA DE COMPUTADORAS

PROFESOR:
SERGIO A. COTES M.

LABORATORIO #3
TURBO ASSEMBLER

INTEGRANTES:

OSCAR BARAHONA 8-913-1133


EDWIN CHEN 8-918-250
FERMÍN OSORIO 8-911-1410

GRUPO 1IL-132
3er AÑO – 2do SEMESTRE

26 DE SEPTIEMBRE DE 2017

Prof. Sergio A. Cotes M.,


Laboratorio # 3
Organización y Arquitectura de Computadoras
Tema: Turbo Assembler

Grupos de trabajo:

Se podrá trabajar individualmente, pero el informe se presentará por grupo de máximo cinco
integrantes. Los mismos del grupo definido para los proyectos. Se requiere que el informe sea el resultado
de un proceso de análisis, investigación y discusión del tema.

Objetivos:

 Utilizar el Turbo assembler ( TASM y TLINK ) para la creación y ejecución de programas.


 Monitorear el estado de los principales registros del procesador a través de los diferentes comandos del
programa DEBUG
 Conocer la estructura básica de un programa en assembler

Procedimiento:

1. Vaya al directorio raíz de Windows y cree una carpeta llamada Lab3. Salve allí los programas TASM y
TLINK de assembler. Guarde en esta carpeta todos los archivos a crear y utilizar de este laboratorio.
2. Utilice el Bloc de Notas para introducir el programa de assembler. ( ver al final… )
3. Salve el programa con extensión (.asm) dentro de su directorio Lab3.
4. Vaya al DOS y ubíquese en el directorio raíz. Luego, diríjase al directorio donde grabó su programa.
Para eso utilice el comando:
cd.. enter ... ( directorio raíz )
cd lab3 enter ... ( carpeta lab3 )
5. Utilice el Turbo Assembler para compilar su programa: Debe tener los dos archivos TASM y TLINK
instalados en su PC en dicho directorio o carpeta y su programa fuente ( nombre.asm )

Formato:
TASM nombre del programa.asm / l ( l es para un listado generado que tendrá extensión .lst )

Por ejm: TASM lab3.asm / l ( es una “ele”, no un “uno” )

Turbo Assembler Version 1.0 Copyright (c) 1988 by Borland International

Assembling file: LAB3.ASM


Error messages: None
Warning messages: None
Remaining memory: 455k

Nota: Puede ver el listado en WORD u otro editor. Vaya a Windows y verifique el listado. El archivo
con extensión (.lst), no el de extensión ( .asm ). Si tiene errores debe ir al Bloc de Notas a corregirlos,
salvar y repetir el proceso.

Si no hay errores, pasamos a enlazar o “linkear” el programa:

Prof. Sergio A. Cotes M.,


TLINK nombre del programa (sin extensión)

Si todo está correcto debe contener en su directorio algo “parecido” a esto: ( no importa los tamaños )

LAB3 ASM 2,119 02/05/06 6:12p lab3.asm


LAB3 OBJ 297 02/05/06 7:26p LAB3.OBJ
LAB3 MAP 232 02/05/06 7:38p LAB3.MAP
LAB3 EXE 648 02/05/06 7:38p LAB3.EXE
LAB3 LST 6,084 02/05/06 7:26p LAB3.LST
5 archivos 9,380 bytes

Verifique con el comando de DOS dir, para ver que hay en su directorio. cls, limpia la pantalla en DOS.

Ahora... Antes de hacer otra cosa, revise y analice su programa. Este es el mismo programa creado en los
laboratorios anteriores, con la diferencia de que ahora usamos variables y nosotros NO decidimos dónde se
guarda en memoria, sino el sistema operativo. Verifique el CS, DS, SS y ES.

Revise la estructura del programa, los segmentos, variables y registros, procedimientos e interrupciones.
Después de “comprender” la estructura de su programa, vuelva al DOS.

Turbo assembler le crea un programa ejecutable (.exe), el cual también puede revisarse con DEBUG,
aunque no es tan sencillo ubicar todas las instrucciones porque se agregan otras…resultado del compilador.

6. Ejecute su programa: Escriba el nombre y teclee “enter”. Qué respuesta obtuvo ? Por qué sucede
esto? Punto (A)
7. Escriba el comando DEBUG nombre del programa.exe y presione “enter”. Esto carga su programa
para verificar su ejecución. Ahora vamos a seguirlo paso a paso…
8. Escriba “r” y presione “enter”. Se mostrarán los 8 registros generales del procesador, los registros de
segmento, el registro IP y el registro de estado. Tome nota del estado de los registros, compare este
resultado con el del primer y segundo laboratorio. Mencione las diferencias. Punto (B)

9. Su programa inicia en el desplazamiento 0000, pero no sabemos hasta donde llega. Comience a avanzar
por la memoria con el comando “p” hasta encontrar el último desplazamiento o instrucción del
programa. Debe observar las instrucciones del programa fuente para tratar de ubicar cuál será la última
instrucción ahora.

Tome nota de las instrucciones de lenguaje hexadecimal para cada instrucción en lenguaje
simbólico que se introdujo a la memoria... y calcule cuántos bytes ocupa el programa. Punto (C).

10. Después de cada ejecución, anote los cambios en todos los registros... (D). Recuerde que la memoria
contiene otras instrucciones que no nos interesan, ubicadas después de nuestro programa. No las
ejecute!.

Compare los resultados de las operaciones aritméticas de este programa vs el primero y segundo. Hay
diferencias en los registros?. Explique (E)

11. Observe qué sucede con el DS...Dónde están almacenados los datos ? Cómo puedo verlos ?. Investigue
(F)

Prof. Sergio A. Cotes M.,


Entregue su informe ( como ud. ya sabe ), con los resultados de los puntos A al F y el listado del programa
fuente compilado en uTurbo Assembler ( lst ). Agrege conclusiones.

PROGRAMA A INTRODUCIR: ( todo lo que esta despues del “;” es comentario )

Page 60,80 ; listado de 60 lineas x 80 col x pag


Title prog1 ; titulo del programa
;----------------------------------
; SEGMENTO DE PILA
;----------------------------------
stacksg SEGMENT para Stack 'stack' ; inicio segmento pila
dw 32 Dup(0) ; define una pila de 32 palabras
stacksg ends ; fin segmento pila
;----------------------------------
; SEGMENTO DE DATA
;----------------------------------
datasg SEGMENT para 'data' ; inicio segmento de datos

; Constantes decimales
var1 dw 0293 ; 125 en hex
var2 dw 0056 ; 38 en hex
var3 dw 0080 ; 50 en hex

; Mensaje a pantalla
mensaje1 db 'Programa Terminado',13,10,'$'

datasg ends ; fin segmento de datos


;----------------------------------
; SEGMENTO DE CODIGO
;----------------------------------
codesg SEGMENT para 'code' ; inicio segmento de codigo

pri proc ; procedimiento principal

assume ss:stacksg,ds:datasg,cs:codesg
mov ax,datasg
mov ds,ax

; inicio del código


mov ax,var1
add bx,var2
mov cx,ax
sub ax,var3
mov dx,ax
mul dx
div cx

; se imprime mensaje a pantalla


mov dx, offset mensaje1 ; carga mensaje a dx
Prof. Sergio A. Cotes M.,
call impre ; llamada a proc impre

; terminar programa
mov ax,4C00h ; petición de terminar programa = 4C00h
int 21h ; Interrupcion del DOS que ejecuta la solicitud

pri endp ; fin proc principal


;--------------------------------
; PROCEDIMIENTO DE IMPRESION
;--------------------------------
impre proc
mov ah,09h ; petición de despliegue de carac.= 09h
int 21h ; interrupcion del DOS que ejecuta la solicitud
ret ; retorna
impre endp
;--------------------------------
codesg ends ; fin del segmento de código

end pri ; fin del programa físico

;---------------------------------
; Comentarios:
;---------------------------------
; Para cadenas de caracteres a ser desplegadas, primero se definen
; en el segmento de datos con la instrucción DB, entre apóstrofes.
; Los valores 13, 10, indican "retorno de carro" y "avanzar a
; siguiente línea" después de imprimir. El símbolo "$" indica
; delimitador de finalización de despliegue.

; Las interrupciones (INT) manejan los procesos de entrada y salida.


; Para identificar el tipo de función que la interrupción va a ejecutar,
; se debe cargar el número de petición en el registro "ah" o "ax" primero y
; después invocar la interrupción respectiva.
;---------------------------------

Prof. Sergio A. Cotes M.,


PUNTO A:

Ejecutando el programa escribiendo ‘nombre del programa’ y tecleando enter.

Nos aparece esto porque el programa ha sido ejecutado completamente. ¿Cómo sabemos que
se ha ejecutado completamente? Pues si observamos en el código del programa en la parte de
segmento de data:

; Mensaje a pantalla
mensaje1 db 'Programa Terminado',13,10,'$'

Aquí podemos ver como se le asigna a mensaje1 el mensaje de Programa terminado. Luego,
despues al final del programa vemos como ese mensaje es movido al dx para posteriormente
llamarlo cuando se finaliza el programa. Es por eso que identificamos que el programa se ha
terminado correctamente.

PUNTO B:

En este Punto estamos cargando el programa para verificar la ejecución. Verificamos primero
todos los registros comparandolo con los del primer y segundo laboratorio.

Primer laboratorio

Segundo Laboratorio

Tercer Laboratorio

Prof. Sergio A. Cotes M.,


Comparando estos dos laboratorios con el ultimo laboratorio podemos ver como cambian los
valores. (sombreados).

Primer Laboratorio Segundo Laboratorio Tercer Laboratorio


AX 0000 0000 FFFF
BX 0000 0000 0000
CX 0000 0000 0088
DX 0000 0000 0000
SP 00FD 00FD 0040
BP 0000 0000 0000
SI 0000 0102 0000
DI 0000 0103 0000
DS 073F 073F 075A
ES 073F 073F 075A
SS 073F 073F 076A
CS 073F 073F 0770
IP 0100 0106 0000

PUNTO C:

Ejecutando el programa por la memoria con el comando p.

Prof. Sergio A. Cotes M.,


Aquí vemos como se ejecuta completamente el programa. Y deducimos que el porgrama va
desde 0000 a 0021 porque el IP cambio. Procedemos a ver las instrucciones:

Prof. Sergio A. Cotes M.,


IP Instrucción HEX Bytes
0000 MOV AX, 076E B86E07 3
0003 MOV DS, AX 8ED8 2
0005 MOV AX, [0000] A10000 3
0008 ADD BX, [0002] 031E0200 4
000C MOV CX, AX 8BC8 2
000E SUB AX, [0004] 2B060400 4
0012 MOV DX, AX 8BD0 2
0014 MUL DX F7E2 2
0016 DIV CX F7F1 2
0018 MOV DX, 0006 BA0600 3
001B CALL 0023 E80500 3
001E MOV AX, 4C00 B8004C 3
0021 INT 21 CD21 2
TOTAL: 35 bytes

PUNTO D:

Ejecutando el programa por la memoria con el comando p. Aquí vemos todas las instrucciones
ejecutadas y los cambios en los registros correspondientes.

Prof. Sergio A. Cotes M.,


Prof. Sergio A. Cotes M.,
PUNTO E:

Al finalizar la ejecución podemos ver el resultado comparado en los tres laboratorios:

Primer Laboratorio Segundo Laboratorio Tercer Laboratorio


AX 009A 009A 009A
BX 0038 0038 0038
CX 0125 0125 0125
DX 00F7 00F7 0006
SP 00FD 00FD 0040
BP 0000 0000 0000
SI 0000 0102 0000
DI 0000 0103 0000
DS 073F 073F 076A
ES 073F 073F 076A
SS 073F 073F 076A
CS 073F 073F 0770
IP 0112 0116 0021

Hay diferencias en registros que no afectan el resultado final de la operación como vemos el
resultado se almacena en AX y en todos los laboratorios es 009A

PUNTO F:

Los datos estan almacenados en el segmento de datos 076E en la dirección 0000, 0002 y 0004.

Se visualiza escribiendo d ds:0000 para observar todos los datos almacenados y leyendo nos
damos cuenta en que direcciones estan los primeros datos que introducimos.

Prof. Sergio A. Cotes M.,


Conclusiones

De este laboratorio podemos concluir que poco a poco vamos aprendiendo sobre como funcionan
los distintos componentes de nuestro computador, empezando por las direcciones de memoria y
los distintos comandos que podemos utilizar para realizar distintos procedimientos utilizando
DOSBox.

Destacamos que es muy importante comprender que es lo que se está haciendo en cada uno de
los procesos y entender el porqué de cada cosa realizada para asi poder tener el conocimiento
objetivo pertinente del laboratorio.

Es una experiencia muy buena porque se aprende de las cosas bases de la computadora, de lo que
no vemos, del procedimiento que el usuario normal no conoce ni ve, es un mundo.

Prof. Sergio A. Cotes M.,

Potrebbero piacerti anche