Anda di halaman 1dari 20

Taller Capitulo 3 Lenguaje ensamblador y programacin para IBM PC y compatibles

Cristian Suarez Vanegas- 2420101030

Universidad de Ibagu.

Docente a cargo de la materia:

Jos Armando Gallego

Ibagu Tolima

Programa con operaciones sumas, restas, multiplicaciones divisiones e incrementos entre datos y registros Primero grabamos las instrucciones

Ahora vamos a ejecutar instruccin por instruccin

Ahora despus de seguir ejecucin vamos a guardar el programa como un .COM

3.1 Cual es el propsito de cada uno de los siguientes comandos de DEBUG: a. A [ASSEMBLE]: Ensambla instrucciones que se le introduzcan, guardndolas en la direccin siguiente a la que se le llego la ltima instruccin. Cuando se utiliza este comando se le puede dar como parmetro la direccin donde se desea que se inicie el ensamblado b. D [DUM]: Muestra el contenido de una zona de memoria en hexadecimal y en ASCII.

c. E [DIRECIION]: Permite editar, byte por byte, una zona de memoria. Muestra -en hexadecimalel byte de esa posicin y permite escribir otro valor para cambiarlo. d. P [STEP]: Proceder o ejecutar un conjunto de instrucciones relacionadas e. Q [QUIT]: Sirve para salir de DEBUG y volver al DOS f. R [REGISTERS]: Muestra el contenido de los registros de la CPU, as como la prxima instruccin a ejecutar. g. T[TRACE]: Ejecuta la instruccin apuntada por cs:ip y vuelve a DEBUG. Permite ejecutar paso a paso un programa y observar en cada instruccin el efecto producido.

h. U: Desensambla cdigo de mquina y lo pasa a cdigo simblico

3.2 proporcione los comandos de DEBUG para las siguientes necesidades a. Muestre la memoria iniciando en el desplazamiento 264H en el segmento de datos

b. Muestre la memoria iniciando en la localidad 410H

C. ingrese el valor hexadecimal A8B364 en el segmento de datos iniciando desde la localidad 200H Con esto ingresamos los valores hexadecimales A8B364 iniciando desde la localidad 200H

Como podemos ver el valor hexadecimal a8 b3 64 quedo guardado en la localidad 200

D. Muestre el contenido de (i) todos los registros y (ii) solo del registro IP.

E. Desensamble el cdigo de mquina que se encuentra en las localidades desde la 100H hasta 11EH

3.3 proporcione instrucciones en cdigo mquina para las siguientes operaciones: a. mover el valor hexadecimal 4629 al registro AX b. sumar el valor hexadecimal 036 al registro AX Solucin El cdigo mquina para realizar las anteriores operaciones

Podemos ver que los registros estn en cero inicialmente y esta por ejecutarse el comando Mov AX,4629. Despus de esto al registro AX sele sumara 036A, dando como resultado 4993

3.4 suponga que ha utilizado DEBUG para introducir el comando siguiente E CS:100 B8 45 01 05 25 00 El valor 45 hexadecimal supuestamente era 54. Codifique otro comando E para corregir solo el byte que esta incorrecto; esto es cambien el 45 por el 54 en forma directa Solucin Introducimos el cdigo a DEBUG E CS:100 B8 45 01 05 25 00 y se tiene lo siguiente:

Podemos ver que el registro AL queda con el valor 45 ahora lo vamos a corregir con el valor 54

3.5 suponga que ha utilizado DEBUG para introducir el comando E siguiente:

E CS:100 B8 04 30 05 00 30 90 a. Cules son las tres instrucciones simblicas representadas aqu? b. Al ejecutarse este programa usted descubre que el registro AX termina con 6004 en lugar del esperado 0460 Cuales son los dos comandos de DEBUG que se requieren? c. Habiendo corregido las instrucciones, usted ahora vuelve a ejecutar el programa desde la primera instruccin Cules son los dos comandos de DEBUG que se requieren? Solucin a. Las 3 instrucciones representadas en el cdigo son: MOV AX,3004 ADD AX,3000 NOP

b. Esto se debe a que el al guardar los registros en memoria intercambia el byte ms significativo por el menos significativo se esperaba un 0460 y en lugar de esto se obtuvo un 6004 y para corregir esto solo basta con intercambiar las siguientes lneas de cdigo: E CS:100 B8 30 04 05 30 00 90 c. Los dos comando que se requieren cambiar son los siguientes MOV AX,0430 ADD AX,0030

Como se puede ver en la captura de pantalla ejecutando nuevamente las instrucciones con el cdigo corregido ahora si se obtiene en 0460 esperado

3.6 Considere el programa en lenguaje maquina E CS:100 B0 25 D0 E0 B3 15 F6 E3 90 Este programa realiza lo siguiente: Mueve el valor 25 hexadecimal al registro AL.

Recorre el valor 25 hexadecimal al registro AL.

Mueve el valor 15 hexadecimal al registro BL.

Multiplica AL por BL.

Y se puede ver que el resultado final en el registro AX es 0612 3.7 Utilice el comando E de DEBUG para introducir el siguiente programa en lenguaje de maquina: Cdigo de maquina (en 100H) A0 00 02 D0 E0 F6 26 D1 02 A3 02 02 90 Datos (en 200H) 25 15 00 00 Este programa realiza lo siguiente: Mueve el contenido de un byte en DS:0200 (25) al registro AL.

Recorre el contenido de AL un bit a la izquierda. (El resultado es 4A)

Multiplica el AL por un byte contenido en DS:0201 (15)

Mueve el producto de AX a la palabra que inicia en DS:0202

Como se puede ver en a captura de pantalla el resultado final en AX es 0612 ahora para comprobar vamos a ver la posicin de memoria D DS:0200 y veremos el producto almacenado en DS:0202 como 1206

3.8 Para la pregunta 3.7codifique comandos que graben el programa con el nombre TRIAL.COM

Para guardar primero el programa en este caso lo ingresamos con E y una vez ingresamos todo el programa le damos N nombredearchivo.COM

Despus de esto utilic R BX e ingrese 0 para limpiarlo, despus use R CX para mostrar el registro CX y aqu ingresamos el tamao del programa la razn de porque se borra el BX es porque la longitud del programa est en la pareja BX:CX, y por ultimo escribimos W para guardar el archivo

Y podemos verificar que efectivamente el programa quedo guardado

3.9 Utilice el comando A de DEBUG para introducir las siguientes instrucciones:

Ahora desensamble y rastree su ejecucin hasta NOP y revise el valor en el BX despus de cada instruccin.

Despus de revisar el valor de BX instruccin a instruccin se puede ver que el valor final de BX es 88H

3.10 Cual es el propsito de la instruccin INT? Generar una interrupcin de software. Se necesita el nmero de interrupcin formato de byte de valor Cuando est escrito en lenguaje ensamblador, la instruccin se escribe as: INT X Donde X es la interrupcin de software que debe ser generada (0-255). Cuando se genera una interrupcin de software, el procesador llama a uno de los 256 funciones sealadas por la tabla de direcciones de interrupcin, que se encuentra en los primeros 1024 bytes de memoria, Por tanto, es totalmente posible utilizar una instruccin de gran llamada para iniciar la interrupcin funcin manualmente despus de empujar el registro de bandera. Una de las interrupciones de software ms tiles DOS era 0x21 interrupcin. Al llamarlo con diferentes parmetros en los registros (en su mayora ah y otros) se puede acceder a varias operaciones de entrada y salida, salida de cadena, etc.