Está en la página 1de 17

Segunda Entrega

PRESENTA:
INGRID KATHERINE BOHORQUEZ FORERO Código: 1711025620
CRISTIAN FABIAN GUERRA LOZANO Código: 1821981891
JEISSON ALONSO GOMEZ HERRERA Código: 1621023231
WILSON LANCHEROS GUTIERREZ Código: 1621024374

MATERIA ARQUITECTURA DEL COMPUTADOR

INSTITUCIÓN UNIVERSITARIA POLITECNICO GRANCOLOMBIANO


FACULTAD DE INGENIERIA
INGENIERIA DE SOFTWARE
ABRIL
2020
Contenido
1. INTRODUCCION ........................................................................................................................... 3
2. Marco Teórico ............................................................................................................................. 3
2.1. ISA Arquitectura de Conjunto de Instrucciones .................................................................. 3
2.2. MicroArquitectura .................................................................................................................... 6
2.3. Logisim................................................................................................................................. 7
3. Problema Estudio ........................................................................................................................ 8
4. Algoritmo Solución ...................................................................................................................... 8
4.3. Algoritmo Calculo de Números Primos ............................................................................... 9
4.4. Tipos de Instrucción .......................................................................................................... 11
5. Entrega 2 Conjunto de Instrucciones ........................................................................................ 12
4.1. Listado de Instrucciones ........................................................................................................ 12
4.2. Definición cantidad de registros ............................................................................................ 12
4.3. Descripción de los modos de direccionamiento .................................................................... 12
4.4. Traducción del programa de alto nivel al leguaje ensamblador ............................................ 12
4.5. Listado en HEXA del Binario ................................................................................................... 13
4.6. ALU en Logisim ....................................................................................................................... 14
6. Conclusiones.............................................................................................................................. 17
7. Bibliografía ................................................................................................................................ 17

INGENIERIA DE SOFTWARE 2
1. INTRODUCCION
Con el paso de los días el uso de la computadora gana terreno en todas las actividades
humanas, esto debido a su alta capacidad de procesamiento y la reducción de actividades que
anteriormente se hacían muy dispendiosas. La capacidad de un equipo de cómputo a la hora
de realizar cálculos, procesar datos, simular procesos y eventos naturales o artificiales, las
hacen maquinas limitadas únicamente por la capacidad de diseñarlas y programarlas
eficientemente.

Actualmente estas máquinas están presentes en todas las actividades del día a día, mejorando
los tiempos y la cantidad de datos de procesamiento, pero existen procesos que demandan
una velocidad y capacidad de datos mucho mayor por mencionar algunas como actividades
educativas, industriales, militares y económicas requieren el almacenamiento y procesamiento
de una alta cantidad de datos y obtener resultados en lapsos de tiempo muy cortos, existen
procesos como predicción meteorológica, inteligencia artificial, simulaciones para fluidos,
sistemas expertos ingeniería genética entre muchos más campos para los cuales los
computadores convencionales no poseen las capacidades para afrontar la labor.

En este caso se busca que con la construcción de mejores equipos se obtengan resultados más
fiables y agiles que permitan mejorar en estos procesos, aquí es donde el concepto de
arquitectura del computador cobra gran importancia pues se debe entender como la
integración de su estructura física con su estructura lógica, con el objetivo de mejorar el
rendimiento en razón a unas variables específicas que deben ser satisfechas.

Esto quiere decir que se deben complementar los componentes físicos del equipo, con las
ciencias exactas de la programación para ofrecer una funcionalidad practica de acuerdo con el
uso ofrecido del equipo.

Asi las cosas, es importante aprender a complementar el nivel físico con el nivel lógico de un
equipo para adecuarlos a las necesidades del usuario, en este proyecto se presentará como se
desarrolla desde lo más básico la programación de un microprocesador teniendo en cuenta su
funcionalidad definida anteriormente por medio de un simulador de su comportamiento.

2. Marco Teórico
2.1. ISA Arquitectura de Conjunto de Instrucciones
El conjunto de instrucciones de un procesador o computadora, hacer referencia a todas las
instrucciones que el procesador reconoce y, por lo tanto, se pueden ejecutar.

Abarca todos los aspectos relacionados al diseño del conjunto de instrucciones, tales como
registros a usar, tamaño de memoria a usar, tipo de direccionamiento de memoria, número

INGENIERIA DE SOFTWARE 3
máximo de operandos, forma en que los datos e instrucciones son almacenados en memoria.
Distintos procesadores tienen distintos tipos de instrucciones.

Los conjuntos de instrucciones se caracterizan por los siguientes puntos:

o Número de bits por instrucción, independientemente de que el número de bits del


