20
qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm qwertyuiopasdfghjklzxcvbnm MICROPROCESADORES EJERCICIOS CON EL MICROPROCESADOR 8085 17/02/2009 OSMAR MOROCHO J.

MICROPROCESADORES 1

Embed Size (px)

DESCRIPTION

Deber de Microprocesadores usando GNUSIM8085

Citation preview

Page 1: MICROPROCESADORES 1

qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmrtyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklz

MICROPROCESADORES

EJERCICIOS CON EL MICROPROCESADOR 8085

17/02/2009

OSMAR MOROCHO J.

Page 2: MICROPROCESADORES 1

MICROPROCESADORES

EJERCICIOS CON EL MICROPROCESADOR 8085

EJERCICIO 1

1. Analice el siguiente programa

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

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

Este programa crea un bucle indefinido de un proceso de suma de una misma cantidad, el resultado se vuelve a sumar la misma cantidad anteriormente descrita, este resultado lo muestra por el puerto 00.

En programa se tiene dos problemas, se detallaran a continuación:

Para que el programa identifique si el numero ingresado es hexadecimal, se debe ubicar la letra “h” al final de cada numero.

JMP, no permite que el programa corra apropiadamente, ya que este se dirige a una dirección inexistente por esto el programa se detiene en ese instante y no pasa al bucle.

2. Explique las instrucciones del programa

NOP: Permite ejecutar la siguiente línea de programación.

IN (dirección puerto): Permite leer un puerto 00 de entrada/salida (I/O).

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

JMP: Crea un bucle infinito, que es cargado en memoria, también permite saltar a una dirección de una instrucción especificado por JMP, en este caso es “08822Dh”.

ADD: Suma el valor del registro indicado por ADD al acumulador.

Page 3: MICROPROCESADORES 1

MICROPROCESADORES

3. Si el dato ingresado en el puerto de entrada es 05h, que resultado se obtendrá a la salida del puerto?

Puerto 00 1416 = 2010

4. Si el dato es 10h, cual será el resultado?

Puerto 00 4016 = 6410

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 simulación.

Figura 1.0 GNUSIM8085

Figura 1.1 programa corregido GNUSIM8085

Page 4: MICROPROCESADORES 1

MICROPROCESADORES

EJERCICIO 2

1. Analice el programa

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 000001 IN 00 DB 000003 MOV B, A 470004 LDA 0010 3A 10 000007 ADD B 880009 OUT 00 D3 00000B JMP 0000 C3 000010 (DATO) 45

El programa carga un valor desde el puerto 00 al acumulador A, para luego ser movido ese valor al registro B, para luego tomar el valor de la posición de memoria almacenado en el acumulador para sumar el valor del registro B. El programa tiene problemas similares al ejercicio anterior.

2. Explique las instrucciones del programa

NOP: Permite ejecutar la siguiente línea de programación.

IN (dirección puerto): Permite leer un puerto 00 de entrada/salida (I/O).

MOV: Mueve el valor de un registro de destino a un registro especificado.

LDA: Permite cargar al acumulador A un valor almacenado en una dirección de memoria especificado por “LDA”.

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

Page 5: MICROPROCESADORES 1

MICROPROCESADORES

JMP: Crea un bucle infinito, que es cargado en memoria, también permite saltar a una dirección de una instrucción especificado por JMP, en este caso es “0000”.

ADD: Suma el valor del registro indicado por ADD al acumulador.

3. Si el dato ingresado en el puerto de entrada es 0Ah, que resultado se obtendrá a la salida del puerto?

Puerto 00 3716 = 5510

4. Si el dato es 1Fh, cual será el resultado?

Puerto 00 4C16 = 7610

5. Verifique sus contestaciones ingresando y ejecutando el programa en el simulador GNUSIM8085, actualice la memoria 0000 de la última instrucción de acuerdo al registro PC de su simulación.

Figura 2.0 Ejercicio II GNUSIM8085

Figura 2.1 Corrección Ejercicio II GNUSIM8085

EJERCICIO 3

Page 6: MICROPROCESADORES 1

MICROPROCESADORES

1. Analice el programa, determine los ciclos de maquina que llevara a cabo cada una de sus instrucciones

Address Instrucciones Lenguaje maquina Ciclos

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 00 04 0001 LDA 0010 3A 10 00 130003 ADI 02 C6 02 07000B JMP 0000 C3 0000 10

TOTAL CICLOS 34

0010 55 (DATO)

El programa carga el valor de 55 de la posición de memoria 1010 al acumulador para ser sumado por un valor de 2 para luego el resultado ser almacenado en el acumulador.

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.

Figura 3.0 Ejercicio III GNUSIM8085

