Está en la página 1de 10

ARQUITECTURA DEL COMPUTADOR

DISEÑO DE CONJUNTO DE INSTRUCCIONES Y MICROARQUITECTURA

INTEGRANTES:

MAURICIO ALEJANDRO GARCIA ROMERO – CODIGO 1721021674

JORGE ANDRES ZULUAGA – CODIGO 1811025314

DARIO LEONARDO MORENO – CODIGO 1811020882

GRUPO 1

INSTRUCTOR

ANTONIO GONZALEZ

POLITÉCNICO GRANCOLOMBIANO
FACULTAD DE INGENIERÍA Y CIENCIAS BÁSICAS
ARQUITECTURA DEL COMPUTADOR
BOGOTÁ
2020
INTRODUCCION

Como determinar si un número es primo o no.


Un número primo es un número natural mayor que 1 que tiene únicamente dos divisores
distintos: él mismo y el 1. Por el contrario, el número 1, por convenio, no se considera ni
primo ni compuesto. El estudio de los números primos es una parte importante de la teoría
de números, rama de las matemáticas que trata de las propiedades, básicamente aritméticas,
de los números enteros.

MARCO TEORICO
Para la presente entrega pretendemos explicar el paso a paso para conocer si un número es
primo; mediante la utilización de un pseudocódigo que nos permite inicialmente plantear el
problema para luego escribir el código, diseñar las instrucciones y la microarquitectura para
que un procesador nos permita hacer las tareas descritas.

PSEUDOCODIGO
Debemos plantear una solución al problema de una manera informal explicar el paso a
paso, que sea fácil de entender para cualquier persona y sin utilizar ningún tipo de códigos.

PROCESO
Dado un número cualquiera, solicitado al usuario determinar si es primo o no
INICIO
DEFINIR
Número como, p, iniciar contador en 0

ESCRIBIR
Por favor ingresa un numero:
Leer numero

Para p <1 hasta numero


HACER
SI número % p == 0 entonces
Contador < contador + 1
FIN para
Si contador <= 2
ESCRIBIR
El número es primo
SINO
ESCRIBIR
El número no es primo

DISEÑO DEL PROGRAMA


Para determinar si el número que ingresa el usuario es primo utilizaremos el siguiente
código programado en Java:

public class Numprimo {


public static void main(String[] args)
{
// PROCESO
// Dado un número determinar si es primo

//INICIO
//Definir
//Numero, p, contador en 0
try (Scanner obtenerNumero = new Scanner(System.in)) {
int contador,p,numero;

//Escribir Por favor ingresa un numero:


//Leer numero
System.out.print("Por favor ingrese un numero: ");
numero = obtenerNumero.nextInt();
contador = 0;

//para p = 1
//para p <= numero sumar 1

for(p = 1; p <= numero; p++)


{
//Residuo = 0
if((numero % p) == 0)
{
contador++;
}
}
if(contador <= 2)
{
System.out.println("El número es primo");
}else{
System.out.println("El número no es primo");
}
}
}
}

INSTRUCCIONES REQUERIDAS PARA LA SOLUCION DEL PROBLEMA

Try: se utiliza cuando se desean prever excepciones en el transcurso de la ejecución de un


programa. Es necesario ya que ahí se colocan las instrucciones que se desean realizar pese a
la excepción, posteriormente se usa un catch donde se especifica la excepción que se sabe
puede ocurrir.

For: Los ciclos for son unas estructuras de control cíclica, nos permiten ejecutar una o
varias líneas de código de forma iterativa, pero teniendo cierto control y conocimiento
sobre las iteraciones.
If/else:La instrucción if/else permite controlar qué procesos tienen lugar, típicamente en
función del valor de una o varias variables, de un valor de cálculo o booleano, o de las
decisiones del usuario.

LISTADO DE INSTRUCCIONES A UTILIZAR

NOMBRE MNEMONICO EJEMPLO DESCRIPCION

Load Word lw lw $t0, dir Cargar en $t0 el


contenido de la
palabra
almacenada en
dir
Set Equal seq seq $t1, $t2, $t3 Inicializar en $t1
si es igual $t2 a
$t3 Para iniciar
el contador
Adittion add add $t1, $t2, $t3 Sumar $t2 + $t3
y almacenar en
$t1
Store Byte sb sb $t0, dir Almacenar en el
registro $t0 el
Load Byte lb lb $t0, dir Cargar en el
registro $t0 el
contenido
almacenado en
dir
Branch on equal beq beq $t0 $t1 Comparativo
es_primo entre registros
$t0 $t1
Branch if greater tan bgt bgt $t1, $t2, label Si $t1 es más
grande que $t2,
sirve para toma
de decisiones
Divide div $t2, $t3 División directa

Load Inmmediate li li $v0 Cargar


inmediatamente
en el registro v0
Move move $t1, $t2 Mover a $t1 el
registro en $t2
REGISTROS
Los registros son espacios en la memoria utilizados para el almacenamiento de la
información variables, palabras y direcciones, para poder utilizarlos se debe anteponer el
signo $ seguido del registro a utilizar como en los ejemplos de los nombres que vemos en la
siguiente tabla:

Registros
Nombre Bytes Uso
$v0 4 Carga un valor inicial inmediatamente
$a0 1 Cargar de un argumento, el numero solicitado al usuario
$v0 5 Carga un valor inmediatamente
$t0 1 Almacenamiento temporal de un valor
$t1 2 Almacenamiento temporal de un valor
$t2 1 Almacenamiento temporal de un valor

Para saber que constante se debe utilizar después del signo $ y el número se debe tener
claro su propósito ya que existen diferentes categorías.

TRADUCCION A LENGUAJE ENSAMBLADOR

.
data
intro: .asciiz "\n Saber si un numero es primo"
pedir_num: .asciiz "\n Insertar el numero: "
saludo_no: .asciiz "\n El numero no es primo"
saludo_si: .asciiz "\n El numero es primo"

.text
main: li $v0 4
la $a0 intro
syscall
la $a0 pedir_num
syscall
li $v0 5
syscall
move $t0 $v0
li $t1 2

loop: beq $t0 $t1 es_primo


div $t0 $t1
mfhi $t2
beqz $t2 no_primo
addi $t1 $t1 1
b loop

no_primo:
li $v0 4
la $a0 saludo_no
syscall
b exit

es_primo:
li $v0 4
la $a0 saludo_si
syscall
b exit

exit: li $v0 10
syscall

ALU en Logisim
1b ALU
8b ALU

También podría gustarte