formato de instrucciones puede variar de un procesador a otro, existen casos en los
que el número de bits de las instrucciones varía dentro de un mismo procesador,
dependiendo del tipo de instrucción.

o Conjunto basado en stack o los registros en los que se puede acceder.

o número de operandos explícitos por instrucción.

o localización del operando.

o Los tipos de operaciones que se pueden hacer.

o El tipo y tamaño de operandos.

o En cualquier conjunto de instrucciones, no todas las instrucciones requieren el mismo


número de operandos.

o las operaciones que no requieren operando, tales como HALT (alto), implican un
desperdicio de espacio de memoria cuando se tienen instrucciones de longitud fija.
Una manera de recuperar este espacio desperdiciado es mediante el uso de opcodes
expandibles (porción de una instrucción de lenguaje de máquina que especifica la
operación a ser realizada).

Las arquitecturas de los conjuntos de instrucciones se miden con base en:

o Espacio de memoria principal ocupado por el programa.

o Complejidad de las instrucciones.

o La longitud de las instrucciones que se miden en bits claramente.

o Número de instrucciones en el conjunto de instrucciones.

En el diseño de un conjunto de instrucciones se considera los siguientes puntos:

o La longitud de la instrucción, si es corto, largo o variable.

INGENIERIA DE SOFTWARE 4
o Número de operandos.

o Número de registros direccionales ( que pueden ser especificados ).

o Modos de direccionamiento: directo, indirecto, indexado o bien, todos.

o El orden de los bytes que representan un dato o instrucción.

o La manera en la que el procesador almacena los datos u operandos durante la


ejecución de instrucciones: Arquitectura Stack, Acumulador o la arquitectura de
registros de propósito general. La selección entre las arquitecturas de
almacenamiento de operandos anteriores es optar entre simplicidad y costo del
diseño de hardware o velocidad de ejecución y facilidad de uso.

Cuando se hace referencia a los Endianness son las maneras de guardar datos o instrucciones
en memoria. Hay dos tipos de maneras:

o Big Endian: La información se almacena del byte más alto o sea el más significativo, al
más bajo en direcciones crecientes de memoria.

o Little Endian: La información se almacena del byte más bajo o sea el menos
significativo, al más alto en direcciones crecientes de memoria.

Cuando se habla del acceso a objetos como lo son datos, instrucciones y direcciones que
tienen una longitud mayor a un byte, estos tienen que ser alineados. El acceso a un objeto
de s Bytes en la dirección A está alineado si A mod s = 0 ( esta operación proporciona como
resultado el residuo que resulta de dividir el número entero a entre el número entero b).

El desalineamiento por su parte causa algunas complicaciones al hardware, ya que la memoria


está típicamente alineada en límites o fronteras que son múltiplos de una palabra o palabra
doble. El acceso a un objeto alineado puede completarse en un solo ciclo de acceso a memoria

INGENIERIA DE SOFTWARE 5
llamado FETCH, siempre y cuando el bus de datos/instrucciones, los registros del procesador
sean lo suficientemente amplios para almacenar el objeto. El acceso a un objeto desalineado
puede resultar en varios ciclos de acceso a memoria, lo cual implica un desperdicio de tiempo.

Tipos de instrucciones:

Las instrucciones pueden ser clasificadas en un amplio número de categorías, particularmente


en los procesadores actuales en las que se tienen instrucciones de multimedia,
comunicaciones, y un mayor conjunto de operaciones matemáticas y otras de uso especial. Las
categorías más comunes son:

o movilidad de datos.
o Aritméticas.
o Booleanas.
o Manipulación de bits.
o I/O
o Transferencia de control.
o Multimedia.
o comunicaciones.
o Matemáticas especializadas.
o propósito especial.

Los términos describen los aspectos del procesador generalmente visibles a un programador,
incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de
memoria y las interrupciones, entre otros aspectos; es muy difícil aprender este tipo de
arquitectura ya que al final de cuentas existen lenguajes un poco más altos de nivel para una
mejor realización del trabajo, eso no quiere decir que aprender esta arquitectura es malo, por
el contrario al final es lo más eficaz que podría quedar un programa hecho con esta
arquitectura.

2.2. MicroArquitectura
una microarquitectura es una descripción del circuito eléctrico de una computadora, de la
unidad central de proceso o del procesador digital de señal, que es suficiente para describir
completamente el funcionamiento del hardware.

En ámbitos académicos, suele emplearse el término "organización de la computadora",


mientras que en la industria de la computación suele utilizarse el término microarquitectura.
Ambas palabras son sinónimos.

La microarquitectura y la arquitectura de conjunto de instrucciones constituyen la


arquitectura de computadora.

INGENIERIA DE SOFTWARE 6
Microarquitectura vs. arquitectura de conjunto de instrucciones

