16
EJERCICIOS

ejercicios gnusim

Embed Size (px)

DESCRIPTION

Contiene resolución de ejercicios para GNUSIM8085

Citation preview

Page 1: ejercicios gnusim

EJERCICIOS

Page 2: ejercicios gnusim

EJERCICIOS GNUSIM 8085

EJERCICIO 1

1. Analice el siguiente programa

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 .

Address Instrucciones Lenguaje de Máquina(Hexadecimal) (Assembly Language) (Hexadecimal)

0822C NOP 000822D IN 00 DB 000822F ADD A 8708230 ADD A 8708231 OUT 00 D3  0008233 JMP 08822D C3  0000

Page 3: ejercicios gnusim

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.

Page 4: ejercicios gnusim

Corrigiendo el error:

EJERCICIO 2

1. Analice el siguiente programa

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 .

Instrucciones Lenguaje de Máquina(Hexadecimal) (Hexadecimal)

0000 0000010003 470004 3A 10 000007 880009 D3  00000B C3  00000010 (dato)  45

Address(Assembly Language)

NOPIN 00 DB 00MOV B,ALDA 0010ADD BOUT 00JMP 0000

Page 5: ejercicios gnusim

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.

Page 6: ejercicios gnusim

EJERCICIO 3

1. Analice el siguiente programa. Determine los ciclos de máquina que llevará a cabo cada una de sus instrucciones.

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:

Instrucciones Lenguaje de Máquina(Hexadecimal) (Hexadecimal)

Ciclos0000 00 40001 3A 10 00 130004 C6 02 70006 C3 00 00 10

TOTAL CICLOS 340010 55 (Dato)

Address(Assembly Language)

NOPLDA 0010ADI  02JMP 0000

Page 7: ejercicios gnusim

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.

Lazo 1 Lazo 2 Lazo 3A 39 A 39 A 39

836A 836A 836A1 1 1

Pc Pc PcP  P  P 

Instrucciones Lenguaje de Máquina(Hexadecimal) (Hexadecimal)

Ciclos0000 00 40001 100004 D3 05 100006 C3 00 00 10

TOTAL CICLOS 34

Address(Assembly Language)

NOPIN 00 DB 00OUT 05JMP 0000

Page 8: ejercicios gnusim

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 = OUT43h=67/10

TDA = (500 ns)*(10)*(67) = 0,335 msNOP = (500 ns)*(4) = 0,002 msJMP = (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?.

Page 9: ejercicios gnusim

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). 

Page 10: ejercicios gnusim

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.

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.

(Hexadecimal) (Hexadecimal)

0000 0090B5 3A 20 C090B8 06 5890BA A090BB D6 0290BD D3 00 90BF 32 21 C090C2 C3 B5 90

(Assembly Language)

NOPLDA 0C020hMVI B, 88ANA BSUI 02OUT 00STA 0C021hJMP xxxx

Page 11: ejercicios gnusim

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.

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.

(Hexadecimal) (Hexadecimal)

0000 0097359737 F6 079739 2F973A  D3 00973C C3 35 97

(Assembly Language)

NOPIN 00 DB 00ORI 07CMAOUT 00JMP xxxx

Page 12: ejercicios gnusim

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.

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.

(Hexadecimal) (Hexadecimal)

0000 00E1E5 3E 70E1E7E1E9 A8E1EA 32 12 C0E1ED 76

(Assembly Language)

NOPMVI A, 070hMVI B, 0ACh 06 ACXRA BSTA C012HLT

Page 13: ejercicios gnusim

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.

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, 

(Hexadecimal) (Hexadecimal)

0000 00C585 3E 99C587 E6 01C589C589C58BC591 3E 0FC593 D3 00C595 76

(Assembly Language)

NOPMVI A, 099hANI 01hJNZ ETIQUETA 1 C2 F1 CFMVI A, 0CCh 3E CCJMP PRESENTA C3 F3 CFETIQUETA1:  MVI A, 0FPRESENTA: OUT 00HLT

Page 14: ejercicios gnusim

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) (Hexadecimal)

0000 0000E4E5E4E7 04E4E8 D6 57E4EAE4EBE4EC D3 00E4EE 76

(Assembly Language)

NOPIN 00 DB 00LAZO: INR BSUI 057hJNZ LAZO C2 47 EFMVI A, 0FFh 3E FFOUT 00HLT

Page 15: ejercicios gnusim

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.

Page 16: ejercicios gnusim

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=12. Si A = Dato; Z=13. 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.

(Hexadecimal) (Hexadecimal)

0000 0081658167 FE 998169 D2 C5816C816E D3 008170 76

(Assembly Language)

NOPTOPE: IN 00 DB 00CMI 99JNC TOPEMVI A, EE 3E EEOUT 00HLT