Académique Documents
Professionnel Documents
Culture Documents
EJERCICIOS GNUSIM 8085
EJERCICIO 1
1. Analice el siguiente programa
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.
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
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
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.
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.
Diagrama de tiempo de los registros:
Cálculos:
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.
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.
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
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.
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 0h 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.
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 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.
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.
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
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 0h) al registro A para luego presentar ese valor por el puerto
00
3. Ingrese el programa y córralo. Verifique sus predicciones.