La microarquitectura debe distinguirse de la arquitectura de conjunto de instrucciones. Esta


última es una imagen abstracta de un sistema de computación como sería visto por un
programador en lenguaje máquina, e incluye el conjunto de instrucciones, modos de dirección
de memoria, registros del procesador, y formatos de direcciones y datos.

La microarquitectura, en cambio, es de nivel más inferior, más concreto. Muestra las partes
constituyentes del sistema y cómo se interconectan e interoperan, para así implementar la
especificación de arquitectura.

Diferentes máquinas podrían tener una misma arquitectura de conjunto de instrucciones, y así
ser capaces de ejecutar los mismos programas, sin embargo pueden tener diferentes
microarquitecturas.

Estas diferentes microarquitecturas (junto con los avances en las tecnologías de fabricación de
semiconductores) son las que permiten nuevas generaciones de procesadores que permiten
alcanzar mejores niveles de performance comparadas con las generaciones previas. En teoría,
una única microarquitectura (especialmente si ésta incluye microcódigo) podría ser usada para
implementar dos conjuntos de instrucciones diferentes, por la programación de dos
almacenes de control diferentes (el almacén de control almacena el microprograma del CPU).

Representación de una microarquitectura

La microarquitectura de una máquina, generalmente es representada empleando un digrama


de bloques que describe las interconexiones entre registros, buses y bloques funcionales de la
máquina. Esta descripción incluye el número de unidades de ejecución, el tipo de las unidades
de ejecución (como punto flotante, entero, SIMD, etc.), la naturaleza del pipelining, el diseño
de la memoria caché y el soporte de periféricos.

El esquema físico del circuito, las construcciones de hardware y otros detalles físicos son
llamados implementación de esa microarquitectura. Dos máquinas pueden tener la misma
microarquitectura, y por lo tanto el mismo diagrama de bloques, pero diferentes
implementaciones de hardware.

2.3. Logisim
El Logisim es un simulador lógico que proporciona al usuario un interfaz gráfico diseñado
especialmente para uso educativo.

Sus características más importantes son:

o Diseño y simulación de circuitos digitales.


o Software de uso libre (licencia pública GNU)
o Sistemas operativos Windows, Mac y Linux.

INGENIERIA DE SOFTWARE 7
3. Problema Estudio
Para esta entrega el objetivo de la entrega es diseñar un algoritmo, en pseudocódigo o un
lenguaje de programación en alto nivel, que dé solución al problema: “Determinar si un
número es primo o no”. Adicionalmente, se debe especificar qué tipos de instrucciones que
pueden ser requeridas para la solución del problema, de acuerdo con el algoritmo diseñado.

A continuación, se presentará un algoritmo que da solución al problema planteado

4. Algoritmo Solución

INGENIERIA DE SOFTWARE 8
4.3. Algoritmo Calculo de Números Primos

Se generaron dentro del grupo dos algoritmos para el cálculo de números primos, ambos quisimos
mostrarlos dentro del trabajo categorizando en ambos las instrucciones:

ALGORITMO 1

Corresponde al siguiente Diagrama Solución:

INGENIERIA DE SOFTWARE 9
ALGORITMO 2

Corresponde al siguiente Diagrama Solución:

INGENIERIA DE SOFTWARE 10
4.4. Tipos de Instrucción

ALGORITMO 1

Instrucción: numero = entradaNum.nextInt();


Tipo de Instrucción: Aritmeticas – Inmediatas, los datos a operar son
constantes y el valor se incluye en la misma instrucción.

Instrucción: if (numero > 2)


Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

Instrucción: if((numero % 2) == 0)
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

Instrucción: else
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

Instrucción: else if (numero == 2)


Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

ALGORITMO 2

Instrucción: int num = scanner.nextInt();


Tipo de Instrucción: Aritmeticas – Inmediatas, los datos a operar son
constantes y el valor se incluye en la misma instrucción.

Instrucción: int num2 = num-1;


Tipo de Instrucción: Aritmeticas – Inmediatas, los datos a operar son
constantes y el valor se incluye en la misma instrucción.

Instrucción: while((num%num2)!=0)
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

Instrucción: num2--;
Tipo de Instrucción: Aritmeticas – Inmediatas, los datos a operar son
constantes y el valor se incluye en la misma instrucción

Instrucción: if(num2 == 1)
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

INGENIERIA DE SOFTWARE 11
Instrucción: else
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo
con una condición

5. Entrega 2 Conjunto de Instrucciones

4.1. Listado de Instrucciones


En este punto se pretende hacer una definición detallada del listado de instrucciones,
haciendo relación de Nombre, mnemónico, parámetros que recibe, de acuerdo con lo
solicitado en la descripción para la segunda entrega del proyecto de clase.

