Está en la página 1de 15

Integrantes

Flor Gutiérrez
Diego Oviedo
GUIA 1

a) Primer programa.
En el encabezado del programa ¿por qué se incluye la línea “org 100h”?
Al introducir datos en los registros del microprocesador se usan diferentes formatos
(bases de numeración) ¿cuántos y cuáles son?
La sintaxis de la instrucción MOV define tres campos: instrucción, dato1 y dato2. Al
moverse los datos ¿cuál es la fuente y cual el destino?
Al observar la tabla1 se nota que a la misma instrucción MOV se le asignan diferentes
códigos hexadecimales ¿a qué se debe esto?
¿Cuál es la función que cumple el registro IP dentro del PRIMER PROGRAMA?
En la columna OFFSET de la tabla1, éstos no se incrementan a una razón constante
¿por qué?
b) Segundo programa.

Al comparar las dos primeras instrucciones ¿qué diferencias hay al ejecutarlas, siendo
que las dos son MOV?
En las últimas tres instrucciones se incluyeron corchetes (paréntesis cuadrados) en las
instrucciones ¿Qué diferencias observó en su ejecución respecto a las primeras dos
instrucciones?
¿Por qué al ejecutar la séptima instrucción los datos se almacenan en CX en ese orden
específico?

c) Tercer programa.
Al ejecutar el programa, a medida que hacía las modificaciones ¿qué efecto concreto
logra el cambio en el registro BX?
Al modificar CH ¿qué bits específicos se modificaron para lograr cambios en el fondo y
color de los caracteres?

Esta actividad debe desarrollarse posteriormente a la ejecución de la guía de


laboratorio y tiene por objetivo complementar y ampliar la temática desarrollara
teniendo en mente las actividades futuras.
Investigue:
¿Qué son los modos de direccionamiento?
¿Cuántos y cuáles modos de direccionamiento tiene el microprocesador 8086?
¿Qué modos de direccionamiento posee la instrucción MOV?
¿Qué diferencias hay entre las instrucciones XCHG ya la instrucción MOV?

GUIA 2

1) Ejecute el programa emulador de microprocesadores EMU8086, haciendo doble clic


en el icono del escritorio.

2) Cree un nuevo documento tipo COM

3) Digite el PRIMER PROGRAMA, recuerde que el encabezado es necesario para crear


un archivo COM.
En esta guía de laboratorio se declararán datos de diferentes maneras, no los pierda de vista.
4) Compile y ejecute el programa paso a paso, monitoreando el registro de estados
(FLAGS) luego de cada operación AND. Anote los datos con los que se opera, los
resultados y las banderas que se activan.
Primer AND
dl=9A ah=F0
Respuesta: 90 (dl)
BANDERAS: Se activaron las banderas SF y PF.

Segundo AND
CX=2CC2 BX=0F0F
Respuesta: 0C02 (cx)
BANDERAS: Se desactivaron las banderas SF y PF.

Tercer AND
CX=0C02 CX=0C02
Respuesta: 0C02 (cx)
BANDERAS: No hubo cambios

5) Modifique las líneas que contienen la instrucción AND, sustituyéndola por la


instrucción OR. Repita desde el paso 4.
Primer OR
dl=9A ah=F0
Respuesta: FA (dl)
BANDERAS: Se activaron las banderas SF y PF.

Segundo OR
CX=2CC2 BX=0F0F
Respuesta: 2FAF (cx)
BANDERAS: Se desactivo la bandera SF.

Tercer OR
CX=2FAF CX=2FAF
Respuesta: 2FAF (cx)
BANDERAS: No hubo cambios

6) Sustituya ahora por la instrucción XOR y repita el paso 4.

Primer XOR
dl=9A ah=F0
Respuesta: 6A (dl)
BANDERAS: Se activa la bandera PF.

Segundo XOR
CX=2CC2 BX=0F0F
Respuesta: 23CD (cx)
BANDERAS: Se desactivo la bandera PF.

Tercer XOR
CX=23CD CX=23CD
Respuesta: 0000(cx)
BANDERAS: Se activaron ZF y PF

7) Digite el SEGUNDO PROGRAMA, que está dividido en dos partes.


8) Ejecute paso a paso el primer bloque. Anote los datos con los que se realizan las
operaciones y los resultados de las mismas, los registros que intervienen en el proceso
y el estado de las banderas en cada paso del proceso.
Primer XOR
dl=1A AX=2CC2
Respuesta: 36 (dl)
BANDERAS: Se activa la bandera PF.

