Vous êtes sur la page 1sur 16

EJERCICIOS

EJERCICIOS GNUSIM 8085

EJERCICIO 1

1. Analice el siguiente programa

Address Instrucciones Lenguaje de Máquina


(Hexadecimal) (Assembly Language) (Hexadecimal)

0822C NOP 00
0822D IN 00 DB 00
0822F ADD A 87
08230 ADD A 87
08231 OUT 00 D3  00
08233 JMP 08822D C3  0000

Lo que pretende el programa es crear un bucle en el que se repita indefinidamente un 
proceso de suma de una cantidad con sigo misma y ese resultado volver a sumarlo 
así mismo, para ello toma el valor del puerto 00 y luego lo presenta el resultado en 
ese mismo puerto.

Existe un error cuando el JMP se comunica con 08822D debido a dos circustancias:
1. Al final de digitar el número se debe ubicar H para identificarlo como valor 
hexadecimal.
2. El JMP se dirige a una dirección inexistente y no permite el flujo continuo del 
programa, pues lo detiene en ese error y no da paso al bucle.

La   solución   que   se   propone   es   considerar   que   el   registro   PC   (en   el   tablero   del 


GNUSIM)    es   un   registro   contador   de   16bits   que   en   todo   momento   contiene   la 
dirección   de   la   siguiente   instrucción   en   ser   ejecutada.   Su   actualización   es 
automática, no obstante puede ser alterado por medio de las instrucciones de salto.

Ejemplo:
JMP 3000h

Fija el valor 3000 hex en el Contador de Programa (PC) causando que la siguiente 
instrucción sea ejecutada desde la dirección 3000h. Esto representa un salto a la 
dirección 3000h (su validación se comprueba en el punto 5)

2. Explique lo que hacen las instrucciones de este programa.

JMP (dirección instrucción o memoria): Crear un bucle infinito, que puede ser 
cargado a memoria. (“Salto incondicional”). Además permite saltar a una dirección de 
instrucción especificada por JMP que es la 08822Dh. 

NOP: Permite ejecutar la siguiente linea de programación y finalizar el ciclo creado 
por  JMP .
ADD( registro a sumar): Suma el valor del registro indicado por ADD al Acumulador 

IN (dirección  puerto): Permite leer un puerto 00 (I/O) 

OUT (dirección  puerto): Permite  presentar por el puerto 00 un dato del 
acumulador.

3. Si el dato que representamos en el puerto de entrada es 05h, ¿qué resultado 
obtendremos a la salida del puerto?
Da el valor en el puerto 00 de 14/16 = 20/10

4. Si el dato es 10h, ¿Cuál será el resultado?
Da el valor en el puerto 00 de 40/16 = 64/10

5. Verifique   sus   contestaciones   ingresando   y   ejecutando   el   programa   en   el 


simulador GNUSIM8085, actualice la memoria 0822D de la última instrucción de 
acuerdo al registro PC de su simulador.
Corrigiendo el error:

EJERCICIO 2

