UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemática y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales PROCESADORES I PRÁCTICO 3: UNIDAD DE CÓMPUTO OBJETIVO: Reforzar los conceptos sobre unidad de cómputo, buses, registros generales y específicos, instrucciones y tipos de instrucciones. Realizar programas sencillos a partir de un conjunto reducido de instrucciones aritméticas, de transferencia y bifurcación. Ejercitar el tema de decodificación de direcciones, particularmente en la formación de la dirección efectiva y el uso de las distintas instrucciones de acceso a memoria y a puertos de I/O. ELEMENTOS NECESARIOS: - Conocer los temas dados en la teoría correspondiente. - Estar familiarizado con el decodificador 74138, con las señales de control y con el conjunto reducido de instrucciones del μP 8085 incluidas las instrucciones de acceso a memoria y a puertos de I/O. 1) Responder: ¿Cuales son las partes mas importantes que forman una unidad de cómputo? ¿Cuales son las funciones de cada uno de los bloques de la pregunta anterior? ¿Cual es la función del registro contador de programa ( PC )? ¿Donde están las instrucciones que debe ejecutar el microprocesador? ¿Que diferencia hay entre la memoria de datos y la memoria de programa? ¿Que ventajas y desventajas existen si se tienen buses independientes de direcciones y de datos para la memoria de programa y la memoria de datos? ¿La memoria de programa debe ser: a) tipo RAM; b) tipo ROM; c) cualquiera de los anteriores. ¿Qué elemento de la unidad de cómputo puede escribir sobre: a) el bus de datos; b) el bus de direcciones; c) el bus de control. 2) Suponiendo que hay memoria ROM desde la dirección 0000h a la 00FFh, memoria RAM desde la 0100h a la 01FFh, entradas desde la dirección 1000h a la 10FFh, y salidas desde la dirección 1100h a la 11FFh: a) b) c) d) e) Realizar un programa con el set de instrucciones dado que permita tomar un dato de la dirección 0110h sumarle 1 y guardarlo en la dirección 0111h. Escribir el programa en assembler y el listado en hexadecimal Realizar un programa con el set de instrucciones dado que sume los primeros 2 datos que están a partir de la dirección 0110h y guardarlos en de la dirección 01F0h. Escribir el programa en assembler y el listado en hexadecimal Realizar un programa con el set de instrucciones dado que sume los primeros 5 datos que están a partir de la dirección 0110h y guardar las sumas acumuladas a partir de la dirección 0lF0h. Escribir el programa en assembler y el listado en hexadecimal . Leer el estado de la entrada de la dirección 1000h, si el valor es cero poner en la dirección de salida 1100h el valor 0Ah, si el valor es distinto de cero sacar el valor leído por la dirección 1101h Se tiene el siguiente código: MVI A,FFh MVI B,02 INR A ADD B STA 1111h MOV A,B STA 1100h DCR B Decir que valor queda en los registros A, B y en las direcciones de memoria 1100h y 1111h, después de la ejecución de dicho código. UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemática y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales f) Se tiene el siguiente código: Dir: Instrucción: 0000h 0002h 0004h 0005h 0008h MVI MVI DCR JZ JMP ... MOV DCR JZ MOV JMP 0020h B,10h A,02 A 0020h 0004h Indicar qué valor queda en los registros A y B después de ejecutarse: i) 2 instrucciones, ii) 8 instrucciones y iii) 15 instrucciones. A,B A 0002h B,A 0020h 3) ¿Como reemplazaría una instrucción INR B usando otras de las instrucciones dadas? 4) ¿Cuantos accesos se hacen a memoria (ya sea de lectura o escritura) cuando se ejecutan las siguientes instrucciones? INR A MVI B,5Dh STA 10FFh 5) Realizar con el set de instrucciones dado, los programas que se detallan a continuación, escribiendo en cada caso el programa en assembler y el listado en hexadecimal: a) Copiar los valores que están en las direcciones 1000h, 1001h y 1002h en las direcciones 2000h, 2001h y 2002h respectivamente. b) Sumar los números distintos de cero que hay en las direcciones 1000h 1001h y 1002h. El valor obtenido se debe guardar en la dirección 1003h. c) Intercambiar los valores que están en las direcciones 1000h 1001h y 1002h. con los que están en las direcciones 2000h, 2001h y 2002h. d) Leer el contenido de la dirección 1010h. Si el valor leído es cero o uno colocar en la dirección 101lh un cero, si no es ni cero ni uno colocar en la dirección 1011h en valor FFh. 6) Dado el circuito de la figura: D8..D0 8Kx8 8Kx8 A0..A12 ROM1 Vcc 1Kx8 A0..A12 A0..A9 ROM2 /CS /CS RAM /CS DECO1 /RD E1 E2 E3 /RD A10 A11 A12 74138 A13 A14 A15 74138 E1 E2 E3 Vcc O0 O1 O2 O3 O4 O5 O6 O7 /WR /RD O0 O1 O2 O3 O4 O5 O6 O7 a) Indicar las direcciones donde están ubicadas las memorias ROM1, ROM2 y RAM. b) Ídem al anterior, pero eliminar el DECO2 y conectar el /CS de la RAM directamente al O7 del DECO1. UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemática y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales 7) ¿Cuántas veces se pone en alto la señal de ALE del 8085 si se ejecutan las siguientes 2 instrucciones?. a) LDA INR 27A4h A b) STA ADD 52Afh C c) IN INR 7Ah B d) OUT MOV 2Bh B,A 8) ¿Cuántas veces se activan las señales del μP 8085 /RD y /WR, para cada uno de los casos del ejercicio anterior? 9) Explique por qué se debe usar un latch para un puerto de salida y un buffer tri-state para un puerto de entrada. ¿Con que señal del micro se debe hacer el latch para el puerto de salida? y ¿que señal del micro se debe usar para sacar de tristate un puerto de entrada? EJERCICIOS COMPLEMENTARIOS: 10) Puerto A IO/M AD0..AD7 Octal latch PA0..PA7 E1 E2 E3 A4 A3 Puerto B 74138 A0 A1 A2 /LE /OE Octal latch O0 O1 O2 O3 O4 O5 O6 O7 /LE PB0..PB7 /OE /WR Tendiendo en cuenta el circuito de la figura escribir un conjunto de instrucciones en assembler del 8085 que ponga a la salida del puerto A el valor FF y a la salida del puerto B el valor AA. 11) Puerto A IO/M AD0..AD7 Octal buffer Puerto B A4 A3 E1 E2 E3 74138 A0 A1 A2 PA0..PA7 /OE O0 O1 O2 O3 O4 O5 O6 O7 Octal latch PB0..PB7 /RD /LE /OE /WR Teniendo en cuenta el circuito de la figura escribir un conjunto de instrucciones en assembler del 8085 que ponga a la salida del puerto B el valor del puerto A + 1. UNIVERSIDAD NACIONAL DE SAN LUIS Facultad de Ciencias Físico Matemática y Naturales Técnico Universitario en Microprocesadores Ingeniería Electrónica Orientación Sistemas Digitales A0 A1 A2 74138 E1 E2 E3 A4 IO/M A3 12) Repetir los ejercicios 10 y 11 pero cambiando en el circuito las entradas del decodificador del siguiente modo. O0 O1 O2 O3 O4 O5 O6 O7 SET (REDUCIDO) DE INSTRUCCIONES: ASSEMBLER INR B INR A MVI A,dato MVI B,dato LDA dir STA dir ADD B ADD C MOV B,C MOV C,B MOV A,B MOV B,A DCR A JMP dir JZ dir HEXADECIMAL 04 3C 3E,dato 06,dato 3A,dir 32,dir 80 81 41 48 78 47 05 C3,dir CB,dir JNZ dir C2,dir IN port OUT port DB,port D3,port Referencias: dato dir port OPERACIÓN B Å B+1 A Å A+1 A Å dato B Å dato A Å (dir) (dir) Å A A Å A+B A Å A+C B Å C C Å B A Å B B Å A A Å A-1 PC Å dir PC Å dir si flag PC Å PC+3 si flag PC Å dir si flag PC Å PC+3 si flag A Å (port) (port) Å A número de 8 bits dirección de 16 bits dirección de 8 bits de un puerto de I/O COMENTARIO afecta flag Z afecta flag Z afecta flag Z afecta flag Z afecta flag Z Z=True Z=False Z=False Z=True IO/M en alto IO/M en alto