Segundo XOR
Dl=36 00FF
Respuesta: C9 (cx)
BANDERAS: Se activa la bandera SF.

9) Ejecute ahora el segundo bloque y anote los datos con los que se opera, los
resultados y las banderas que se activan durante el proceso.
Tercer XOR
dl=1A AX=2CC2
Respuesta: 36 (dl)
BANDERAS: Se desactivo la bandera SF.

NOT
Dl=36
Respuesta: C9 (cx)

10) Modifique la tercera y séptima instrucción del programa escribiendo


xor ah, dl
11) Repita los pasos 8 y 9 ¿qué diferencias nota?

Primer XOR
ax=2CC2 dl=1A
Respuesta: 36 (ah)
BANDERAS: Se activa la bandera PF.

Segundo XOR
Dl=1A 00FF
Respuesta: E5 (dl)
BANDERAS: Se activa la bandera SF y se desactiva la PF.

Tercer XOR
AX=2CC2 dl=1A
Respuesta: 36 (al)
BANDERAS: Se desactivo la bandera SF y se activó PF.

NOT
Dl=1A
Respuesta: Se activaron y desactivaron las mismas banderas pero en diferente orden.

12) Como se ha visto en los programas anteriores, algunas de las banderas se activan
del resultado de una instrucción. Pero también algunas banderas se pueden activar o
desactivar mediante instrucciones específicas, sin tomar en cuenta el resultado de
alguna operación. Como un ejemplo inserte la siguiente modificación en el SEGUNDO
PROGRAMA:

13) Ejecute paso a paso el programa monitoreando simultáneamente el estado de las


banderas, note como se activan o desactivan.
¿Cuáles son sus conclusiones?
Que se pueden modificar las banderas manualmente con el ingreso de
algunos comandos, como: stc, std, cli, clc, cld, sti, etc. Donde cl se usa
para desactivar y st para activar.

14) Digite el TERCER PROGRAMA:


15) Ejecute solo las primeras dos instrucciones, monitoreando las banderas ¿Cuáles se
activaron?, ¿cuál fue el resultado de la operación? ¿cómo interpreta el resultado?
AND
AH=B9 40h
RESULTADO =00
Se activaron las banderas PF y ZF.
AH almacena un 00, es por eso que la bandera ZF se activó, y también que es un
número par por eso PF se activó.

16) Ejecute hasta la instrucción TEST y conteste otra vez las preguntas del punto 15
del procedimiento.
OR
AH=B9 01
RESULTADO =00

TEST
AH=B9 40h
RESULTADO =40

Se desactivaron ZF y PF luego de ejecutar la instrucción OR, y cuando se ejecutó la


instrucción TEST se activaron nuevamente, pero con TEST no cambiaron los valores de
AH.

17) En las instrucciones 2ª y 5ª cambie los dos datos 40h por 08h y repita los pasos
del 14 al 16, ¿cómo se modificó el resultado del programa? Anote su respuesta.

AND
AH=B9 08h
RESULTADO =00

OR
AH=B9 01
RESULTADO =00

TEST
AH=B9 08h
RESULTADO =40

Luego de AND no se activa ninguna bandera, luego de OR se activa la bandera PF, y


por ultimo cuando se ejecuta la instrucción TEST se desactiva la bandera PF.

Análisis de resultados

a) Primer programa.

¿Qué objetivos se buscan al usar la mascara1 (F0h) con las tres diferentes
instrucciones lógicas?
-Hacer notar la notable diferencia que tiene los tres tipos de puertas lógicas.

Cuando se ejecuta la primera instrucción AND el bit D7 termina en estado alto y se


activa la bandera S, en la segunda instrucción AND también termina en alto, pero esta
vez no se activa la bandera ¿por qué?
-Esto se debe a que ya se encuentra activada anteriormente y es por eso que se
conserva.

Cuando se ejecuta la tercera instrucción lógica, ya sea AND u OR, las banderas
reaccionan de forma similar. Pero cuando se ejecuta con la instrucción XOR no ¿por
qué ocurre eso?
-Porque XOR realiza una comparación de similitud.

En el programa se declaran datos para hacer las operaciones ¿dónde se guardan estos
datos?
-Estos datos se almacenan en la memoria principal.

