Académique Documents
Professionnel Documents
Culture Documents
Lectura fundamental
Conjunto de Instrucciones
(ISA – Instruction Set Architecture)
Contenido
3 Tipos de Instrucción
4 Registros
5 Modos de Direccionamiento
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.
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.
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.
POLITÉCNICO GRANCOLOMBIANO 3
Los principios de diseño de MIPS son (Hennessy & Patterson, 2000):
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:
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:
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.
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
Por ejemplo:
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:
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.
# 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
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.).
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:
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).
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).
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).
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:
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.
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:
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.
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
Instrucciones tipo I
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.
POLITÉCNICO GRANCOLOMBIANO 14
Figura 10. Algoritmos de alto nivel
Fuente: Elaboración Propia (2017)
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
POLITÉCNICO GRANCOLOMBIANO 17