Ilustración 1 Listado de Instrucciones

4.2. Definición cantidad de registros

4.3. Descripción de los modos de direccionamiento

4.4. Traducción del programa de alto nivel al leguaje ensamblador

# Saber si un numero dado es primo

.eqv READ_INT 5 # . .lectura de un entero escrito por el usuario


.eqv EXIT 10 # . .finaliza el programa
.eqv PRINT_STRING 4 #. .imprime string
.data
pedir_num: .asciiz "\n Insertar un numero entero: "
s_no: .asciiz "\n El numero no es primo"
s_si: .asciiz "\n El numero es primo"
.text
princ:
la $a0 pedir_num
li $v0 PRINT_STRING
syscall
li $v0 READ_INT
syscall

INGENIERIA DE SOFTWARE 12
move $t0 $v0
li $t1 2
lo: beq $t0 $t1 es_primo
div $t0 $t1
mfhi $t2
beqz $t2 no_primo
addi $t1 $t1 1
b lo
no_primo:
li $v0 PRINT_STRING
la $a0 s_no
syscall
b ex
es_primo:
li $v0 PRINT_STRING
la $a0 s_si
syscall
b ex

ex: li $v0 EXIT


syscall

4.5. Listado en HEXA del Binario

INSTRUCCIÓN BINARIO HEXA


00111100000000010001000000000001 3c011001
00110100001001000000000000000000 34240000
00100100000000100000000000000100 24020004
00000000000000000000000000001100 0000000c
00100100000000100000000000000101 24020005
00000000000000000000000000001100 0000000c
00000000000000100100000000100001 00024021
00100100000010010000000000000010 24090002
00010001000010010000000000001010 1109000a
00000001000010010000000000011010 0109001a
00000000000000000101000000010000 00005010
00010001010000000000000000000010 11400002
00100001001010010000000000000001 21290001
00000100000000011111111111111010 0401fffa
00100100000000100000000000000100 24020004
00111100000000010001000000000001 3c011001
00110100001001000000000000011110 3424001e

INGENIERIA DE SOFTWARE 13
00000000000000000000000000001100 0000000c
00000100000000010000000000000101 04010005
00100100000000100000000000000100 24020004
00111100000000010001000000000001 3c011001
00110100001001000000000000110110 34240036
00000000000000000000000000001100 0000000c
00000100000000010000000000000000 04010000
00100100000000100000000000001010 2402000a
00000000000000000000000000001100 0000000c

4.6. ALU en Logisim


Se realiza modelo de caja negra para el calculo de un numero binario, para la ejecución de las
instrucciones se planteo inicialmente un circuito de caja negra donde se especifican cuantas
entradas tendrá el ALU y cual es su salida.

Tabla de Verdad:

INGENIERIA DE SOFTWARE 14
Expresión Booleana:

̅̅̅̅𝑪𝑫
𝑺𝟏 = 𝑨𝑩 ̅𝑩
̅ +𝑨 ̅ 𝑩𝑪
̅ 𝑪𝑫 + 𝑨 ̅𝑫 + 𝑨
̅ 𝑩𝑪𝑫 + 𝑨𝑩 ̅𝑫
̅ 𝑪𝑫 + 𝑨𝑩𝑪

ALU EN LOGISIM

Prueba (1)

E1=0 E2=0 E3=0 E4=0

Prueba (2)

E1=0 E2=0 E3=0 E4=1

INGENIERIA DE SOFTWARE 15
Prueba (3)

E1=0 E2=0 E3=1 E4=0

Prueba (4)

E1=1 E2=0 E3=1 E4=1

Se adjunta archivo Logisim.

INGENIERIA DE SOFTWARE 16
6. Conclusiones

• Existen en la actualidad, y en todos los campos de la vida cotidiana diferentes


problemas que pueden ser modelados efectivamente a través de diferentes
herramientas que facilitan su entendimiento.
• El algoritmo de un problema es la consecución de una serie de pasos u operaciones
que permiten por medio de diferentes cálculos encontrar la solución de un problema.
• El algoritmo de un problema puede ser presentado gráficamente con el objetivo de
facilitar su entendimiento, ofreciendo una visión generalizada de los diferentes
procesos que haven parte de la solución de problema presentando.

7. Bibliografía

Cortés Rico, L. (2019). Politécnico Grancolombiano. Obtenido de


https://poli.instructure.com/courses/15018
García, Y. (27 de 05 de 20110). Aplicaciones del computador. Obtenido de Importancia
de las herramientas del computador:
http://aplicacionesdelcomputador.blogspot.com/2010/05/arquitectura-del-
computador.html
Sibila,F.(2004).Arquitectura de Conjunto de Instrucciones

INGENIERIA DE SOFTWARE 17

También podría gustarte