20
Taller Capitulo 3 Lenguaje ensamblador y programación para IBM PC y compatibles Cristian Suarez Vanegas- 2420101030 Universidad de Ibagué. Docente a cargo de la materia: José Armando Gallego Ibagué – Tolima

Taller Ensamblador

Embed Size (px)

Citation preview

Page 1: Taller Ensamblador

Taller Capitulo 3 Lenguaje ensamblador y programación para IBM

PC y compatibles

Cristian Suarez Vanegas- 2420101030

Universidad de Ibagué.

Docente a cargo de la materia:

José Armando Gallego

Ibagué – Tolima

Page 2: Taller Ensamblador

Programa con operaciones sumas, restas, multiplicaciones divisiones e incrementos entre datos

y registros

Primero grabamos las instrucciones

Ahora vamos a ejecutar instrucción por instrucción

Page 3: Taller Ensamblador
Page 4: Taller Ensamblador

Ahora después de seguir ejecución vamos a guardar el programa como un .COM

Page 5: Taller Ensamblador

3.1 Cual es el propósito de cada uno de los siguientes comandos de DEBUG:

a. A [ASSEMBLE]: Ensambla instrucciones que se le introduzcan, guardándolas en la dirección

siguiente a la que se le llego la última instrucción. Cuando se utiliza este comando se le puede dar

como parámetro la dirección 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 hexadecimal-

el byte de esa posición 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 próxima instrucción

a ejecutar.

g. T[TRACE]: Ejecuta la instrucción apuntada por cs:ip y vuelve a DEBUG. Permite ejecutar paso a

paso un programa y observar en cada instrucción el efecto producido.

h. U: Desensambla código de máquina y lo pasa a código simbólico

Page 6: Taller Ensamblador

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

Page 7: Taller Ensamblador

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

Page 8: Taller Ensamblador

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

E. Desensamble el código de máquina que se encuentra en las localidades desde la 100H hasta

11EH

Page 9: Taller Ensamblador

3.3 proporcione instrucciones en código máquina para las siguientes operaciones:

a. mover el valor hexadecimal 4629 al registro AX

b. sumar el valor hexadecimal 036ª al registro AX

Solución

El código máquina para realizar las anteriores operaciones

Podemos ver que los registros están en cero inicialmente y esta por ejecutarse el comando Mov

AX,4629.

Después de esto al registro AX sele sumara 036A, dando como resultado 4993

Page 10: Taller Ensamblador

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

Solución

Introducimos el código 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:

Page 11: Taller Ensamblador

E CS:100 B8 04 30 05 00 30 90

a. Cuáles son las tres instrucciones simbólicas 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 instrucción ¿Cuáles son los dos comandos de DEBUG que se requieren?

Solución

a. Las 3 instrucciones representadas en el código son:

MOV AX,3004

ADD AX,3000

NOP

b. Esto se debe a que el al guardar los registros en memoria intercambia el byte más

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 líneas de código:

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 código corregido ahora si se obtiene en 0460 esperado

Page 12: Taller Ensamblador

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.

Page 13: Taller Ensamblador

Mueve el valor 15 hexadecimal al registro BL.

Page 14: Taller Ensamblador

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:

Código 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)

Page 15: Taller Ensamblador

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

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

Page 16: Taller Ensamblador

Como se puede ver en a captura de pantalla el resultado final en AX es 0612 ahora para

comprobar vamos a ver la posición 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

Page 17: Taller Ensamblador

Para guardar primero el programa en este caso lo ingresamos con E y una vez ingresamos todo el

programa le damos N nombredearchivo.COM

Después de esto utilicé R BX e ingrese 0 para limpiarlo, después use R CX para mostrar el registro

CX y aquí ingresamos el tamaño del programa la razón 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

Page 18: Taller Ensamblador

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

Ahora desensamble y rastree su ejecución hasta NOP y revise el valor en el BX después de cada

instrucción.

Page 19: Taller Ensamblador

Después de revisar el valor de BX instrucción a instrucción se puede ver que el valor final de BX es

88H

Page 20: Taller Ensamblador

3.10 Cual es el propósito de la instrucción INT?

Generar una interrupción de software. Se necesita el número de interrupción formato de byte de

valor

Cuando está escrito en lenguaje ensamblador, la instrucción se escribe así:

INT X

Donde X es la interrupción de software que debe ser generada (0-255).

Cuando se genera una interrupción de software, el procesador llama a uno de los 256 funciones

señaladas por la tabla de direcciones de interrupción, que se encuentra en los primeros 1024 bytes

de memoria, Por tanto, es totalmente posible utilizar una instrucción de gran llamada para iniciar

la interrupción función manualmente después de empujar el registro de bandera.

Una de las interrupciones de software más útiles DOS era 0x21 interrupción. Al llamarlo con

diferentes parámetros en los registros (en su mayoría ah y otros) se puede acceder a varias

operaciones de entrada y salida, salida de cadena, etc.