Está en la página 1de 0

Arquitectura de Computadoras II Prctica 2

Carlos E. Canto Quintal M.I.



1
INSTITUTO TECNOLOGICO DE SAN LUIS POTOSI
Departamento de Elctrica-Electrnica

Profesor: Carlos E. Canto Quintal M.I.

Arquitectura de computadoras II



PRCTICA 2:

NOMBRE DEL EXPERIMENTO:
ENSAMBLAR, SALVAR, DESENSAMBLAR Y EJECUTAR UN PROGRAMA CON
EL DEBUG
OBJETIVO:
Aprender como:
1. Codificar instrucciones en lenguaje ensamblador a cdigo de mquina
2. Ensamblar instrucciones en la memoria de la PC
3. Desensamblar instrucciones que estn en cdigo de mquina almacenados en la
memoria
4. Almacenar y cargar instrucciones en cdigo de mquina del disco
DESARROLLO DEL EXPERIMENTO:

I.- CODIFICANDO INSTRUCCIONES DEL 8086 A LENGUAJE DE MQUINA
Ensamble las siguientes instrucciones a sus equivalentes en cdigo de mquina.

1.- Codifique cada una de las siguientes instrucciones a su cdigo de mquina isando los camndos A y
U:
(a) MOV AX,BX RESP.______________
(b) MOV AX, 0AAAAH RESP.______________
(c) MOV AX, [BX] RESP.______________
(d) MOV AX,[0004] RESP.______________
(e) MOV AX,BX+SI] RESP.______________
(f) MOV AX,[SI]+[0004] RESP.______________
(g) MOV AX,[BX][SI]+[0004] RESP.______________

2.-Ensambla, desde el debug, utilizando el comando A, las siguientes operaciones
de transferencia:
MOV AX, 170
MOV BX, 3023
MOV CL, BH
MOV CH,AL

3.- Desensambla, utilizando el comando U, el cdigo a ejecutar. Por qu aparece ms cdigo
del introducido?

4.- Ejecuta con el comando T la primera instruccin. Qu ocurre con el registro AX? Y con
el registro IP?

5.- Ejecuta la siguiente instruccin. Despus, utilizando el comando R, modifica el
valor de BH a 12H. Termina de ejecutar las dos lneas restantes.

Arquitectura de Computadoras II Prctica 2



Carlos E. Canto Quintal M.I.

2
6.- Ensambla, el siguiente cdigo:
MOV AX, 8000
MOV BX, 8000
ADD AX, BX

7.- Ejecuta, con el comando T, las tres instrucciones anteriores y observa las distintas banderas ( flags).
Cules cambian, y por qu?


II.-SALVAR AL DISCO DURO UN PROGRAMA .COM ESCRITO EN EL DEBUG
1.-Cargue a partir de la localidad 100, usando el comando E del Debug, los siguientes
cdigos de mquina de un programa
-E CS:100 B8 23 01 05 25 00 8B D8- 03 D8 8B CB 2B C8 2B C0
:110 EB EE

2.-Compruebe lo que carg usando:
-D CS:100
3.-Qu es lo que ha cargado?
Puede usar el comando U para desensamblar el programa en lenguaje de mquina que acaba de carga
en la memoria para mostrar las correspondientes instrucciones en ensamblador.
-U 100
4.-Para salvar un programa .COM realizado en el DEBUG se deben seguir los siguientes pasos:
use el comando N para darle un nombre al programa.
-N nombre.com

Ponga en el registro BX 0000 y en CX la longitud del programa (en bytes), por ejemplo si el
programa consta de 20h bytes, entonces:
-R BX
:0000
-R CX
:0020 _(se carga CX con el Nmero de bytes de que consta el programa)

use el comando W para escribir el programa ejecutable al disco.
-W

Si se desea saber la longitud en bytes del programa se puede usar el comando H
-H 112 100
0212 0012

Ejemplo : para cargar el programa que se haya escrito en el debug, con el nombre first.com y que tiene una
longitud de 12h (18) bytes, se hace lo siguiente:
-N first.com
-R bx
BX 0290
:0000
-R bx
BX 0000
:
-R cx
CX 0148 el contenido actual de CX
:0012 se modifica el contenido de CX con la longitud del programa en bytes y en hexadecimal
-W se escriben los bytes al disco
Writing 00012 bytes
-

Arquitectura de Computadoras II Prctica 2



Carlos E. Canto Quintal M.I.

3
NOTA: tambin se pude salvar un programa al disco duro, dndole primero una trayectoria y un nombre
de archivo con el comando N (tal como, C:\TEMP\ASCIIDSP.COM) y escribe los bytes con el
commando W a un archivo de esta forma:
-N C:\temp\asciidsp.com
.
.
-W