Figura 3.1 Corrección Ejercicio III GNUSIM8085

Page 7: MICROPROCESADORES 1

MICROPROCESADORES

Lazo 1 Lazo 2 lazo 3

A 39 A 39 A 39PC 836A PC 836APC 836AP 1 P 1 P 1

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

Bandera de paridad

P=1 Si la suma de unos da como resultado par.

P=0 Si la suma de unos da como resultado impar.

EJERCICIO 4

1. Analice el siguiente programa. Carque el valor 43h en el puerto de entrada 00 y determine los ciclos de maquina que llevara a cabo cada una de sus instrucciones. Dibuje el diagrama de tiempo de los registros.

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

0000 NOP 000001 IN 00 DB 000004 OUT 05 D3 050006 JMP 0000 C3 00 00

Ciclos

0 NOP 4

1 IN 00 DB 00 10

4 OUT 05 D3 05 10

6 JMP 0000 C3 00 00 10

TOTAL CICLOS 34

Address (Hexadecimal)

Instrucciones (Assembly Language)

Lenguaje maquina (Hexadecimal)

El programa toma un valor de 43h del puerto 00, a este valor lo almacena en el Acumulador para luego poder visualizarlo en puerto 05, esto es un ciclo infinito.

Corrección del error: JMP 0000 JMP 0A9D5H

Page 8: MICROPROCESADORES 1

MICROPROCESADORES

Diagrama de tiempo para registros

Tiempo para el registro A:

TDregistro=T × LoopT−State× N10

Donde T es el periodo de reloj del CPU, LoopT-State es la sumatoria de T-State de cada instrucción, N10 es el valor delay cargado en el registro decimal.

Si el reloj trabaja a una frecuencia de 2MHz; T=500ns.

¿=OUT

43H=6710

TDA=500ns×10×67=0 ,335ms

NOP=500ns×4=0 ,002ms

JMP=500ns×10=0 ,005ms

TIEMPOTOTALEJECUCION PROGRAMA=0 ,667ms

NOP IN OUT JMP

Figura 4.0 Tiempo de ejecución Ejercicio IV GNUSIM8085

2. Ingrese el programa y córralo. Que relación existe entre lo que representa los valores ingresados al puerto de entrada y lo que sale del puerto asignado.

Figura 4.1 Ejercicio IV GNUSIM8085

Page 9: MICROPROCESADORES 1

MICROPROCESADORES

Figura 4.2 Corrección Ejercicio IV GNUSIM8085

a) b)

Figura 4.3 Puerto I/O Ejercicio IV a) b) GNUSIM8085

Existe una relacion entre los puertos de I/O, cuando se ingresa un numero en puerto 00, este valor se presenta en manera hexadecimal (43h), cuando se ingresa el numero en el puerto 05, este valor se presenta de manera decimal (67).

EJERCICIO 5

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX (PC) NOP 00XXXX+1 (PC) LDA 0C020h 3A 20C0

MVI B, 88 0658ANA B A0SUI 02 D6 02OUT 00 D3 00STA 0C021h 32 21 C0JMP XXXX C3 95 90

C020 97 (DAT0)

Page 10: MICROPROCESADORES 1

MICROPROCESADORES

2. Analice el programa. Que debe suceder cuando corremos el programa?

Carga el valor 97H a una localización de memoria 0C020h, luego asigna el valor de 88 en el registro B, para realizar una operación lógica AND entre los registros A y B, para después restar el valor de 2 al acumulador, el resultado se presenta en el puerto 00, localizado en una posición de memoria 0C021h.

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

Figura 5.0 Ejercicio V GNUSIM8085

4. Detenga el programa y verifique el contenido de la dirección de la memoria C021. Que contiene?

Figura 5.1 Ejercicio V GNUSIM8085

C021h6210

EJERCICIO 6

Page 11: MICROPROCESADORES 1

MICROPROCESADORES

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX (PC) NOP 00XXXX+1 (PC) IN 00 DB 00

ORI 07 F6 07CMA 2FOUT 00 D3 00JMP XXXX C3 35 97

2. Analice el programa. Que debe suceder cuando corremos el programa, si tenemos el numero 18h en el puerto de entrada?

Carga el valor 18H desde el puerto 00, este valor se guarda en el acumulador, para después realizar la operación denotada por el valor indicado por ORI, luego de esto se realiza un complemento en el acumulador, presentando el resultado en puerto 00.

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

Figura 6.0 Ejercicio VI GNUSIM8085

Page 12: MICROPROCESADORES 1

MICROPROCESADORES

EJERCICIO 7

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX NOP 00MVI A, 070h 3E 70MVI B, 0ACh 06 ACXRA B A8STA C012 32 12 C0HLT 76

