Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Arquitectura de Computadores (IIC 2342): Interrogación Nº 2 Prof. Domingo Mery 12 de Octubre de 2006 1. (1.5 puntos) Escriba un programa que calcule (sin decimales) la raíz cuadrada de x. El valor de la variable x es un número 0 x 255 almacenado en forma de byte en el registro CL. El algoritmo a utilizar es el de búsqueda secuencial del mayor número entero z tal que la z 2 sea menor o igual a x. De esta forma la raíz (sin decimales) de x es z. A manera de ejemplo, con este algoritmo la raíz (sin decimales) de 10 es 3, ya que 3 2 es menor que 10, sin embargo 4 2 no es menor que 10. El resultado debe almacenarse en AL. No se aceptará ninguna solución que no considere el algoritmo descrito. Solución: org 100h MOV CL,100 MOV DL,15 LAZO: MOV AL,DL MUL DL CMP CL,AL JNB FIN DEC DL JNZ LAZO FIN: MOV AL,DL RET 2. (1.5 puntos) Escriba un programa que realice un histograma (h) de 10 números del cero al tres. A manera de ejemplo si los 10 números son 0,1,2,3,0,1,2,3,0,1, el histograma es: h(0)=3, h(1)=3, h(2)=2 y h(3)=2 (hay 3 ceros, hay 3 unos, etc.). Los 10 números están almacenados a partir de la dirección 'DATOS'. Los 4 elementos del histograma deben almacenarse a partir de la dirección 'RESULTADO'. Solución: org 100h MOV AX,0700H MOV DS,AX MOV BX,RESULTADO MOV CL,4 INICIO: MOV [BX],0 INC BX DEC CL JNZ INICIO MOV CL,10 MOV BX,DATOS MOV AH,0 LAZO: MOV AL,[BX] PUSH BX MOV BX,RESULTADO ADD BX,AX INC [BX] POP BX INC BX DEC CL JNZ LAZO RET DATOS: DB DB DB DB DB DB DB DB DB DB 0 1 2 3 0 1 2 3 0 1 RESULTADO: 3. (1.5 puntos) Para la CPU de 1 bit escriba en lenguaje máquina el programa: A = 0; B = 1; C = 0; D = OR(A,B); B = XOR(A,C); C = AND(B,D); A = NOT(C); Además conteste: ¿Cuál es el valor final de cada registro? Solución: A = 0; B = 1; C = 0; D = OR(A,B); B = XOR(A,C); C = AND(B,D); A = NOT(C); Valores Finales: A=1 B=0 C=0 D=1 0000000000 0100000001 1000000000 1100011010 0100101110 1001111100 0000100110 Preguntas (c/u 0.3 puntos): Conteste Brevemente A. Explique cuáles son las cinco tareas de una CPU. B. Explique qué es el ciclo fetch. C. Una CPU de 8 bits tiene un registro acumulador llamado A. En esta CPU el código en lenguaje máquina de la instrucción 'INC A' es 0001 0001. ¿Es posible que el código de la instrucción 'DEC A' sea 0001 0001 ? Explique por qué. D. Explique a nivel de hardware cómo se realiza el salto incondicional. E. Explique qué hace la ALU. Solución A. Captar instrucción: la CPU lee una instrucción de la memoria. Interpretar instrucción: la instrucción se decodifica para determinar qué acción es necesaria. Captar datos: la ejecución de una instrucción puede exigir leer datos de la memoria o de un módulo I/O. Procesar datos: en la ejecución se puede exigir llevar a cabo alguna operación aritmética o lógica con los datos. Escribir datos: los resultados de la ejecución pueden exigir escribir datos en la memoria o en un módulo I/O. B. Ciclo encargado de llevar la siguiente instrucción de la memoria a la CPU. Sus pasos se describen a continuación: - El program counter tiene la dirección de la siguiente instrucción. - El procesador capta la instrucción de la memoria direccionada por el PC. - Se incremente PC en 1. - El código de la instrucción se carga en IR. C. No es posible, ya que la CPU no podría distinguir cuando se ejecuta cual operación. Las instrucciones de lenguaje de máquinas son únicas (una instrucción sólo permite realizar sólo un conjunto de operaciones). D. Se coloca en el program counter la dirección almacenada en la instrucción de salto. De esta forma se cambia el flujo secuencial de las instrucciones. E. La ALU es un circuito digital que realiza todas las operaciones aritméticas y lógicas de las que es capaz la CPU, como por ejemplo: suma, resta, and, or, not.