Upload
junior1986191699
View
1.063
Download
2
Embed Size (px)
DESCRIPTION
Contiene resolución de ejercicios para GNUSIM8085
Citation preview
EJERCICIOS
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
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
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
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.
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
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
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?.
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.
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
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
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 0h 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
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
0CCh que iba a signar el valor de Cch al acumulador (A). Se debe aumenta 0h 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
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.
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 0h) 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