Beruflich Dokumente
Kultur Dokumente
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
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
INGENIERIA DE SOFTWARE
3
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
máximo de operandos, forma en que los datos e instrucciones son almacenados en memoria.
Distintos procesadores tienen distintos tipos de instrucciones.
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).
INGENIERIA DE SOFTWARE
4
En el diseño de un conjunto de instrucciones se considera los siguientes puntos:
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).
INGENIERIA DE SOFTWARE
5
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 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:
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.
INGENIERIA DE SOFTWARE
6
La microarquitectura y la arquitectura de conjunto de instrucciones constituyen la arquitectura de
computadora.
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).
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
INGENIERIA DE SOFTWARE
7
Sus características más importantes son:
3. Problema Estudio
4. Algoritmo Solución
INGENIERIA DE SOFTWARE
8
4.1. 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:
INGENIERIA DE SOFTWARE
9
ALGORITMO 1
ALGORITMO 2
INGENIERIA DE SOFTWARE
10
Corresponde al siguiente Diagrama Solución:
INGENIERIA DE SOFTWARE
11
4.2. Tipos de Instrucció n lenguaje alto nivel
ALGORITMO 1
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
INGENIERIA DE SOFTWARE
12
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: 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
Instrucción: else
Tipo de Instrucción: Condicionales Permiten ir a una línea de código de acuerdo con
una condición
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.
INGENIERIA DE SOFTWARE
13
Db Directiva asociada a datos dB1,2,5 coloca los datos 1,2,5 en
forma secuencial en una tabla
MOV R1, R2 El contenido del registro R2 es transferido al MOV B,C se almacena C en el
registro R1, funciona para registros B,C,D,E,H,L registro B
y acumulador.
MVI R1,R2 Carga un registro con un dato inmediato MVI H, 33H carga en el registro H el
valor 33H
CMP Reg Compara el registro o memoria con el CMP B si el acumulador contiene
acumulador 0AH y el registro B contiene 06H,
compara B con el acumulador
efectuando una resta interna.
CPI dato Compara el contenido del acumulador con un CPI 20H
dato inmediato Se compara con el acumulador a
través de la suma complemento a
dos
STAX reg Almacena el contenido del acumulador STAX B almacena el contenido del
acumulador en la posición del
registro B
LDAX reg Cargar en el acumulador LDAX D cargara en el acumulador
en el contenido de la posición de
memoria D
INR reg Incrementar registro o memoria INR A se incrementa el valor en
uno entonces si el registro contiene
98H quedara en 99H
ADD Sumar registro o memoria en el acumulador ADD B se suma el valor del registro
B con el contenido del acumulador
SUB reg Restar registro o memoria en el acumulador SUB E se resta el valor del registro
E al contenido del acumulador
SBI dato Restar del acumulador un dato inmediato SBI 01H se resta el valor 01H del
contenido del acumulador
ANI dato Función lógica AND entre el acumulador y un ANI 0HF se realiza la comparación
dato inmediato AND bit a bit entre el acumulador y
el dato inmediato 0FH
NOP No realiza ninguna operación
JMP dir Altera la ejecución del programa y carga el
valor de dir en el contador del programa
JPE dir Salta si la paridad es par JPE 0FH el digito de paridad se
pone en 1 si la condición es valida
CALL dir Llamada incondicional Guarda el contenido del contador
del programa y salta a la dirección
especifica por dir
CPE dir Llamar si la paridad es par
RET Retorno incondicional Echa dos bytes fuera del stack y los
mete en el registro contador del
programa
RPE Retorno si la paridad es par
INGENIERIA DE SOFTWARE
14
IN port Entrada lee los 8 bits de datos del port y los
carga en el acumulador IN 2 deposita en el acumulador los
datos del puerto 2
PUSH pr Coloca los datos en el stack PUSH B almacenara el contenido
de B en el stack y decrementa dos
unidades el puntero
Los registros que se utilizaran durante el desarrollo del programa está n listados a
continuació n:
INGENIERIA DE SOFTWARE
15
MVI Direccionamiento inmediato
En estas instrucciones uno de los
operandos es un valor constante que
viene en la instrucción.
ADD Registro En estas instrucciones la dirección del
registro al que se desea acceder como
fuente o destino se incluye en la
instrucción.
.data
cad: .asciiz "\n Introduzca un nú mero positivo: "
cad2: .asciiz "\n El nú mero ha de ser positivo!"
cad3: .asciiz "\n El nú mero es primo "
cad4: .asciiz "\n El nú mero no es primo"
.globl main
.text
main:
li $v0, 4
la $a0, cad
syscall #Llamada al sistema para mostrar la respuesta
li $v0, 5
syscall #Llamada al sistema para cargar el numero
calcular:
bgt $a3, $zero, seguimos # Aquí se comprueba que el nú mero es positivo
li $v0, 4 #En caso contrario se envía la cadena de error de $a1
move $a0, $a1
syscall #El mensaje del nú mero no es positivo
li $v0, -1 #Se envia el -1 que es el có digo de error determinado
jr $ra
INGENIERIA DE SOFTWARE
16
seguimos:
beq $a3, $a2, final
addi $sp,$sp, -4 #se almacena el registro $ra en la pila
sw $ra, ($sp)
jal primo #Ya se encontró que es positivo, se almacena el valor, entonces se llama a la
funció n que determina si es primo
noprimo:
addi $a2, $a2, 1
j seguimos
final:
lw $ra, ($sp) #Se saca de la pila $ra
addi $sp, $sp, 4
jr $ra
jal calcula_divisores #Esta funció n retorna en $v0 el nú mero de divisores del nú mero
almacenado en $a0
es_primo:
li $v0, 1 #Devolvemos uno porque es primo
jr $ra
INGENIERIA DE SOFTWARE
17
calcula_divisores:
li $t1, 0 # se inicia el contador de divisores
li $t2, 1 #El primer nú mero que hace funció n de divisor es el 1
bucle:
bgt $t2, $a0, fin #Se verifica que el valor analizar sea mayor si no se finaliza el bucle
div $a0, $t2 #Dividimos el nú mero entre el posible divisor
mfhi $t3 #Se guarda el numero restante
addi $t2, $t2, 1 #Se continua el proceso con el numero siguiente
bne $t3, $zero, bucle #Como el resto no es 0, no es divisor, se continua
addi $t1, $t1, 1 #Si el resto es 0, es divisor, entonces se suma uno al contador
j bucle #Se continua realizando el bucle
fin:
move $v0, $t1 #Se pasa el nú mero de divisores a $v0
jr $ra
24020004
3c011001
34240000
0000000c
24020005
0000000c
00023821
24060001
0c10000b
2402000a
0000000c
0007082a
14200005
24020004
00052021
0000000c
INGENIERIA DE SOFTWARE
18
2402ffff
03e00008
10e60009
23bdfffc
afbf0000
0c10001f
10400003
24020001
20c40000
0000000c
20c60001
08100012
8fbf0000
23bd0004
03e00008
0004082a
14200000
23bdfffc
afbf0000
0c10002e
8fbf0000
23bd0004
24080002
10480004
24080001
10480002
24020000
03e00008
24020001
03e00008
24090000
240a0001
008a082a
14200006
008a001a
00005810
214a0001
1560fffa
21290001
08100030
00091021
03e00008
INGENIERIA DE SOFTWARE
19
6. Entrega 3 Diseño de la microarquitectura
Se realiza modelo de caja negra para el cálculo de un numero binario, para la ejecució n de las
instrucciones se planteó inicialmente un circuito de caja negra donde se especifican cuantas
entradas tendrá el ALU y cuá l es su salida.
Tabla de Verdad:
INGENIERIA DE SOFTWARE
20
Expresión Booleana:
Este bloque se desarrolla para realizar operaciones aritméticas y ló gicas sobre nú meros
binarios de 4 bits.
Se inicia con un bloque, pero de acuerdo con las especificaciones del có digo se ubican en
cascada para realizar operaciones sobre nú meros de mayor cantidad de bits.
Prueba (1)
Prueba (2)
INGENIERIA DE SOFTWARE
21
Prueba (3)
Prueba (4)
INGENIERIA DE SOFTWARE
22
E1=1 E2=0 E3=1 E4=1
Este ALU tiene la instrucció n de ALUop, esto quiere decir que lleva al banco de registro (BR) la
operació n que se indico por medio de los bits correspondientes, para este diseñ o la ALU tiene
los siguientes có digos de control para la correspondiente funció n:
Esta instrucció n se realiza entre el registro fuente del banco de registros y registro fuente dos
que para el ejercicio será re.
Este sistema de registro se construye como un sistema secuencial síncrono para almacenar
varios bits de informació n.
INGENIERIA DE SOFTWARE
23
El formato de la informació n es de tipo en serie, es decir los bits se van a trabajar uno después
de otro, y de igual forma se van a enviar.
Cada registro como el que se presenta trabaja con 8 bits, tipo serie - serie, tanto para
almacenamiento como registros de desplazamiento.
Este banco de registro trabaja con este sistema y su similar bloque en cuatro (04) series de
paralelo para lograr un registro de 32 bits, como se demuestra en el archivo adjunto.
Para copiar su informació n se utilizan dos multiplexores que reciben los 32 bits, pero se
selecciona a través del RS y RT los dos operandos de la operació n, esto en razó n al tipo de
operació n realizada que se identifica segú n el tú nel IRS y IRT que establecen diferentes tipos
de operació n.
La salida se hace con el demultiplexor, que realiza la operació n contraria, recibe el numero de
salida y de acuerdo con el identificador RD se elige porque salida se enviara la informació n.
INGENIERIA DE SOFTWARE
24
Para el desplazamiento de los registros se presentan las opciones de saltar de acuerdo con un
resultado o saltar si es igual comparando un registro y salto a la direcció n especifica BEQ, esta
instrucció n tienes 3 bits OPCODE (100), 3 bits para el fr o registro de comparació n, 3 bits para
rd o registro de comparació n y 7 bits para la direcció n.
Para el salto indirecto Jump, la direcció n debe ser relativa, tiene 16 bits los primeros 3 bits
son para OPCODE (110) y los siguientes 13 bits la direcció n del salto.
Y la instrucció n final BNE que significa si menor, esto quiere decir que si de la comparació n el
resultante es menor se salta al registro especificado. Para esto se requieren dos registros a
comparar y una direcció n a la cual llegar, esto sucede si el primer registro es menor que el
segundo.
Sus 16 bits se dividen de la siguiente manera 3 bits para la OPCODE que en este caso es (101),
3 bits para el registro fuente o rf, 3 bits para el registro destino o rd y 7 bits para el
desplazamiento relativo que son los bits menos significativos.
INGENIERIA DE SOFTWARE
25
6.3. Unidad de Control
Este circuito tiene la funció n de controlar el flujo de datos a través del procesador, por esta
razó n es importante entender las características del mismo para iniciar el diseñ o de su unidad
de control, en este orden de ideas y de acuerdo al có digo ya implementado, el procesador
maneja instrucciones de 16 bits compuestas de dos campos, los primeros bytes contienen el
có digo de operació n o OPCODE y los restantes en diferentes formas uno o dos operadores
inmediatos o una direcció n de operando como se presenta anteriormente.
Así las cosas, si el OPCODE siempre tiene 3 bits el contador del programa dispone de 13 bits.
La instrucció n ADD tienes dos registros y una constante, su funció n es leer rf del banco de
registro tomas la constante extenderla en signo hasta 16 bits y sumarla al registro rf y el
resultado de la operació n llevarlo al registro rd del banco de registro.
INGENIERIA DE SOFTWARE
26
La instrucció n tiene 16 bits el OPCODE tiene 3 bits, el cual es (001), luego vienen 3 registro
que pertenecen al registro fuente o rf, 3 bits má s para el registro destino y luego los 7 bits de
la constante que deben extenderse en signo a 16 para sumar dos cantidades de 16 bits.
La instrucció n store o STR sirve para escribir en un registro determinado del banco de
registro 16 bits previamente obtenidos.
El formato de esta instrucció n tiene 16 bits, 3 bits para OPCODE que para esta instrucció n es
de (011), 3 bits para el registro fuente, 3 bits para el registro destino y el restante es ceros
porque no se utilizan.
INGENIERIA DE SOFTWARE
27
La unidad de control en su funció n aritmético-ló gica tiene dos entradas, la ALUop o señ al de
control y la funció n específica, y una sola salida donde se observa el có digo a realizar, con un
tamañ o de tres (03) bits.
Es importante iniciar con un repaso del funcionamiento del procesador durante el desarrollo
del có digo implementado, entonces, a grandes rasgos para cada instrucció n se debe enviar el
contenido de PC al banco de registros, cargar las instrucciones y aumentar PC.
Se deben leer uno o dos registros de acuerdo con la instrucció n, el programa presenta los dos
casos.
Para establecer la ruta de datos se observa có mo se conecta el Program Counter (PC) con la
memoria de instrucciones y el sumador con el objetivo de aumentar el PC.
INGENIERIA DE SOFTWARE
28
Se adjunta archivo Logisim.
7. Resultados Obtenidos
Durante las diferentes etapas de presentació n del presente proyecto se presentaron avances
significativos, que conllevan a la presentació n final, para la primera entrega el resultado
obtenido fue el diseñ o de un programa de alto nivel, y la especificació n de las instrucciones
requeridas para su buen funcionamiento, como en este producto se encuentran los resultados
de esa primera entrega se continuara con los resultados de la segunda entrega.
Para la segunda entrega los productos que se presentaron fueron la definició n detallada de las
instrucciones que se utilizan en el leguaje ensamblador de un programa que diera solució n a
la problemá tica presentada. Ademá s del programa que recibiera un numero entero y ofreciera
una respuesta sobre si este es primo o no.
INGENIERIA DE SOFTWARE
29
En la imagen anterior se observa el código, ya listo en la aplicación.
INGENIERIA DE SOFTWARE
30
De entrada, se digita el número nueve (09).
Y la respuesta es la misma.
Para la tercera entrega el resultado debe ser el Procesador diseñado para ejecutar el programa
diseñado, el cual se presenta a continuación.
INGENIERIA DE SOFTWARE
31
Y la presentación de dos ejemplos.
Para el caso del número 9,se inicia con la carga del número:
INGENIERIA DE SOFTWARE
32
El resultado de la simulación en logisim, es:
La respuesta del procesador es 00000000, lo que es relativo a falso, y quiere decir que el numero
no es primo, después de realizar 5A instrucciones teniendo en cuenta que este formato es
hexadecimal.
INGENIERIA DE SOFTWARE
33
La respuesta es la siguiente:
INGENIERIA DE SOFTWARE
34
8. Conclusiones
INGENIERIA DE SOFTWARE
35
acceso y observació n, es decir, que se dividan en objetivos má s cortos para
mejorar el proceso de elaboració n de las arquitecturas.
En el proceso de diseñ o de dispositivos de almacenamiento y procesamiento es
muy importante conocer el peso de las diferentes instrucciones y bucles que se
van a manejar, puesto que de su debida identificació n se puede mejorar el
rendimiento de estos dispositivos al diseñ arlos con el objetivo especificado.
Entender el funcionamiento de un procesador es una tarea bastante difícil, no solo
basta consultar la informació n disponible, es un tema de comprender como se
ejecuta cada instrucció n y cuales son sus cambios a través del desarrollo del
diseñ o y su respuesta a cada componente que hace parte del proceso de ejecució n.
Se identifico el amplio repertorio de instrucciones que hacen parte del procesador
8086, y se seleccionaron un subconjunto para realizar el programa propuesto, con
lo cual se reconoció la mínima cantidad de operaciones que son necesarias para
alcanzar el gran numero de actividades y cálculos que son capaces de realizar los
computadores actuales, así las cosas, se puede concluir que las matemá ticas
modernas son dependientes de un bajo numero de operaciones bá sicas, que
siendo utilizadas correctamente facilitan grandes cálculos y disminuyen el tamañ o
de memoria y registros que se deben utilizar para su solució n.
Es muy importante abordar cada uno de los circuitos de forma individual,
profundizando en su diseñ o y parametrizació n uno por uno con el objetivo de
encontrar soluciones basadas en la interconexió n de estos, ú nicamente cuando se
reconozcan las bondades y características de cada circuito de forma individual.
Para el mundo actual donde el flujo de informació n en todos los aspectos es
altísimo, las necesidades de las personas y empresas es cada vez mayor, en este
momento es cuando la arquitectura de computadores toma importancia, por la
capacidad que tiene de amoldar diferentes equipos de computo y sus
componentes a las necesidades de cada usuario, así las cosas, no solo la
informació n aumenta, también lo hacen las expectativas de los clientes que día a
día solicitan equipos má s potentes y especializados de acuerdo a sus necesidades
particulares.
INGENIERIA DE SOFTWARE
36
9. Bibliografía
Pérez, S., Arguello, D., & Facchini, H. (2018). Arquitectura de Computadores 7a. Edición. Mendoza,
Argentina: Rodriguez 273.
INGENIERIA DE SOFTWARE
37