Vous êtes sur la page 1sur 17

Unidad 2 / Escenario 3

Lectura fundamental

Conjunto de Instrucciones
(ISA – Instruction Set Architecture)

Contenido

1 MIPS Microprocessor without Interlocked Pipeline Stages

2 Qué es el conjunto de instrucciones

3 Tipos de Instrucción

4 Registros

5 Modos de Direccionamiento

6 Traducción de ensamblador a máquina

7 Herramienta de simulación: MARS

8 Breve introducción a la aritmética para procesadores

Palabras clave: set de instrucciones (ISA), lenguaje ensamblador, procesador, lenguaje de máquina.
Diariamente se utilizan sistemas de cómputo para apoyar tareas en diversos (si no todos) campos.
Desde la ingeniería, hasta la agricultura. Gracias a las interfaces de usuario amigables, estas tareas
se realizan de forma casi trivial, de forma que los usuarios aprenden rápidamente utilizar nuevos
dispositivos o aplicaciones.

A través de esta lectura se presenta una introducción a qué pasa en el sistema de cómputo para
que sea capaz de traducir un conjunto de pasos de un algoritmo, en operaciones ejecutables por el
hardware del computador.

Esta introducción ayudará a responder:

¿Cómo el hardware de estos dispositivos entiende nuestras órdenes?

¿Cómo un computador recibe y ejecuta tareas?

Adicionalmente, este espacio permitirá entender cómo se traduce una instrucción a un conjunto que
1s y 0s que el hardware del computador pueda interpretar y ejecutar.

1. MIPS Microprocessor without Interlocked Pipeline Stages


En este módulo se estudiará una de las arquitecturas más populares en la actualidad: aquella en la
que la memoria de datos sólo se puede acceder a través de instrucciones de lectura y escritura load/
store. Específicamente, se estudiará esta arquitectura desde un caso particular: MIPS corresponde a
la sigla de Microprocessor without Interlocked Pipeline Stages (Microprocesador sin etapas de pipeline
bloqueadas). Su nombre se debe a que, en esta arquitectura, las instrucciones se ejecutan por etapas
en el procesador. Adicionalmente, estas etapas no dependen unas de otras y todas las instrucciones se
ejecutan pasando por todas las etapas. A este mecanismo de ejecución de instrucciones se le denomina.

El pipeline permite un paralelismo a nivel de instrucción. La razón es que más de una instrucción se puede
ejecutar a la vez, siempre y cuando estén en diferentes etapas. En la Figura 1 se muestra un ejemplo.

En la parte superior de la imagen se ejecuta el proceso de lavar la ropa (que representa, como un
recurso ilustrativo, una instrucción) sin aprovechar el pipeline, y en la parte inferior, aprovechando
el pipeline. De acuerdo con la imagen, lavar la ropa se hace en 4 etapas: lavado, secado, planchado y
guardado. Sin aprovechar el pipeline, cada “tanda” (instrucción) pasa por las 4 etapas, y solo hasta que
se acaben las todas las etapas, inicia la siguiente “tanda” (instrucción). Aprovechando el pipeline, la
“tanda” uno inicia, y tan pronto pasa la primera etapa, inicia la segunda “tanda”: mientras la primera se
encuentra en secado, la segunda está en la etapa de lavado.

POLITÉCNICO GRANCOLOMBIANO 2
Así, sin pipeline 4 “tandas” (equivalentes a las instrucciones) se ejecutan en 8 horas. Con pipeline, las
mismas 4 “tandas” se realizan en 3 horas y media. Al pipeline se le denomina paralelismo a nivel de
instrucciones y se verá con más detalle en la Unidad 4.

Figura 1. Proceso de lavado de ropa


Fuente: Elaboración Propia (2017)

Se ha seleccionado MIPS como la arquitectura a ser estudiada porque se basa en un conjunto de


características y principios de diseño que facilitan el aprendizaje de la arquitectura del computador.
Una de las características es la simplicidad; por ejemplo: todas las instrucciones tienen el mismo
tamaño que es, además, el mismo tamaño de los datos: 32 bits para MIPS32 y 64 bits para MIPS64.

Figura 2. Tipos de Arquitectura MIPS: MIPS32 y MIPS64


Fuente: Elaboración Propia (2017)