5.- En esta etapa escribiremos un programa usando el comando A, lo salvaremos al disco duro. Despus lo
ejecutamos tanto con el comando G ,como directamente invocndolo desde el MS-DOS
El ejecutar el programa nos desplegar un mensaje en la pantalla. Desde el prompt del sistema invoque la
utilera.
C:\> debug
Ya en el prompt del DEBUG introducimos con el comando A , empezando en la localidad 100h ,el
siguiente programa:
-a 100
xxxx:0100 jmp 12a ; salta pasando los datos que siguen:
xxxx:0102 db 0d,0a,"Este es mi primer programa en el DEBUG"
xxxx:0127 db 0d,0a,"$"
xxxx:012A mov ah,9 ; Funcin 09 de la Int 21h:
xxxx:0128 mov dx,102 ; DS:DX -> $-termina la cadena.
xxxx:012B int 21 ; escribe la cadena a una salida estndar.
xxxx:012D mov ah,0 ; Funcin 00 de la Int 21h:
xxxx:012F int 21 ; Termina el Programa.
xxxx:0131
-g 100

APARECER EN PANTALLA EL MENSAJE:

Este es mi primer programa en el DEBUG

Program terminated normally



COMANDOS DEL DEBUG USADOS EN ESTA PRCTICA

Go: G [=direccin] [direcciones]
Go es usado para correr un programa y poner puntos de ruptura en el cdigo del programa. La opcin
=direccin es usada para decirle al DEBUG la localidad de inicio. si se usa solo G la ejecucin
empezar en la localidad apuntada por los registros CS:IP. Puntos de rupturta opcionales ( significan que
el programa se detenga antes de ejecutar el cdigo de cualquiera de esas localidades) de hasta 10 puntos
de ruptura pueden ser simplemente listndolas en la lnea del comando.

Assemble: A [direccin]
Crea cdigo de mquina ejecutable en la memoria empezando en CS:0100 (o en la direccin especificada)
de instrucciones en lenguaje ensamblador del 8086 que se hayan introducido. Aunque no se pueden usar
ni macros ni etiquetas, si se pueden usar las pseudo-instrucciones DB y DW ( tal que se puede usar
DB par introducir datos ASCII como: DB Esto es una cadena,00,0A ).
El comando A recuerda la ltima localidad donde algn dato haya sido ensamblado, tal que comandos
A sucesivos (cuando no se especifique direccin ) siempre empezarn en la siguiente direccin.
El proceso de ensamblado se detendr despus de introducer una lnea vaca.

Arquitectura de Computadoras II Prctica 2



Carlos E. Canto Quintal M.I.

4
Unassemble: U [rango]
Ensambla instrucciones en cdigo de mquina a cdigo Ensamblador del 8086. Sin la opcin [rango],
usa un offset 100 como su punto de partida, desensambla aproximadamente 32 bytes y recuerda el
siguiente byte con el que empezara si el comando es usado de Nuevo.

Name: N [pathname] [arglist]
Este comando puede ser usado para cargar archivos a la memoria del DEBUG despus de iniciado el
programa, pero su funcin principal es crear un nuevo archivo bajo el control del sistema operativo sobre
el cual el DEBUG puede escribir datos.
Normalmente, cuando se desea depurar un archivo, se inicia el DEBUG con un comando como este:
C:\WINDOWS>debug test.com . Pero tambin es posible cargar un archivo en la memoria del DEBUG
dentro del mismo DEBUG usando el comando N y despus el comando L (sin parmetros) como
este:
-N c:\temp\test.com
-L
El cual cargar el archivo test.com a la memoria del DEBUG empezando en la localidad CS:100.
El comando N hace bastante fcil salvra un dato o un programa en ensamblador creado en el DEBUG a
un archivo en el disco duro.

Trace: T [=direccin] [nmero]
El commando T es usado para rastrear (seguir) las instrucciones del CPU una a la vez
. si se mete el comando T por sis solo, ejecutar solo una instruccin comenzando en
la localidad especificada por los registros CS:IP, detiene la ejecucin del programa y
despliega todos los regisatros ms una versin desensamblada de la siguiente
instruccin a ser ejecutada el programa .; si se desea que el DEBUG rastree y ejecute
siete instrucciones empezando en la direccin CS:0205 , por lo tanto se puede poner:

-T =205 7

Proceed: P [=direccin] [nmero]
Proceed acta exactamente igual que T para la mayora de las instrucciones
EXCEPTO : que proceed ,P, ejecuta inmediatamente todas las instrucciones (ms
que rastrearlas una a la vez) dentro de cualquier subrutina CALL, un LOOP una
instruccin de cadena REPeated o cualquier interrupcin de software. Esto significa que
en una subrutina o un llamado INT no se tiene que ejecutar una instruccin a la vez con
este comando P.

Write: W [direccin] [drive] [primer sector] [nmero]
El comando WRITE W se usa frecuentemente para salvar un programa al disco duro con el
DEBUG.