b) Segundo programa.

Cuando se ejecutan el primer bloque del programa el resultado se almacena en DL, lo


mismo ocurre con el segundo bloque; los dos resultados son idénticos, pero el estado
de las banderas no lo es ¿por qué?
-Porque las operaciones lógicas que se van realizando, hacen que cambien los flags

Al modificar el programa, tanto los resultados como las banderas terminaron en


distintos estados ¿cuáles fueron los cambios específicos que observo?
-Los valores de las operaciones se almacenan en el registro que se le ha indicado.

c) Tercer programa.
¿Cuál es la diferencia fundamental que noto a comparar las instrucciones AND y TEST?
-AND realiza una comparación la cual modifica y almacena el resultado en un registro,
también la bandera respectiva se activa o desactiva.
-TEST realiza la operación lógica "AND" de dos operando, pero NO afecta a ninguno de
ellos, SÓLO afecta al registro de estado.
Afecta a todos los bits del registro de estado, de la misma manera que la instrucción
AND.

¿Qué relación existe entre los bit que deseamos probar y el valor específico de la
máscara seleccionada?
-La máscara nos permite cambiar varias instrucciones; en cambio el bit lo asignamos
por cada instrucción.

TAREA COMPLEMENTARIA

En el programa se declaran algunos datos que serán operados ¿dónde se almacenan


estos datos?
-Estos datos son almacenados en segmentos de memoria.
Investigue que son las directivas DB y DW
-DB, DW se usan para asignar espacio a las variables en memoria. DB tamaño byte,
DW tamaño WORD.

Escriba un programa que dado un dato almacenado en AX invierta el estado de los bits
impares desde el D5 hasta el D1, borre los bits pares desde el D6 hasta el D2 y
coloque en 1 los bits D7 y D0.

GUIA 3
1) Ejecute el programa emulador de microprocesadores EMU8086, haciendo doble clic
en el icono del escritorio.

2) Cree un nuevo documento tipo COM

3) Analice el PRIMER PROGRAMA, note que al inicio se declaran los datos.


¿Con qué datos se realizarán las operaciones y cuáles serán los resultados? ¿Dónde se
almacena el resultado al final de las operaciones?
Los datos serán byte1 byte2 word1 word2 los cuales se guardaran en el espacio de
memoria [011Eh] [011Fh]

4) Digite y emule el programa

5) Antes de ejecutar el programa tome nota del contenido almacenado en las


direcciones 011Eh, 011Fh y 0120h en la TABLA 1, también del estado de las banderas.

6) Ejecute paso a paso el programa, anotando la información solicitada en la TABLA 1,


observando el resultado de las operaciones y el estado de las banderas
¿Concuerda el resultado lo que usted esperaba? _______

MOMENTO DIRECCIONES BANDERAS


011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 90 0 0 0 0 0 0
Después de 1ª suma 90 90 90 0 0 0 1 0 1
Antes de la 2ª suma 13 90 90 0 0 0 1 0 1
Después de la 2ª suma 13 90 90 0 0 0 0 1 0
Después del último MOV 13 DB 79 0 0 0 0 1 0

7) Cargue nuevamente el programa e invierta manualmente el estado del acarreo.


Z = Zero flag: El resultado es cero.
N = Negative flag: El resultado es negativo.
V = Overflow flag: El resultado supera el número de bits que puede manejar la
ALU.
P = Parity flag: Paridad del número de 1 en los datos.
I = Interrupt flag: Se ha producido una interrupción.
C = Carry flag: Acarreo de la operación realizada.

MOMENTO DIRECCIONES BANDERAS


011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 90 0 0 0 0 0 1
Después de 1ª suma 90 90 90 0 0 0 1 0 1
Antes de la 2ª suma 13 90 90 0 0 0 1 0 1
Después de la 2ª suma 13 90 90 0 0 0 0 1 0
Después del último MOV 13 DB 79 0 0 0 0 1 0

8) Ejecute paso a paso hasta la primera suma.


¿Cambió el resultado de la operación? SIN CAMBIOS
9) Continúe ejecutando el programa hasta la segunda suma
¿Se dio algún cambio? SIN CAMBIOS