POLITÉCNICO GRANCOLOMBIANO 3
Los principios de diseño de MIPS son (Hennessy & Patterson, 2000):

• La simplicidad favorece la regularidad. Que se ve reflejado en el hecho de que todas las


instrucciones tengan el mismo tamaño, todas las instrucciones pertenezcan a alguno de
tres grandes tipos y todas las instrucciones de un mismo tipo tengan el mismo formato de
instrucción.

• Si es más pequeño es más rápido. El manejo de registros en MIPS es óptimo. Además,


la cantidad de registros coincide con el tamaño de las instrucciones, facilitando también
la regularidad. El usar registros para almacenar los datos más inmediatos, ayuda a que el
procesador sea más rápido.

A continuación, se define lo que es el conjunto de instrucciones, específicamente ejemplarizando


con MIPS. En la siguiente lectura se realizará un repaso por algunas de las secciones de esta lectura,
particularizando sobre el proceso de diseño de un conjunto particular, propio, que parte de un reto de
diseño.

2. Qué es el conjunto (set) de instrucciones


Como se presentó en el escenario 1, la arquitectura del computador estudia cómo un lenguaje de
programación se traduce a un conjunto de instrucciones que pueden ser interpretadas y ejecutadas
por una interconexión de elementos de hardware. Al conjunto de instrucciones se le denomina
ISA (Instruction Set Architecture) y a la interconexión de los elementos de hardware se le denomina
microarquitectura. El conjunto de instrucciones representa todas las instrucciones que puede
interpretar y ejecutar el hardware. Se distribuyen en diferentes tipos, según su funcionalidad. Algunas
orientadas a la ejecución de operaciones aritméticas o lógicas, otras a los saltos condicionales, otras
a los saltos incondicionales, etc. Adicionalmente, el conjunto de instrucciones incluye la definición
de los registros que se utilizan en el sistema, los modos de direccionamiento y del formato en el que
cada tipo de instrucción se traduce a lenguaje de máquina. En las secciones siguientes se detallarán y
ejemplificarán cada uno de estos elementos.

En la lectura complementaria se puede encontrar una versión del conjunto de instrucciones de


MIPS que incluye la definición completada y detallada de las instrucciones, su tipología, los registros
que se utilizan, los modos de direccionamiento y las estructuras que definen las tipologías para escribir
las instrucciones en formato binario. Es importante aclarar que más que una lectura, este documento
es un manual que puede ser consultado cuando sea necesario y que no se debe leer de forma
continua.

POLITÉCNICO GRANCOLOMBIANO 4
3. Tipos de Instrucción
De acuerdo con la documentación de MIPS, las instrucciones de esta arquitectura se agrupan en
3 grandes categorías, de acuerdo con su formato de instrucción: R, I y J. El tipo R (R de registros)
corresponde a aquellas instrucciones en la que los datos (operandos y resultados) son almacenados
en registros (Por ejemplo las instrucciones aritméticas o las lógicas). Las instrucciones de tipo I
(I de inmediato) corresponden aquellas donde el valor con el que se opera viene como parte de la
instrucción (equivalente a una constante).

Finalmente, las instrucciones tipo J, corresponde a instrucciones que permiten el cambio del flujo
del programa, como aquellas usadas en saltos condicionales y aquellas correspondientes a saltos
incondicionales (Araújo, Pádua, Andrade, & Correa, 2014).

Más allá de los tipos de instrucciones definidos por el formato de instrucción, las instrucciones se
pueden agrupar en diferentes categorías, de acuerdo con su utilidad y uso en la implementación de
algoritmos. A continuación se presentan en las categorías más generales:

3.1. Aritmético-lógicas

Como su nombre lo indica, corresponden a todas aquellas que reciben 3 parámetros: 2 indicando los
operandos y 1 indicando el resultado, y adicionalmente aplican una operación aritmética o lógica.

Por ejemplo:

add $s0, $s1, $s2


indica que en $s0 se guarde el resultado de sumar (add) $s1 con $s2.

3.2. Artiméticas-inmediatas

Son muy similares a las anteriores, pero cambia el modo en el que se direccionan los datos que
se van a operar. En las inmediatas los datos a operar son constantes cuyo valor se incluye en la
misma instrucción. A diferencia de las anteriores, en las que el valor se almacena en un registro y la
instrucción incluye es la dirección del registro.

