Está en la página 1de 7

Microarquitectura de un procesador

Jhon Henry Riaño Castro CÓD. 0711041563


Nicolás Alberto Reyes Rodríguez CÓD. 1610010585

Resumen— En esta primera entrega del proyecto estos programas fue llamada ensamblador, este
realizaremos una aproximación practica mediante un programa traduce la versión simbólica de una
código de cómo podemos saber si un número es primo instrucción a su versión binaria [1].
o no, donde explicaremos paso por paso el Años después por facilidad para programar y por
funcionamiento del algoritmo e indagaremos por qué
productividad se inventa el programa de alto nivel
a medida que el número va creciendo es más
complicado saber si es primo.
[1].

2.2 MIPS (Microprocessor without Interlocked


I. INTRODUCCIÓN
Pipeline Stages)
l análisis de los números primos ha sido por Es una arquitectura que permite mejorar el proceso
E siglos uno de los mayores problemas
matemáticos, ya que no se ha descubierto el
y el aprendizaje en las etapas del procesador
mientras se asigna un conjunto de instrucciones, su
patrón del comportamiento de los dichos y ha sido definición técnica: Es una arquitectura diseñada
un dolor de cabeza para los grandes matemáticos para optimizar la segmentación en unidades de
de distintas épocas. Un número primo lo podemos control y para facilitar la generación automática de
definir como un número que solo se puede dividir código máquina por parte de los compiladores [1].
por dos números: el uno y el mismo, es decir tiene
únicamente dos divisores. En este primer avance 2.2.1 Conjunto (set) de Instrucciones ISA
propondremos un código que pueda resolver si un (Instruction Set Architecture)
número es primo o no, explicando su Define las instrucciones que un procesador puede
funcionamiento paso por paso y las limitaciones reconocer y procesar, siendo la microarquitectura
físicas que se puedan tener (Hardware). el puente entre el lenguaje de programación
(software) y los elementos del hardware.
Debe abarcar todos los aspectos de un conjunto de
II. MARCO TEÓRICO
instrucciones tales como tamaño de la memoria,
registros a usar, tipo de direccionamiento.
Para entender el proyecto propuesto es Los tipos de instrucciones se definen de acuerdo a
indispensable entender cómo funciona la su funcionalidad en tres grupos:
arquitectura de un computador, esta se divide en
tres partes, lenguaje de bajo nivel o ensamblador, • R Registros: Aquellas en que las instrucciones
un compilador y un lenguaje de alto nivel. contienen operaciones aritméticas o lógicas y el
modo de direccionamiento es de registro.
2.1 LENGUAJE DE PROGRAMACIÓN DE • I Inmediato: A diferencia de las tipo R, las
ALTO NIVEL inmediatas tienen un modo de direccionamiento en
Es un lenguaje transportable tal como C, Fortran o el cual el valor constante es un operando que está
Java compuesto por palabras y notación algebraica inmerso en la instrucción.
que un compilador puede traducir en un lenguaje • J Cambio de Flujo: Corresponden a las
ensamblador [1]. instrucciones que permiten un salto entre líneas con
Básicamente es un lenguaje de programación que una condición (condicionales) o desplazarse entre
permite escribir una serie de instrucciones a partir ellas sin una condición (incondicionales)
de palabras de muy fácil comprensión para el
programador, a diferencia del lenguaje de bajo III. PLANTEAMIENTO DEL PROBLEMA
nivel que se acerca más al lenguaje binario de las
máquinas. Dentro de los lenguajes de alto nivel más Desarrollar un algoritmo de alto nivel que dé
conocidos están: PASCAL, APL, COBOL, C#, solución al problema: “Determinar si un número es
MATLAB, entre otros primo o no”, por lo cual se deberá determinar el
Los primeros programadores se comunicaban con tipo y diseñar el conjunto de instrucciones que se
los computadores mediante números binarios… requerirán para dar solución al problema.
luego los pioneros inventaron programas para para
traducir notación simbólica a binaria, el primero de
IV. DISEÑO DEL PROGRAMA SI 𝑛%𝑑 == 0
Para determinar si un número es primo o no ENTONCES //n modulo d es igual a 0
podemos utilizar un lenguaje de alto nivel 𝑝 ← 𝑓𝑎𝑙𝑠𝑒
programado en java y demostrar su //el numero no es primo
funcionamiento: FINSI
𝑑 ←𝑑+1
import java.util.Scanner; FINMIENTRAS
FINSI
public class numeroPrimo { FIN
public static void main(String[] args)
{ 5.2 Cantidad de registros y tamaño de cada
Scanner obtenerNumero = new uno
Scanner(System.in);
int contador,I,numero; En microprocesadores, un registro de memoria, es
una pequeña cantidad de memoria ultrarrápida,
System.out.print("Ingresa un numero: "); integrada en un microprocesador, que permite
numero = obtenerNumero.nextInt(); almacenar y acceder a datos frecuentemente
usados. Esto permite incrementar la velocidad de
contador = 0; ejecución de los programas. [2].

for(I = 1; I <= numero; I++) Los registros son parte fundamental en lo que
{ concierne a la memoria, puesto que sin ellos el
if((numero % I) == 0) sistema no podría almacenar datos de una manera
{ rápida, la función de los registros se basa en ser
contador++; 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
if(contador <= 2) microprocesadores.
{
System.out.println("El número es primo"); Un registro en operación tiene una capacidad de
} memoria de 8,16,32 o 64 bits, depende
else directamente de la arquitectura del
{ microprocesador
System.out.println("El número no es
primo");
}
}
}

V. DESARROLLO DEL PROBLEMA


5.1 Pseudocódigo

PROCEDIMIENTO esprimo (n)


//Ingresado el número real n, determinar si es primo
o no
INICIO
DEFINIR 𝑝 ← 𝑡𝑟𝑢𝑒 //p – si es primo
DEFINIR 𝑑 ← 2 //d – divisores
SI 𝑛 < 2 ENTONCES //Si n es menor que
2 no es primo
𝑝 ← 𝑓𝑎𝑙𝑠𝑒
SINO
MIENTRAS 𝑝 𝑦 𝑑 ≤ 𝑠𝑞𝑟𝑡(𝑛) Tabla .1 (fuente elaboración propia)
HACER //sino mientras p=true y d sea menor o
igual a la raiz cuadrada de n
La importancia de los registros se basa en que El byte o par de bytes que siguen al código OP de
además de compartir la carga del procesador, la instrucción dan el desplazamiento de 8 ó 16 bits,
también le suministran instrucciones de cómo que, sumado al contenido del registro DS,
puede procesar los datos. determina la dirección efectiva en la que se
• Modo de Direccionamiento encuentra el dato a transferir.

Un modo de direccionamiento es un parámetro


asignado a una instrucción, dicha instrucción
utilizará el parámetro para saber cómo debe
acceder.

Para que el microprocesador pueda desempeñar su


función con mayor facilidad, se debe asignar un
modo de direccionamiento que le especifique la
forma en que debe interpretar la información
contenida, aclarando que un ordenador puede
combinar varios modos; los computadores utilizan
los diferentes modos de direccionamiento para dar
versatilidad de programación al usuario que
permitirá manejar estructura de datos más
Figura .3 (fuente elaboración propia)
complejas.
5.3 Tipo de Instrucciones
• Directo a Registro
Las instrucciones requeridas para el programa
Un registro, definido por la instrucción, contiene serán de tipo aritmético – lógicas con modo de
el operando. direccionamiento registro, puesto que el algoritmo
de alto nivel contiene operaciones básicas, ciclos y
asignaciones.

5.4 Lenguaje Ensamblador

.file "primo.c"
.intel_syntax noprefix
.text
.def ___main; .scl 2;
.type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "\12Numero.....: \0"
LC1:
.ascii " %d\0"
Figura .1 (fuente elaboración propia) LC2:
.ascii "\12El numero %d es primo\0"
• Inmediato LC3:
.ascii "\12El numero %d no es primo\0"
El operando se proporciona en el byte o bytes que .text
siguen al código de operación de la instrucción .globl _main
.def _main; .scl 2; .type
32; .endef
_main:
LFB17:
.cfi_startproc
push ebp
Figura .2 (fuente elaboración propia) .cfi_def_cfa_offset 8
• Directo .cfi_offset 5, -8
mov ebp, esp
.cfi_def_cfa_register 5 L2:
and esp, -16 mov eax, DWORD PTR [esp+20]
sub esp, 32 cmp eax, -1
call ___main jne L8
mov DWORD PTR [esp+20], 0 mov eax, 0
mov DWORD PTR [esp+28], 0 leave
mov DWORD PTR [esp+24], 0 .cfi_restore 5
L8: .cfi_def_cfa 4, 4
mov DWORD PTR [esp], OFFSET ret
FLAT:LC0 .cfi_endproc
call _printf LFE17:
lea eax, [esp+20] .ident "GCC: (MinGW.org GCC-8.2.0-
mov DWORD PTR [esp+4], eax 3) 8.2.0"
mov DWORD PTR [esp], OFFSET .def _printf; .scl 2; .type
FLAT:LC1 32; .endef
call _scanf .def _scanf; .scl 2; .type
mov eax, DWORD PTR [esp+20] 32; .endef
cmp eax, -1
je L2
mov eax, DWORD PTR [esp+20]
test eax, eax
jle L2
mov DWORD PTR [esp+24], 0
mov DWORD PTR [esp+28], 2
jmp L3 Figura .4 (fuente elaboración propia)
L6:
mov eax, DWORD PTR [esp+20]
cdq
idiv DWORD PTR [esp+28]
mov eax, edx
test eax, eax
jne L4
mov DWORD PTR [esp+24], 1
L4:
add DWORD PTR [esp+28], 1
L3:
mov eax, DWORD PTR [esp+20]
cmp DWORD PTR [esp+28], eax
jge L5
cmp DWORD PTR [esp+24], 1
jne L6
L5:
cmp DWORD PTR [esp+24], 0
jne L7
mov eax, DWORD PTR [esp+20] Figura .5 (fuente elaboración propia)
mov DWORD PTR [esp+4], eax
mov DWORD PTR [esp], OFFSET
FLAT:LC2 5.5. Algoritmo de bajo nivel
call _printf 0 Cargar r1,0
jmp L2 1 Cargar r2
L7:
mov eax, DWORD PTR [esp+20] 2 Cargar r3,1
mov DWORD PTR [esp+4], eax 3 Ciclo brmay r3,r2,fin
mov DWORD PTR [esp], OFFSET 4 Ciclo brmay r3,r2,fin
FLAT:LC3
call _printf 5 Sumar r1,r1,r3
6 Saltar Ciclo 111001 39
7 Ciclo brmay r3,2,fin 1111111 7F
8 Saltar Ciclo 11000010 C2
9 Fin 10000000 80
11111011 FB
5.6. Listado binario a hexadecimal del
10011100 9C
programa
1110100 74
BINARIO HEXADECIMAL 1000 8
10110100 B4 10011101 9D
1 1 10001000 88
11001101 CD 101110 2E
100001 21 1010101 55
10001010 8A 1110 0E
11111000 F8 1010110 56
11011000 D8 110000 30
10 2 10110000 B0
11011111 DF 1010 0A
1110101 75 10001001 89
11 3 10110101 B5
11101001 E9 1110100 74
11100011 E3 11110 1E
0 0 111011 3B
10111011 BB 11101011 EB
10111011 B8 11101010 EA
110 6 11110111 F7
10110111 B7 11110011 F3
111 7 1110100 74
10111010 BA Tabla .2 (fuente elaboración propia)
10111001 B9 5.7. Unidad Aritmética Lógica (ALU)
1001111 4F
11000 18 Teniendo en cuenta el algoritmo de alto nivel se
manejarán solo con 3 operaciones básicas (Suma,
1010111 57 Resta y División) y parametrizadas en modo de
10000 10 entrada de 3 bits llamado código de operación para
10110110 B6 realizar la operación entre los 2 valores de entrada.
10111010 BA
101 5 Código
Operación operación Decimal
11101000 E8 en binario
11111101 FD
Suma 0 0
1111100 7C
Resta 1 1
11000111 C7
División 10 2
11111101 F9
Tabla .3 (fuente elaboración propia)
Para la fase de registros, se decidió hacer varios
Los datos de entrada son 2 de 4 bits que sectores donde se pueda elegir qué resultado
representarán los números a operar, estas serán guardar, cuando el contador de cada registro este en
identificadas con valor 1 y valor 2 Por otro lado una 0, estará desactivado, y cuando este en 1 estara
salida de 5 bits para el resultado activado. Cuando se quiera guardar un registro del
resultado el contador deberá estar en 1 y se deberá
presionar el botón para cargar el resultado como se
ve en la siguiente imagen:

Figura .7 (fuente elaboración propia.)

Después de eso el resultado que se quiera guardar


pasara a la memoria RAM para guardar los
registros que se quieran tener, esto será de utilidad
para guardar solo la información que se necesite y
ahorrar espacio evitando resultados que no se
Figura .4( fuente elaboración propia.) quieran usar

se incorporó un sub circuito comparador que


verifica si el número ingresado en la entrada
código operación es igual a un valor constante que
para este caso será 2 (010) que corresponde al
código de la operación división
Esto para evitar que la bandera (Residuo) se active
cuando estamos haciendo operaciones diferentes a
la división

Figura .8 (fuente elaboración propia.)

En la memoria RAM, vamos a poner en el bus de


datos 5 bits, porque son los que va a recibir de los
resultados, tiene capacidad de hasta 32 bits. Y en
bits de dirección podemos poner hasta un máximo
de 24 bits, que es la cantidad de registros que
podrá guardar la memoria, es decir una cantidad
Figura .5 (fuente elaboración propia.) máxima de 16.777.216. Va a tener en la parte
inferior cuatro entradas de las cuales, la entrada
“clr” se encargará de reiniciar la memoria,
permanecerá en 0 para mantener los datos y con 1
se borrará toda la memoria. Con “out” se activará
la salida de datos de la memoria, se habilitará con
1 y actuará como salida de la memoria. El reloj
será útil para actualizar el estado de la memoria,
cuando se ponga arriba cargará los datos que se
estén ingresando y por último la sección de “sel”
siempre estará activado el integrador para poder
dejar seleccionar la dirección de la memoria.

Figura .6 (fuente elaboración propia.)


VI. CONCLUSIONES
• El algoritmo de alto nivel permite determinar
IX. TABLAS
si un número es primo basado en el set de
Tabla 1 Descripción de registros, Elaboración propia
instrucciones requeridas para el lenguaje de Tabla 2 Listado binario a Hexa, Elaboración propia.
máquina, Tabla 3 Manejo de Operaciones, Elaboración propia
• A medida que el número va creciendo es más
complejo validar si el número es primo, por tal
motivo el código nos va a hacer más útil para
poder detectar rápidamente.
• Se pudieron evidenciar las diferencias de los
tipos de instrucción y aplicabilidad de cada
uno.
• Se realizó la validación de todas las entradas y
salidas para lograr interpretar el lenguaje de la
maquina en el ALU ensamblado en Logisim.
• Las instrucciones permitieron identificar los
modos de direccionamiento que aplican para el
problema planteado, poniendo en practica lo
aprendido en lo corrido del módulo.
• Como equipo nos pudimos dar cuenta que
ALU permite el ingreso de datos para así
después realizar las operaciones
correspondientes. Se comprobaba el circuito
efectivamente funcionara después de varias
pruebas, realizando la operación aritmética
correspondiente.
• Con este proyecto aprendimos que cada tipo de
operación en la ALU depende de varios bits de
control y que sin ellos las operaciones no
podrían ser ejecutadas.

VII. REFERENCIAS

[1] David A. Patterson, a. J. (2011). Estructura y diseño de


computadores: la interfaz hardware/software (4a. ed.).
Editorial Reverté.
[1] Alegsa.com.ar (2016). Definición de Registro de memoria
Obtenido de
http://www.alegsa.com.ar/Dic/registro_de_procesador.ph
p
[2] Garth Kiepper, 4-bit ALU in Logisim,
https://www.youtube.com/watch?v=g5hdicvoKnA
[3] Mr.Nixon, Logisim 4-bit CPU: ALU,
https://www.youtube.com/watch?v=fV-k9dm1efQ

VIII. FIGURAS

Figura 1, Direccionamiento por registro, Elaboración propia


Figura 2, Direccionamiento Inmediato, Elaboración propia
Figura 3, Direccionamiento Directo, Elaboración propia
Figura4 ,Tabla de Registro, Elaboración propia
Figura4 ,Hexadecimal dese descompilador, Elaboración
propia.
Figura5 ALU para sistema verificador de números
primos:Elaboración propia
Figura 6, Residuo, Elaboración propia
Figura 7, Fase de registros, Elaboración propia
Figura 8, Registros, Elaboración propia
Figura 9, Memoria RAM, Elaboración propia

También podría gustarte