Arq. del ComputadorPrimera entrega

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS PROYECTO GRUPAL Institución Universitaria Politécnico Grancolombiano ARQUIT

Views 102 Downloads 0 File size 173KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

ARQUITECTURA DEL COMPUTADOR DISEÑO DE CONJUNTO DE INSTRUCCIONES Y MICROARQUITECTURA PRIMERA ENTREGA

JAVIER ENRIQUE LEAL CORTES - CODIGO DAVID ANDRÉS BRICEÑO HERNÁNDEZ - CODIGO LUIS OSWALDO QUINTERO VELASQUEZ - CODIGO 1811024524

JUAN PABLO BERRIO LOPEZ

INSTITUCION UNIVERSITARIA POLITECNICO GRANCOLOMBIANO FACULTAD DE INGENIERIA Y CIENCIAS BASICAS 2020

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

PRIMERA ENTREGA

Se realizará una ejecución aproximada mediante un código donde dilucidaremos si se puede saber si un número es primo, el funcionamiento del correspondiente algoritmo y además investigaremos y trataremos de explicar por qué a medida que el número crece es más complicado saber si es un número primo.

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

INTRODUCCION

La analítica de los números primos ha sido desde la antigua Grecia uno de los mayores problemas matemáticos, ya que no se ha descubierto el patrón de comportamiento de ellos y ha sido un dolor de cabeza para los genios e ilustres matemáticos de distintas épocas. Un número primo lo podemos definir como un número que solo se puede dividir por dos números: el uno y el mismo, es decir tiene solo dos divisores. Se implementará pues un código que puede resolver la cuestión de si un número es primo o no, explicando su funcionamiento paso por paso y las limitaciones físicas que se puedan tener (Hardware).

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

OBJETIVO GENERAL



Desarrollar y diseñar un conjunto de instrucciones que permita hacer las siguientes tareas, determinar si un número es primo o no, generar un algoritmo de alto nivel, definir instrucciones de bajo nivel y generar un conjunto de instrucciones (ISA).

OBJETIVOS ESPECIFICOS

   

Desarrollar un algoritmo que permita determinar si un número es primo o no. Se debe definir la estructura de hardware mínima para poder ejecutar todas las instrucciones definidas en el conjunto de instrucciones. Montar la estructura de la microarquitectura de hardware sobre un simulador. Documentar todas las decisiones de diseño.

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

MARCO TEÓRICO

Para comprender la propuesta es imprescindible entender la forma en que funciona la arquitectura de un computador, la cual se divide en tres partes: lenguaje de bajo nivel o ensamblador, un compilador y un lenguaje de alto nivel. 

LENGUAJE DE PROGRAMACIÓN DE ALTO NIVEL

Es un lenguaje transportable tal como C, Fortran o Java compuesto por palabras y notación algebraica que un compilador puede traducir en un lenguaje ensamblador. Básicamente es un lenguaje de programación que permite escribir una serie de instrucciones a partir de palabras de muy fácil comprensión para el programador, a diferencia del lenguaje de bajo nivel que se acerca más al lenguaje binario de las máquinas. Dentro de los lenguajes de alto nivel más conocidos están: PASCAL, APL, COBOL, C#, MATLAB, entre otros Los primeros programadores se comunicaban con los computadores mediante números binarios…

luego los pioneros inventaron programas para para traducir notación simbólica a binaria, el primero de estos programas fue llamada ensamblador, este programa traduce la versión simbólica de una instrucción a su versión binaria. Unos años después se inventa el programa de alto nivel para hacer más fácil programar y aumentar exponencialmente la productividad derivada.

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL



Institución Universitaria Politécnico Grancolombiano

MIPS (Microprocessor without Interlocked Pipeline Stages)

Es una arquitectura que permite mejorar el proceso y el aprendizaje en las etapas del procesador mientras se asigna un conjunto de instrucciones, su definición técnica: Es una arquitectura diseñada para optimizar la segmentación en unidades de control y para facilitar la generación automática de código máquina por parte de los compiladores.



ISA (Instruction Set Architecture)

Define las instrucciones que un procesador puede reconocer y procesar, siendo la microarquitectura el puente entre el lenguaje de programación (software) y los elementos del hardware. Debe abarcar todos los aspectos de un conjunto de instrucciones tales como tamaño de la memoria, registros a usar, tipo de direccionamiento. Los tipos de instrucciones se definen de acuerdo con su funcionalidad también en tres grupos:



R Registros: Aquellas en que las instrucciones contienen operaciones aritméticas o lógicas y el modo de direccionamiento es de registro.



I Inmediato: A diferencia de las tipo R, las inmediatas tienen un modo de direccionamiento en el cual el valor constante es un operando que está inmerso en la instrucción.



J Cambio de Flujo: Corresponden a las instrucciones que permiten un salto entre líneas con una condición (condicionales) o desplazarse entre ellas sin una condición (incondicionales)

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

PLANTEAMIENTO DEL PROBLEMA Desarrollar un algoritmo de alto nivel que dé solución al problema: “Determinar si un número es primo o no”, por lo cual se deberá determinar el tipo y diseñar el conjunto de instrucciones que se requerirán para dar solución al problema

DISEÑO DEL PROGRAMA Para determinar si un número es primo o no podemos utilizar un lenguaje de alto nivel programado en java y demostrar su funcionamiento:

import java.util.Scanner; public class Num { /** * Se declara la variable utilizada para guardar la cantidad de números primos encontrados * durante la ejecución del programa. */ static int primesCount = 0; /**Método principal con el cual se inicializa el programa7 * @param args */ public static void main(String[] args) { /**Se establece el intervalo de números que se va a analizar para saber cuál de ellos es primo invocando el método RangoPrimos, al cual se le dan el primer y el

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

último número de un intervalo de números del cual se quiere determinar cuáles de los números del intervalo son primos. Si se desea analizar solo un número, se pasa como parámetro inicial y parámetro final el mismo número, ejemplo: RangoPrimos(3,3). */ int a,b; Scanner Entrada = new Scanner(System.in); System.out.print("Ingrese el primer número del intervalo:"); a = Entrada.nextInt(); System.out.print("Ingresa el último número del intervalo:"); b = Entrada.nextInt(); RangoPrimos(a,b); } /**Método que se usa para recorrer todos los números de un intervalo para determinar cuáles de estos son primos. * @param start - corresponde al primer número del intervalo que se desea analizar. * @param end - corresponde al último número del intervalo que se desea analizar. */ public static void RangoPrimos(int start, int end) { for (int i = start; i != end+1; i++) { /**

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

*En la variable EsPrimo se guarda el resultado de la operación realizada por el método EsPrimo el cual determina si el "i" dado como parámetro al método corresponde a un número primo. */ boolean esPrimo = EsPrimo(i); if(esPrimo) { /** * Si el número "i" es primo se imprime en consola la posición del número primo entre los números encontrados hasta el momento (ejemplo: primero(#1), segundo (#2), tercero (#3), etc.) y al lado se pone el número primo encontrado. */ primesCount++; System.out.println("número(#" + primesCount + "): "+ i); } } /** * Se imprime en consola cual fue el intervalo de números que se analizó en busca de números primos y abajo de eso se imprime el valor de la cantidad de números primos encontrados durante la ejecución del programa */ System.out.println("Intervalo analizado: ["+ start +","+ end +"]"); System.out.println("Total de números primos encontrados: "+ primesCount); } /**Método para probar si el número que se pasa como parametro es un número primo.

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

* @param ToCheck - corresponde al número del intervalo que se quiere comprobar si es un número primo. */ public static boolean EsPrimo(int ToCheck) { if (ToCheck == 2) return true; //Si el número por analizar es igual a 2, entonces es primo y el método devuelve un valor de true if (ToCheck < 2) return false; //Si el número por analizar es menor que 2, entonces no es primo y el método devuelve un valor de false /**Se invoca el método EsImpar dentro de una sentencia if para determinar si el número por analizar es un número impar * dado que todos los números primos son impares exceptuando el 2, si el número es par, el método devuelve un valor de false * dado que el número no sería primo */ if (EsImpar(ToCheck)) { /** * Habiendo determinado que el número es impar se procede a buscar los posibles múltiplos enteros impares del número comenzando con 3 hasta llegar al número entero que sea menor al número impar analizado dividido entre 3, dado que ese es el máximo número impar que al multiplicarse por el menor número primo diferente de 2 que es 3 nos puede dar como resultado el número que se busca analizar. */ for (int i = 3; i < (ToCheck / 3); i += 2) {

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

/** * Se analiza si el residuo de dividir el número analizado por "i" es igual a 0, si es así el número no es primo * y se continúa analizando el residuo de la división entre el número analizado por el siguiente número impar hasta culminar el ciclo for, si al final del ciclo ninguno de los residuos de la división es igual a cero se establece que el número es primo y el método devuelve un valor de true, de lo contrario devuelve un valor de false. */ if (ToCheck % i == 0) return false; } return true; } else return false; // even numbers(excluding 2) are composite } /**Método para probar si el número que se pasa como parametro es un número impar. * @param ToCheck - corresponde al número que se quiere comprobar si es un número impar. */ public static boolean EsImpar(int ToCheck) { /** * Si residuo de dividir el número por analizar es diferente a 0 entonces el número es impar y el método devuelve un valor de true, de lo contrario devuelve un valor de false */

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

return ((ToCheck % 2 != 0) ? true : false); } }



Cantidad de registros y tamaño de cada uno

En microprocesadores, un registro de memoria, es una pequeña cantidad de memoria ultrarrápida, integrada en un microprocesador,  que permite almacenar y acceder a datos frecuentemente usados. Esto permite incrementar la velocidad de ejecución de los programas.

Los registros son parte fundamental en lo que concierne a la memoria, puesto que sin ellos el sistema no podría almacenar datos de una manera rápida, la función de los registros se basa en ser lugares de memoria electrónica temporal con fácil y constante acceso desde una computadora, esto se debe a la ubicación que tienen dentro de los microprocesadores. Un registro en operación tiene una capacidad de memoria de 8,16,32 o 64 bits, depende directamente de la arquitectura

del microprocesador. La importancia de los registros

se basa en que además de compartir la carga del procesador, también le suministran instrucciones de cómo puede procesar los datos. 

Tipo de Instrucciones

Las instrucciones necesarias para el programa serán de tipo aritmético-lógico con modo de direccionamiento de registro, puesto que el algoritmo de alto nivel

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

contiene operaciones básicas, ciclos y asignaciones.



Lenguaje Ensamblador

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano

FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS

PROYECTO GRUPAL

Institución Universitaria Politécnico Grancolombiano