POLITÉCNICO GRANCOLOMBIANO 5
Por ejemplo:

addi $s0, $s1, 127


indica que en $s0 se guarde el resultado de sumar (addi) $s1 con el valor constante 127.

En lenguaje ensamblador de MIPS, las constantes están en decimal por defecto. Para escribirlas en
binario, hay que antecederlas con 0b y en hexadecimal con 0x.

3.3. De transferencia de datos

Permiten, en esencia, comunicar los registros con la memoria RAM, de manera que se puedan cargar
datos en los registros desde la memoria RAM (load (Resaltar y poner con un tipografía como de
código)) o guardar datos desde los registros hacia la memoria RAM (store (Resaltar y poner con un
tipografía como de código)).

Por ejemplo:

sw $s0,0($s1)

indica que se debe guardar (sw) el valor de $s0 en la posición apuntada por $s1(Es decir que $s1
no contiene un valor sino una dirección). El 0 que antecede el ($s1) indica que se debe guardar
justamente en esa posición. Si fuera un 4, indicaría que es 4 bytes delante de la dirección apuntada
por $s1, o un 8, indicaría 8 bytes delante de la dirección apuntada por $s1. En MIPS el valor que
antecede el registro que apunta la dirección debe ser una constante numérica (como en el ejemplo
que es 0).

POLITÉCNICO GRANCOLOMBIANO 6
3.4. Salto

3.4.1. Condicionales

Permiten ir a una línea de código de acuerdo con una condición.

Por ejemplo:

beq $s0, $s1, fin


Compara si $s0 es igual a $s1 y si lo es, salta a la línea etiquetada con fin.

3.4.2. Incondicionales

Permiten moverse entre distintas líneas del código, saltando de una línea a otra sin depender de una
condición.

Por ejemplo:

j for
Permite saltar a la línea de código que tenga la etiqueta “for” (Resaltar y poner con un tipografía
como de código).

3.4.3. Comparación

Son muy similares a las aritmético-lógicas. Se encargan de poner un registro en 1 o 0 en caso de que
se cumpla una condición.

Por ejemplo:

slt $s0,$s1, $s2


pone en 1 el registro $s0 en caso de que $s1 sea menor que $s2.

POLITÉCNICO GRANCOLOMBIANO 7
4. Registros
Los registros son espacios de memoria de datos, tipo RAM, que se comunican directamente con la
ALU (Unidad Lógico-Aritmética). Esto simplifica la estructuración de las instrucciones y aumenta
la velocidad con la que se ejecutan las operaciones. En general, los registros se usan para almacenar
datos, pero existen algunos de propósito específico que se usan para almacenar direcciones o
apuntadores. En la Tabla 1 se presentan los 32 registros de la arquitectura MIPS.

El registro $zero sirve de constante nula: es un registro de sólo lectura que siempre vale cero (0).
Los registros $s0 a $s7 sirven para almacenar datos, tipo variables o direcciones de la memoria RAM
cuando se usan para almacenar apuntadores a arreglos, matrices y otras estructuras. Los registros
$t0 a $t9 se usan de forma similar a los $s, pero por convención se prefieren para datos temporales,
de cálculos parciales, cuyo valor no tenga que mantenerse por mucho tiempo. Los registros $a0-$a3,
$v0-$v1, $ra se utilizan para las funciones, los $a para enviarlos como parámetros, los $v para retorno
y el $ra para la dirección de memoria de programa a la que debe retornar cuando se acabe la función.
Los demás registros son de propósito específico: $sp como apuntador de pila, $fp como apuntador de
frame o sección, $gp como apuntador global.

Tabla 1. Registros de la arquitectura MIPS

# del
Nombre Uso
registro
$zero 0 Constante 0
$v0 - $v1 2-3 Valores para resultados y evaluación de expresiones
$a0 - $a3 4-7 Argumentos
$t0 - $t7 8-15 Temporales
$s0 - $s7 16-23 Variables
$t8 - $t9 24-25 Más temporales
$gp 28 Global pointer
$sp 29 Stack pointer
$fp 30 Frame pointer
$ra 31 Dirección de retorno

Fuente: Elaboración propia (2017)