1. Analice el siguiente programa
Address Instrucciones Lenguaje de Máquina
(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
0001 IN 00 DB 00
0003 MOV B,A 47
0004 LDA 0010 3A 10 00
0007 ADD B 88
0009 OUT 00 D3  00
000B JMP 0000 C3  0000
0010 (dato)  45

Carga un valor desde el puerto 00 al acumulador (A) para luego ser movido este valor 
(copia) al registro B y luego tomar el valor de la posición de memoria almacenandolo 
en el acumulador para sumarle el valor del registro B; todo esto en una secuencia 
indefinida.
Existe el mismo problema que el ejercicio 1.

2. Explique lo que hace las instrucciones de este programa.

JMP (dirección instrucción o memoria): Crear un bucle infinito, que puede ser 
cargado a memoria. (“Salto incondicional”). Además permite saltar a una dirección de 
instrucción especificada por JMP que es la 08822Dh. 

NOP: Permite ejecutar la siguiente linea de programación y finalizar el ciclo creado 
por  JMP .
ADD( registro a sumar): Suma el valor del registro indicado por ADD al Acumulador 

IN (dirección  puerto): Permite leer un puerto 00 (I/O) 

OUT (dirección  puerto): Permite presentar por el puerto 00 un dato del acumulador.

LDA(dirección  memoria): Permite cargar al acumulador (A) un valor almacenado 
en la dirección de memoria, especificada por LDA.

MOV(regis. destino, regis. Fuente): Mueve el valor de un registro destino a un 
registro especificado por MOV como fuente.

3. Si el dato que representamos en los interruptores es 0Ah, ¿qué resultado 
obtendremos en el puerto de salida?
Da el valor en el puerto 00 de 37/16 = 55/10

4. Si el dato es 1Fh, ¿cuál será el resultado?
Da el valor en el puerto 00 de 4C/16 = 76/10

5. Verifique   sus   contestaciones   ingresando   y   ejecutando   el   programa   en   el 


simulador GNUSIM8085, actualice la memoria 0000 de la ultima instrucción de 
acuerdo al registro PC de su simulador.

Para corregir el error solo ubicamos en la dirección de JMP el valor de 77B5h.
EJERCICIO 3

1. Analice el siguiente programa. Determine los ciclos de máquina que llevará a 
cabo cada una de sus instrucciones.
Address Instrucciones Lenguaje de Máquina
(Hexadecimal) (Assembly Language) (Hexadecimal)
Ciclos
0000 NOP 00 4
0001 LDA 0010 3A 10 00 13
0004 ADI  02 C6 02 7
0006 JMP 0000 C3 00 00 10
TOTAL CICLOS 34
0010 55 (Dato)

El  programa permite cargar el valor 55 de la posición de memoria 10/ 10 al acumulador 
(A) para luego ser sumado un valor de dos a esta cantidad almacenada en A. Este 
proceso se torna infinito, realizando el mismo proceso  en cada lazo.
Existe el error del ejercicio 1 para corregirlo ubicamos la dirección 8365h en el JMP.

2. Ingrese   el   programa   y   córralo   en   el   simulador   GNUSIM8085   (Actualice   las 


direcciones de memoria de acuerdo a su simulación). Grafique el contenido de 
los registros A,PC y las banderas ejecutando el lazo tres veces.

Corrigiendo el error:
Lazo 1 Lazo 2 Lazo 3
A 39 A 39 A 39
Pc 836A Pc 836A Pc 836A
P  1 P  1 P  1

3. Explique el significado de las banderas de acuerdo al valor que van tomando.

Bandera P:
La bandera de Paridad, P=1 si la suma de unos en el resultado da par,
P=0 si la suma de unos en el resultado da impar.

EJERCICIO 4

1. Analice el siguiente programa. Cargue el valor 43h en el puerto de entrada 00 y 
determine   los   ciclos   de   máquina   que   llevará   acabo   cada   una   de   las 
instrucciones. Dibuje el diagrama de tiempo de los registros.

Address Instrucciones Lenguaje de Máquina


(Hexadecimal) (Assembly Language) (Hexadecimal)
Ciclos
0000 NOP 00 4
0001 IN 00 DB 00 10
0004 OUT 05 D3 05 10
0006 JMP 0000 C3 00 00 10
TOTAL CICLOS 34
El     programa   permite   adquirir   el   valor   de   43h   del   puerto   00   y   almacenarlo   en   el 
acumulador   para   luego   visualizarlo   en   el   puerto   05/10.   Este   ciclo   se   realizará 
indefinidamente.
Existe   en   problema   del   ejercicio   1   y   para   solucionarlo   asignamos   0A9D5h   a   la 
dirección del JMP.

Diagrama de tiempo de los registros:

Cálculos:

Tiempo para el registro A:

TDregistro =T ∗LoopT −state∗N10

Donde T es el periodo del reloj del CPU, LoopT-States es la suma de todos los T- States de cada
instrucción, y N10 es el valor del delay cargado en el registro en decimal.

Si se supone que el reloj trabaja a una frecuencia de 2MHz, entonces: T = 500 ns.

IN = OUT
43h=67/10
TDA = (500 ns)*(10)*(67) = 0,335 ms
NOP = (500 ns)*(4) = 0,002 ms
JMP = (500 ns)*(10) = 0,005 ms

tiempo total de la ejecución del programa = 0,677 ms

2. Ingrese el programa y córralo. ¿qué relación existe entre lo que representan los 
valore ingresados al puerto de entrada y lo que sale en el puerto asignado?.
Corrigiendo el error:

La relación que existe en el valor, entre los los puerto de salida y entrada, es que 
ambos   números   son   el   mismo   número,   pues   cuando   se   ingresa   el   número   en   el 
puerto 00 este se identifica de manera mnemónico (43h) en forma hexadecimal y el 
resultado que se presenta en el puerto 00 se presenta en manera decimal (67/10). 
EJERCICIO 5

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a   cada   instrucción.   Comienze   con   la   dirección   aleatoria   que   el   simulador 
GNUSIM8085 asigne en su simulación en modo hexadecimal.

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
90B5 LDA 0C020h 3A 20 C0
90B8 MVI B, 88 06 58
90BA ANA B A0
90BB SUI 02 D6 02
90BD OUT 00 D3 00 
90BF STA 0C021h 32 21 C0
90C2 JMP xxxx C3 B5 90

2. Analice el programa. ¿Qué debe suceder cuando lo corremos?

El programa carga el dato 97 de la dirección de memoria 0C020h al acumulador (A), 
luego asigna el valor de 88/10  al registro B. Una vez asignado los datos procede a 
realizar la operación lógica AND entre el registro B y el registro A para luego resta 2/10 
del acumulador (A). Presenta el resultado de la operación en el puerto 00 y almacena 
en la posición de memoria 0C021h. Dentro de un bucle infinito.
Bandera AC: Es el acarreo auxiliar, AC=1 si hay acarreo del bit 3 al 4 durante
una operación aritmética.

3. Ingrese el programa y córralo. Verifique sus predicciones.
4. Detenga el programa y verifique el contenido de la dirección de memoria C021. 
¿Qué contiene?

Contiene el resultado final de las operaciones del programa en forma decimal 62/10

EJERCICIO 6

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a cada instrucción. Recuerde comenzar con la dirección aleatoria de inicio que 
el simulador GNUSIM8085 y usar el modo hexadecimal en la programación.

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
9735 IN 00 DB 00
9737 ORI 07 F6 07
9739 CMA 2F
973A OUT 00  D3 00
973C JMP xxxx C3 35 97

2. Analice   el   programa.   ¿Qué   debe   suceder   cuando   lo   corremos   si   tenemos   el 


número 18h en el puerto de entrada?

El programa carga el valor de 18h desde el puerto 00 y lo almacena en el acumulador, 
para luego realizar la operación lógica OR entre el acumulador y el valor indicado por 
ORI. Despues de realizar las operaciones antes señaladas realiza un complemento 
del acumulador (A) sin afectar las banderas y presentar el resultado por el puerto 00. 
Dentro de un bucle infinito.
3. Ingrese el programa y córralo. Verifique sus predicciones.

EJERCICIO 7

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a cada instrucción. Recuerde comenzar con la dirección aleatoria de inicio que 
el simulador GNUSIM8085 y usar el modo hexadecimal en la programación.

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
E1E5 MVI A, 070h 3E 70
E1E7 MVI B, 0ACh 06 AC
E1E9 XRA B A8
E1EA STA C012 32 12 C0
E1ED HLT 76

2. Analice el programa. ¿Qué debe suceder cuando lo corremos?

Asigna valores a los registros A y B de 70h y Ach, respectivamente para luego realizar 
la   operación   lógica   OR   EXCLUSIVA   entre   el   registro   B   y   el   acumulador   (A).   El 
resultado se lo almacena en la posición de memoria C012h. Esto NO es un bucle 
infinito. Se debe aumenta 0­­­h en la dirección de STA.
3. Ingrese el programa y córralo. Verifique sus predicciones.

EJERCICIO 8

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a cada instrucción. Recuerde comenzar con la dirección aleatoria de inicio que 
el simulador GNUSIM8085 y usar el modo hexadecimal en la programación.

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
C585 MVI A, 099h 3E 99
C587 ANI 01h E6 01
C589 JNZ ETIQUETA 1 C2 F1 CF
C589 MVI A, 0CCh 3E CC
C58B JMP PRESENTA C3 F3 CF
C591 ETIQUETA1:  MVI A, 0F 3E 0F
C593 PRESENTA: OUT 00 D3 00
C595 HLT 76

2. Analice el programa. ¿Qué debe suceder cuando lo corremos?

Asigna al acumulador (A) el valor de 099h para luego realizar la operación lógica 
AND entre el acumulador y el valor especificado por ANI. Después realiza un salto 
delinea así ETIQUETA1 para asignar el valor de 0F y luego presentar el contenido del 
registro  A  por el  puerto  00  evitando ejecutar la  linea  de  programación  de  MVI A, 
0CCh que iba a signar el valor de Cch al acumulador (A).   Se debe aumenta 0­­­h en 
la dirección de STA

3. Ingrese el programa y córralo. Verifique sus predicciones.

EJERCICIO 9

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a cada instrucción. Recuerde comenzar con la dirección aleatoria de inicio que 
el simulador GNUSIM8085 y usar el modo hexadecimal en la programación.

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 0000


E4E5 IN 00 DB 00
E4E7 LAZO: INR B 04
E4E8 SUI 057h D6 57
E4EA JNZ LAZO C2 47 EF
E4EB MVI A, 0FFh 3E FF
E4EC OUT 00 D3 00
E4EE HLT 76
2. Analice   el   programa.   ¿Qué   debe   suceder   cuando   lo   corremos   si   tenemos   el 
número 33h en el puerto de entrada?

El programa toma el valor del puerto 00 para almacenarlo en el acumulador (A), luego 
la instrucción LAZO incrementa en 1 al registro B. Luego se resta el valor de 057h del 
acumulador y este proceso de resta lo realiza indefinida mente por crearse un bucle 
con  JNZ (simpre  y  cuando    la  negación   de   Z =  0)  y la  linea   LAZO  impidiendo  la 
ejecución de las demás lineas de programación. Se afectan las bandera S y C.

Bandera S: Indica el signo del resultado, S=0 si el resultado es positivo,


S=1 si el resultado es negativo.

Bandera C: La bandera de Acarreo, C=1 si el resultado es un número de 9


bits, C=0 si el resultado es un número de 8 bits.

3. Ingrese el programa y córralo. Verifique sus predicciones.

EJERCICIO 10

1. Traduzca el siguiente programa a lenguaje de máquina y asígnele una dirección 
a cada instrucción. Recuerde comenzar con la dirección aleatoria de inicio que 
el simulador GNUSIM8085 y usar el modo hexadecimal en la programación.
(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00
8165 TOPE: IN 00 DB 00
8167 CMI 99 FE 99
8169 JNC TOPE D2 C5
816C MVI A, EE 3E EE
816E OUT 00 D3 00
8170 HLT 76

2. Analice   el   programa.   Describa   en   sus   propias   palabras   la   operación   del 


programa . Puede utilizar un flujograma si le es conveniente.

Existe un error en CMI no es un comando valido, el que parece el remplazo es CPI.
El programa toma el valor del puerto 00 para ser almacenado en el acumulador (A) 
luego, considerando que sea CPI, se realiza una comparación entre el acumulador y 
el valor identificado por CPI que almacenara su respuesta de la comparación en las 
banderas deacuerdo a:
1. Si A < Dato; C=1
2. Si A = Dato; Z=1
3. Si A > Dato; C y Z =0
Debería formrce un buble infinito por parte de JNC pero simpre y cuando ocurra que 
la negación de C sea igual a 0 y este no es el caso;pasado esto se asigna el valor de 
EE (hay que aumenta 0­­­­h) al registro A para luego presentar ese valor por el puerto 
00

3. Ingrese el programa y córralo. Verifique sus predicciones.

Vous aimerez peut-être aussi