10) Modifique el código fuente sustituyendo las instrucciones ADD por ADC y emule
nuevamente el programa.
MOMENTO DIRECCIONES BANDERAS
011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 90 0 0 0 0 0 0
Después de 1ª suma 90 90 90 0 0 0 1 0 1
Antes de la 2ª suma 13 90 90 0 0 0 1 0 1
Después de la 2ª suma 13 90 90 0 0 0 0 0 0
Después del último MOV 13 DB 79 0 0 0 0 0 0

11) Repita desde el paso 7 y compare con los resultados previos


MOMENTO DIRECCIONES BANDERAS
011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 90 0 0 0 0 0 1
Después de 1ª suma 90 90 90 0 0 0 1 1 1
Antes de la 2ª suma 14 90 90 0 0 0 1 1 1
Después de la 2ª suma 14 90 90 0 0 0 0 0 0
Después del último MOV 14 DC 79 0 0 0 0 0 0

¿Qué resultados se modificaron?, ¿qué parte no?, ¿por qué cree que se dieron esos
cambios específicos en los resultados?
Cambia el resultado de 011E ya que activamos la bandera de acarreo llevando un 1 de
más. También se activa media ejecución la bandera P
12) Modifique el programa para que funcione como al inicio, pero cambie los datos con
los siguientes valores:

byte1 equ 9Dh


byte2 equ 83h
word1 equ 5938
word2 equ -5938
13) Corra a pasos el programa observando la ejecución de cada instrucción y el estado
de las banderas.
MOMENTO DIRECCIONES BANDERAS
011Eh 011Fh 0120h O S Z A P C
Inicio 90 90 90 0 0 0 0 0 0
Después de 1ª suma 90 90 90 1 0 0 1 0 1
Antes de la 2ª suma 20 90 90 1 0 0 1 0 1
Después de la 2ª suma 29 90 90 0 0 1 1 1 1
Después del último MOV 20 00 00 0 0 1 1 1 1

¿Cuál fue el resultado de las operaciones?, ¿Cómo reaccionaron las banderas? y ¿por
qué así y no de otra manera?
El espacio [011Eh] esta con 20
Los espacios [011Fh] [0120h] se encuentras vacíos (NULL)
Luego de la segunda ADD se activa la bandera Z lo cual significa que el resultado es
cero.

14) Analice el SEGUNDO PROGRAMA, ¿dónde se almacena el resultado de las


operaciones? ¿cuál es el resultado de las mismas?
El resultado se almacena en CL y DX , en CL se guardara una resta de bytes mientras
que en DX una resta de words

15) Digite y emule el programa tomando nota del valor de los minuendos y
sustraendos (en formato hexadecimal) con que se realizarán las operaciones en la
TABLA 2.
16) Ejecute paso a paso el programa, observando los resultados de las operaciones y
el estado de las banderas. Anote estos valores en la TABLA 2.
17) Modifique el programa para que se invierta el orden de la operación, de forma que
el minuendo pasa a ser sustraendo y viceversa. Repita el paso anterior tomando nota
en la segunda fila de la TABLA 2.
18) Repita los pasos 16 y 17, pero esta vez active manualmente el acarreo antes de
cada resta ¿observa cambios en las operaciones?
19) Cambie el programa para que funcione como al principio.
20) Sustituya las instrucciones SUB por SBB y repita los pasos anteriores. Complete la
TABLA2
¿Qué diferencias nota entre la ejecución de la instrucción SUB y SBB?
Cuando se cambia acarreo con sbb cambio el resultado. SBB cambia con el acarreo
Instrucción Prueba Minuendo Sustraendo Diferencia O S Z A P C
50 45 0B 0 0 0 1 0 0

45 50 F5 0 1 0 0 1 1
SUB
50 45 0B 0 0 0 1 0 0

45 50 F5 0 1 0 0 1 1
50 45 0B 0 0 0 1 0 0

45 50 F5 0 1 0 1 1 1
SBB
50 45 0A 0 0 0 0 1 0

45 50 F4 0 1 0 0 0 1

Instrucción Prueba Minuendo Sustraendo Diferencia O S Z A P C


6745 0145 6600 0 0 0 0 1 0

0145 6745 9A00 0 1 0 0 1 1
SUB
6745 0145 6600 0 0 0 0 1 0

0145 6745 9A00 0 1 0 0 1 1
6745 0145 6600 0 0 0 0 1 0

0145 6745 99FF 0 1 0 1 1 1
SBB
6745 0145 65FF 0 0 0 1 1 0