POLITÉCNICO GRANCOLOMBIANO 8
5. Modos de Direccionamiento
El direccionamiento, en la arquitectura del computador, se refiere a la forma en que se acceden los
datos que van a ser operados o que se requieren para ejecutar una instrucción. En MIPS, existen los
siguientes modos de direccionamiento: Registro-Indirecto, Desplazamiento, Índice base, Memoria-
indirecto, Auto-incremento, Auto-indexación, Escalado, Relativo al PC (Contador de programa)
(Martin & Roth, n.d.).

5.1. Directo a registro:

En este modo de direccionamiento se incluye en la instrucción la dirección del registro que se desea
acceder, como fuente o como destino.

Por ejemplo:

add $s1, $s2, $s3

Equivale a $s1=$s2+$s3 de manera que se envían como parámetros de la instrucción las direcciones
de los registros $s1 (destino), $s2 (fuente) y $s3 (fuente).

Figura 3. Direccionamiento directo a registro


Fuente: Elaboración Propia (2017)

5.2. Indirecto a registro:

En este tipo modo de direccionamiento se incluye la dirección de un registro y un desplazamiento. El


dato que se usa como operando es el que se encuentre en una posición de la RAM equivalente a la
suma del apuntador del registro más el desplazamiento en la instrucción.

POLITÉCNICO GRANCOLOMBIANO 9
Por ejemplo:

lw $s3, 4($s2)
Indica que en el registro $s3 (destino) se va a guardar (load - lw) lo que esté en la posición de la
memoria RAM a la que apunte ($s2+4).

Figura 4. Direccionamiento indirecto a registro


Fuente: Elaboración Propia (2017)

5.3. Relativo a PC (Contador de programa):

En este caso, el operando corresponde a una dirección de la memoria de programa y resulta de la


suma entre el valor actual del contador de programa y una constante que viene en la instrucción.

Por ejemplo:

beq $s1,$s2,for

Esta instrucción salta a la línea del programa con etiqueta for cuando $s1 es igual a $s2. Como las
direcciones de programa son largas, no se guarda la dirección completa con etiqueta for, sino la
distancia entre la línea actual y la línea for (el desplazamiento).

Figura 5. Direccionamiento relativo a PC


Fuente: Elaboración Propia (2017)

POLITÉCNICO GRANCOLOMBIANO 10
5.4. Inmediato

El modo de direccionamiento inmediato se refiere a aquellas instrucciones en los que uno de los
operandos es un valor constante que viene dentro de la instrucción.

Por ejemplo:

addi $s6, $s7, 8

Corresponde a $s6=$s7+8 donde 8 sería direccionado de forma inmediata por ser una constante que
haría parte de la instrucción.

Figura 6. Direccionamiento relativo a PC


Fuente: Elaboración Propia (2017)

5.5. Pseudodirecto:

Se utiliza cuando se requiere una dirección del contador de programa absoluta. Funciona de manera
que en la instrucción viene un valor constante que representa la dirección. A este número se le
desplaza dos posiciones a la izquierda (lo multiplica por 4 - en binario) y luego lo concatena con los 4
bits más significativos del valor actual del contador de programa. Este resultado es el nuevo valor del
contador de programa.

Por ejemplo:

j 2100

Salta a la posición 2100*4=8400 concatenada con los bits más significativos del valor de la posición
actual.

POLITÉCNICO GRANCOLOMBIANO 11
Figura 7. Direccionamiento pseudodirecto
Fuente: Elaboración Propia (2017)

5.6. Implícito:

Es el menos común de los modos de direccionamiento. Corresponde al direccionamiento el operando


es determinado por el código de operación.

Por ejemplo:

jal 2500

Que salta a la posición 2500*4 y adicionalmente almacena la dirección del contador de programa
actual en el registro $ra.

Figura 8. Direccionamiento implícito


Fuente: Elaboración Propia (2017)

POLITÉCNICO GRANCOLOMBIANO 12
6. Traducción de ensamblador a máquina
Cada una de las instrucciones, según su tipo, tiene un formato de instrucción que define cómo se
debe codificar desde el compilador y cómo el hardware la decodifica. A continuación se presenta
cómo son los principales formatos de instrucción y a qué corresponde a cada uno de los elementos
que conforman su estructura. En MIPS, todas las instrucciones tienen el mismo tamaño (32 bits),
independiente de su tipo. Si una instrucción requiere menos de los 32 bits, los restantes se llenan con
información basura, que nunca es usada por el hardware y por lo tanto no importa si su valor es 0 o 1.