2. Analice el programa. Que debe suceder cuando corremos el programa?

El programa carga los valores 070h y 0ACh a los registros A y B respectivamente, luego se realiza una operación lógica OR EXCLUSIVA entre el acumulador y el registro B, se debe adicionar en la dirección de STA 0****h0C012h.

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

Figura 7.0 Ejercicio VII GNUSIM8085

Page 13: MICROPROCESADORES 1

MICROPROCESADORES

EJERCICIO 8

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX NOP 00MVI A, 099h 3E 99ANI 01h E6 01JNZ ETIQUETA1 C2 F1 CFMVI A, 0CCh 3E CCJMP PRESENTA C3 F3 CFETIQUETA1: MVI A, 0F 3E 0FPRESENTA: OUT 00 D3 00HLT 76

2. Analice el programa. Que debe suceder cuando corremos el programa?

Carga el valor 099H al registro A, luego se realiza la operación lógica AND entre el acumulador y el valor de ANI, después realiza un salto a ETIQUETA1, en ella se asigna el valor de 0F al registro A, este contenido se presenta por el puerto 00, esto no ejecuta la línea de MVI A, 0CCh que asignaría el valor de 0F al registro A.

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

Page 14: MICROPROCESADORES 1

MICROPROCESADORES

Figura 8.0 Ejercicio VIII GNUSIM8085

EJERCICIO 9

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX NOP 00IN 00 DB 00LAZO: INR B 04SUI 057h D6 57JNZ LAZO C2 47 EFMVI A, 0FFh 3E FFOUT 00 D3 00HLT 76

2. Analice el programa. Que debe suceder cuando corremos el programa, si cargamos el numero 33h en el puerto de entrada?. Cuando terminara el programa?

El valor del puerto 00 es almacenado en el acumulador, la instrucción LAZO incrementa en 1 al registro B, luego se realiza una resta entre el acumulador y el valor de 057h, esto se hace indefinidamente por el bucle JNZ, siempre y cuando Z0, esta línea LAZO impide la ejecución de las demás líneas del programa, afectando a las banderas S

Page 15: MICROPROCESADORES 1

MICROPROCESADORES

(Signo del resultado, S=0 resultado positivo caso contrario S=1 resultado negativo) y C (Acarreo, C=1 resultado un numero de 9 bits caso contrario C=0 resultado numero de 8 bits).

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

Figura 9.0 Ejercicio IX GNUSIM8085

EJERCICIO 10

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

Address Instrucciones Lenguaje maquina

(Hexadecimal) (Assembly Language) (Hexadecimal)

XXXX NOP 00TOPE: IN 00 DB 00CMI 99 FE 99JNC TOPE D2 C5MVI A, EE 3E EEOUT 00 D3 00HLT 76

Page 16: MICROPROCESADORES 1

MICROPROCESADORES

2. Analice el programa. Describa en sus propias palabras la operación del programa. Puede utilizar un flujograma si le es conveniente.

Se toma el valor del puerto 00 para almacenarse en el acumulador, CMI, no es comando valido, se puede reemplazar por CPI, si el comando es CPI se compara el acumulador y el valor asignado en CPI, el resultado se almacenara por comparación en banderas como se especifica:

Si A < Dato C=1 Si A > Dato C=Z=0 Si A = Dato Z=0

JNC forma un bucle infinito siempre que ocurra la negación de C=0, luego se asigna el valor de 0EEh al registro A y por ultimo el resultado se presenta por el puerto 00.

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

Figura 10. Ejercicio X GNUSIM8085

Page 17: MICROPROCESADORES 1

MICROPROCESADORES

EJERCICIO 11

Diseñe un programa que escriba en la memoria 2100 el contenido del puerto 05 y en la 2101 el contenido del puerto 06 y luego cense el puerto de entrada 00, si el valor es 1F haga una subrutina que divida para dos ese número y si es F1 haga una subrutina que el contenido de memoria 2100 y 2101, luego de ejecutar cualquiera de las subrutinas, retorne al programa principal y presente el resultado en el puerto 00.

a) b)Figura 11.0 Ejercicio XI a) b) GNUSIM8085

EJERCICIO 12Diseñe un programa que reciba un número en el puerto 01 y si es mayor a 89h, llame a una subrutina que lo divida para 2 tres veces consecutivas, caso contrario termina el programa. Luego sin retornar al programa principal, si el número resultante es mayor que 20, llame una subrutina que desplace el número dos veces hacia la derecha, retorne a la subrutina previa, retorne al programa principal y muestre el resultado en el puerto 02

a) b)

Page 18: MICROPROCESADORES 1

MICROPROCESADORES

c)Figura 12.0 Ejercicio XII a) b) c) GNUSIM8085