PRÁCTICA 2: NOMBRE DEL EXPERIMENTO: OBJETIVO

Anuncio
Arquitectura de Computadoras II
Práctica 2
INSTITUTO TECNOLOGICO DE SAN LUIS POTOSI
Departamento de Eléctrica-Electrónica
Profesor: Carlos E. Canto Quintal M.I.
Arquitectura de computadoras II
PRÁCTICA 2:
NOMBRE DEL EXPERIMENTO:
ENSAMBLAR, SALVAR, DESENSAMBLAR Y EJECUTAR UN PROGRAMA CON
EL DEBUG
OBJETIVO:
Aprender como:
1. Codificar instrucciones en lenguaje ensamblador a código de máquina
2. Ensamblar instrucciones en la memoria de la PC
3. Desensamblar instrucciones que están en código de máquina almacenados en la
memoria
4. Almacenar y cargar instrucciones en código de máquina del disco
DESARROLLO DEL EXPERIMENTO:
I.- CODIFICANDO INSTRUCCIONES DEL 8086 A LENGUAJE DE MÁQUINA
Ensamble las siguientes instrucciones a sus equivalentes en código de máquina.
1.- Codifique cada una de las siguientes instrucciones a su código de máquina 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 código a ejecutar. ¿Por qué aparece más código
del introducido?
4.- Ejecuta con el comando “T” la primera instrucción. ¿Qué ocurre con el registro AX? ¿Y con
el registro IP?
5.- Ejecuta la siguiente instrucción. Después, utilizando el comando “R”, modifica el
valor de BH a 12H. Termina de ejecutar las dos líneas restantes.
1
Carlos E. Canto Quintal M.I.
Arquitectura de Computadoras II
Práctica 2
6.- Ensambla, el siguiente código:
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).
¿Cuáles 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
códigos de máquina 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 máquina 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 Número 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
-
2
Carlos E. Canto Quintal M.I.
Arquitectura de Computadoras II
Práctica 2
NOTA: también se pude salvar un programa al disco duro, dándole 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. Después lo
ejecutamos tanto con el comando G ,como directamente invocándolo desde el MS-DOS
El ejecutar el programa nos desplegará un mensaje en la pantalla. Desde el prompt del sistema invoque la
utilería.
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
xxxx:0102
xxxx:0127
xxxx:012A
xxxx:0128
xxxx:012B
xxxx:012D
xxxx:012F
xxxx:0131
-g 100
jmp 12a
;
db 0d,0a,"Este
db 0d,0a,"$"
mov ah,9
;
mov dx,102
;
int 21
;
mov ah,0
;
int 21
;
salta pasando los datos que siguen:
es mi primer programa en el DEBUG"
Función 09 de la Int 21h:
DS:DX -> $-termina la cadena.
escribe la cadena a una salida estándar.
Función 00 de la Int 21h:
Termina el Programa.
APARECERÁ EN PANTALLA EL MENSAJE:
Este es mi primer programa en el DEBUG
Program terminated normally
COMANDOS DEL DEBUG USADOS EN ESTA PRÁCTICA
Go: G [=dirección] [direcciones]
Go es usado para correr un programa y poner puntos de ruptura en el código del programa. La opción
‘=dirección’ es usada para decirle al DEBUG la localidad de inicio. si se usa solo ‘G’ la ejecución
empezará en la localidad apuntada por los registros CS:IP. Puntos de rupturta opcionales ( significan que
el programa se detenga antes de ejecutar el código de cualquiera de esas localidades) de hasta 10 puntos
de ruptura pueden ser simplemente listándolas en la línea del comando.
Assemble: A [dirección]
Crea código de máquina ejecutable en la memoria empezando en CS:0100 (o en la dirección 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 algún dato haya sido ensamblado, tal que comandos
“A” sucesivos (cuando no se especifique dirección ) siempre empezarán en la siguiente dirección.
El proceso de ensamblado se detendrá después de introducer una línea vacía.
3
Carlos E. Canto Quintal M.I.
Arquitectura de Computadoras II
Práctica 2
Unassemble: U [rango]
Ensambla instrucciones en código de máquina a código Ensamblador del 8086. Sin la opción [rango],
usa un offset 100 como su punto de partida, desensambla aproximadamente 32 bytes y recuerda el
siguiente byte con el que empezaría si el comando es usado de Nuevo.
Name: N [pathname] [arglist]
Este comando puede ser usado para cargar archivos a la memoria del DEBUG después de iniciado el
programa, pero su función 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 también es posible cargar un archivo en la memoria del DEBUG
dentro del mismo DEBUG usando el comando “N” y después el comando “L” (sin parámetros) 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 fácil salvra un dato o un programa en ensamblador creado en el DEBUG a
un archivo en el disco duro.
Trace: T [=dirección] [número]
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 instrucción comenzando en
la localidad especificada por los registros CS:IP, detiene la ejecución del programa y
despliega todos los regisatros más una versión desensamblada de la siguiente
instrucción a ser ejecutada el programa .; si se desea que el DEBUG rastree y ejecute
siete instrucciones empezando en la dirección CS:0205 , por lo tanto se puede poner:
-T =205 7
Proceed: P [=dirección] [número]
Proceed actúa exactamente igual que “T” para la mayoría de las instrucciones
…EXCEPTO : que proceed ,“P”, ejecuta inmediatamente todas las instrucciones (más
que rastrearlas una a la vez) dentro de cualquier subrutina CALL, un LOOP una
instrucción de cadena REPeated o cualquier interrupción de software. Esto significa que
en una subrutina o un llamado INT no se tiene que ejecutar una instrucción a la vez con
este comando “P”.
Write: W [dirección] [drive] [primer sector] [número]
El comando WRITE “W” se usa frecuentemente para salvar un programa al disco duro con el
DEBUG.
4
Carlos E. Canto Quintal M.I.
Descargar