0145 6745 9A00 0 1 0 0 1 1

21) Analice el TERCER PROGRAMA ¿qué registros están involucrados en el proceso?


¿qué datos se van a operar? ¿dónde se almacenará el resultado?
22) Digite y emule el TERCER PROGRAMA

23) Ejecute paso a paso, analizando el proceso. Anote los resultados en la primera fila
de la TABLA 3

24) Modifique el dato de CL colocando -06 y ejecute nuevamente el programa. Anote


los resultados en la TABLA 3.

25) Cambien la instrucción MUL por IMUL y el dato -06 por 06.

26) Ejecute el programa y anote los resultados.

27) Cambie el dato por -06, ejecute nuevamente y anote los resultados

Multiplicando
Instrucción Dato Multiplicador Producto

06 FF 06 05 FA
MUL
-06 FF FA F9 06

06 FF 06 FF FA
IMUL
-06 FF FA 00 06

28) Analice el CUARTO PROGRAMA ¿qué registros están involucrados en el proceso?


¿qué datos se van a operar? ¿dónde se almacenará el resultado?
AX Y CL, se opera el dato cl=05 y se almacenara en CL

29) Realice el mismo procedimiento del TRECER PROGRAMA, pero ahora el dato que
será cambiado es 05 y la operación DIV por IDIV. Anote sus resultados en la TABLA 4.

Instrucción Dato Dividendo Divisor Cociente Residuo


05 7B 05 18 03
DIV
-05 7B FB 00 7B

05 7B 05 18 03
IDIV
-05 7B FB E8 03

30) Cambie el dato por 00h y ejecute el programa ¿qué ocurrió?


ERROR DE OVERFLOW división entre cero

Análisis de resultados

a) Primer programa
Tomando en cuenta los datos particulares de cada operación explique el porqué de la
activación o desactivación de las banderas O, S, Z, C y A.
Z = Zero flag: El resultado es cero.
N = Negative flag: El resultado es negativo.
V = Overflow flag: El resultado supera el número de bits que puede manejar la ALU.
P = Parity flag: Paridad del número de 1 en los datos.
I = Interrupt flag: Se ha producido una interrupción.
C = Carry flag: Acarreo de la operación realizada.
Explique porque los resultados de las operaciones cambiaron al usar ADC en lugar de
ADD. Utilice cálculos para fundamentar su explicación.
En el primer problema al usar ADC generamos que se acumule un acarreo de 1 desde
un inicio . Siendo puesto en la primera ADC
ADD=125+150=13
ADC=125+150=13+1=14

b) Segundo programa

Al ejecutar una resta las banderas C y A reaccionan diferente si el minuendo es mayor


o menor al sustraendo, explique por qué basándose en el concepto de préstamo.
C se activa cuando se usa el acarreo y A
Siguiendo el concepto de préstamo de la sustracción si al restar el minuendo
unides o decimales o centenas, se puede prestar un 1 al siguiente unidad-
decimal, decimal centena.
Explique porque los resultados de las operaciones cambiaron al usar SBB en lugar de
SUB. Utilice cálculos para fundamentar su explicación.
SBB
SUB
c) Tercer programa

¿Cómo se especifica en una instrucción de multiplicación que se desea trabajar con


números de un byte?
En qué registros se almacenan los datos y el resultado de una multiplicación de un
byte?
Se guarda en nuestro caso en AX
Explique porque los resultados de las operaciones cambiaron al usar IMUL en lugar de
MUL. Utilice cálculos para fundamentar su explicación.
IMUL
MUL
d) Cuarto programa
¿Cómo se especifica en una instrucción de división que se desea trabajar con números
de un byte?

En qué registros se almacenan los datos y el resultado de una división de un byte?

Explique porque los resultados de las operaciones cambiaron al usar IDIV en lugar de
DIV. Utilice cálculos para fundamentar su explicación.

¿Por qué la última modificación del programa generó un error en la ejecución?


Porque fue una división entre 0

Investigación complementaria
Compare el funcionamiento de la directiva EQU con DB.
EQU
DB
Investigue como se puede realizar una multiplicación de dos números de dos bytes
cada uno.

Investigue como se puede realizar una división de dos números de dos bytes cada uno.

Diseñe dos flujo-gramas que representen el proceso para sumar dos números de 4
bytes cada uno, en el primero se trabajará con registros de 16 bits y en el segundo de
8 bits.