Instrucciones tipo R

Se refiere a las instrucciones aritmético-lógicas. Los 6 bits más significativos corresponden a un


código de operación. Los 5 bits siguientes (del 26 al 22) corresponden al registro fuente 1, los 5
siguientes (del 21 al 17) se refieren al segundo registro fuente. Los bits del 16 al 12 corresponden a la
dirección del registro destino. Los últimos bits se utilizan en algunas funciones para el desplazamiento
o especificar el código de operación.

Instrucciones tipo I

Integra las instrucciones de referencia a memoria, aritméticas (inmediatas) y de salto condicional.

Los 6 bits más significativos corresponden a un código de operación. Los 5 bits siguientes (del 26
al 22) corresponden al registro fuente 1, los 5 siguientes (del 21 al 17) se refieren a la dirección del
registro destino. Los últimos bits se utilizan para un valor constante.

Instrucciones tipo J

Corresponde a las instrucciones de salto incondicional. Los 6 bits más significativos corresponden
a un código de operación. Los últimos bits se utilizan para un valor constante que representa una
dirección.

POLITÉCNICO GRANCOLOMBIANO 13
7. Herramienta de simulación: MARS
La herramienta de simulación MARS permite realizar la programación de algoritmos usando las
instrucciones de MIPS. En la simulación se puede ejecutar instrucción por instrucción, viendo el
estado de los registros, de la memoria de programa y de la memoria RAM tras la ejecución de todo un
programa o de cada instrucción. Se puede descargar para realizar el siguiente algoritmo en MIPS.

Para que se pueda interactuar con la herramienta de simulación, se propone implementar un


algoritmo en el que se guarden (en la RAM, a manera de arreglo) los divisores de un número n
guardado en un registro (para el ejemplo $s0). En las Figuras 9 y 10 se presentan, respectivamente, el
algoritmo en lenguaje de alto nivel y en lenguaje ensamblador MIPS.

Figura 9. Algoritmos de alto nivel


Fuente: Elaboración Propia (2017)

POLITÉCNICO GRANCOLOMBIANO 14
Figura 10. Algoritmos de alto nivel
Fuente: Elaboración Propia (2017)

8. Breve introducción a la aritmética para procesadores


La aritmética del procesador se refiere a la manera en que se realizan las operaciones aritméticas
dentro del procesador. Esta definición incluye lo que sucede cuando hay un desbordamiento en la
suma o la resta, cómo se manejan los productos teniendo en cuenta que la multiplicación requiere el
doble de bits para el resultado que los bits que tienen los operandos, cómo se maneja el cociente y el
residuo en una división, cómo se representan y operan los números reales, entre otros. En la lectura
complementaria del escenario 3, podrás leer más acerca de la aritmética del procesador.

POLITÉCNICO GRANCOLOMBIANO 15
Referencias
MIT –Software MARS Recuperado de: http://courses.missouristate.edu/KenVollmar/mars/ Mayo de
2017

Patt, Y. (2001). Requirements, bottlenecks, and good fortune: agents for microprocessor evolution.
Proceedings of the IEEE, 1553 - 1559.

Patterson, D., Hennessy L. (1994) Computer Organization and Design: the Hardware/Software
Interface. Editorial MK.

POLITÉCNICO GRANCOLOMBIANO 16
INFORMACIÓN TÉCNICA

Módulo: Arquitectura del Computador


Unidad 2: ISA: Instruction Set Architecture y Aritmética
para procesadores.
Escenario 3: Conjunto de Instrucciones
(ISA – Instruction Set Architecture)

Autor: Laura Juliana Cortés Rico

Asesor Pedagógico: Edwin Alcides Mojica Quintero


Diseñador Gráfico: Carlos Montoya
Asistente: Ginna Quiroga

Este material pertenece al Politécnico Grancolombiano. Por


ende, es de uso exclusivo de las Instituciones adscritas a la Red
Ilumno. Prohibida su reproducción total o parcial.

POLITÉCNICO GRANCOLOMBIANO 17

Vous aimerez peut-être aussi