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.