Este documento describe las instrucciones y modos de direccionamiento de la arquitectura MiniMIPS. Explica que MiniMIPS usa un conjunto de instrucciones load/store y describe formatos de instrucción comunes como add, sub, y branch. También cubre el uso de registros, memoria, y la pila para pasar parámetros entre procedimientos y almacenar datos temporales.
Instrucciones MiniMIPS, direccionamiento y procedimientos
1. INSTRUCCIONES Y DIRECCIONAMIENTO
VISION ABSTRACTA DEL HARDWARE
FORMATOS DE INSTRUCCION
ARITMETICA SIMPLE E INSTRUCCIONES LOGICAS
INSTRUCCIONES LOAD Y STORE
INSTRUCCIONES JUMP Y BRANCH
MODOS DE DIRECCIONAMIENTO
La interfaz correspondiente para el hardware de computadora es su arquitectura de conjunto de instrucciones.
Cuando se familiarice con el conjunto de instrucciones de una máquina, aprenderá otros con menos esfuerzo.
MiniMIPS es un conjunto de instrucciones load/store (carga/almacenamiento),
Ello significa que los elementos de datos se deben copiar o load (cargar) en registros .Antes de procesarlos.
Registros Localidades (locations) de memoria donde se pueden almacenar datos.
Instrucciones de máquina que operan sobre y almacenan datos en los registros o memoria.
Usan el esquema big-endian
(Mayor terminación).
Una doubleword (doble palabra) ocupa dos registros o localidades de memoria consecutivos.
A un elemento de datos de 32 bits almacenado en un registro o localidad de memoria (con una dirección
Divisible entre 4) se le conoce como Word (palabra).
Una instrucción de máquina MiniMIPS típica es Add a la forma compilada a=b+c.
Las secuencias de máquina o instrucciones en lenguaje ensamblador se ejecutan de arriba abajo a menos que se especifica que de manera explícita un orden de ejecución diferente mediante las instrucciones jump (saltar) o branch (bifurcación).
Al escribir programas en lenguaje de máquina, es necesario proporcionar enteros que especifican que
Direcciones de memoria o constantes numéricas.
Opcode es un código binario (patrón de bits) que define una operación.
La simplicidad y uniformidad de los formatos de instrucción son comunes en los modernos RISC (reduced instruction-set computer, computadora con conjunto de instrucciones reducido).
Las instrucciones jump (salto) o de tipo J provocan transferencia de control incondicional a la instrucción en la dirección especificada.
Se introdujeron las instrucciones add y subtract. Dichas instrucciones trabajan en los registros que contienen palabras completas (32 bits).
Las instrucciones lógicas operan en un par de operando sobre una base bit a bit.
And, Or, Xor,Nor
No hay instrucción subtract
immediate correspondiente, dado que su efecto se puede lograr al añadir un valor negativo.
Puesto que los MiniMIPS tienen un sumador de 32 bits, el operando inmediato de 16 bits se debe convertir a un valor equivalente de 32 bits antes de aplicarlo como entrada al sumador.
Las instrucciones aritméticas add y sub tienen un formato que es común a todas las instrucciones
ALU de dos operando. Por esto, el campo fn especifica la operación aritmética/lógica a realizar.
Una diferencia clave entre las instrucciones andi, ori y xori y la instrucción addi es que el
operando de 16 bits de una instrucción lógica es extendida 0 desde la izquierda para convertirla en
formato de 32 bits para procesamiento.
Los campos de una palabra se pueden extraer al operar AND la palabra con una máscara(mask) predefi nida, una palabra que tenga 1 en las posiciones de bit de interés y 0 en cualquier otra parte.
Las instrucciones load y store transfieren palabras completas (32 bits) entre memoria y registros.
El registro, que es el destino de datos para carga y fuente de datos para almacenar, se especifica en el campo rt de una instrucción de formato I.
el offset se puede especificar como un entero absoluto o a través de un nombre simbólico que se definió anteriormente
zero
Instrucciones MiniMIPS lw y sw y sus convenciones de direccionamiento de memoria que permite el acceso simple a elementos de arreglos vía una dirección base y un offset
La instrucción lui permite cargar un valor arbitrario de 16 bits en la mitad superior de un registro mientras su mitad inferior se fija en 0.
jump simple, que causa que la ejecución del programa procede
de la localidad cuya dirección numérica o simbólica se ofrece, en lugar de continuar con la siguiente instrucción en secuencia.
Jump register (registro de salto), o jr, especifica un registro que retiene la dirección blanco de salto.
direccionamiento seudodirecto se incrementa muy pronto en el ciclo de
ejecución de la instrucción (antes de la decodificación y ejecución de la instrucción),
Las instrucciones branch condicionales permiten transferir el control a una dirección específi ca cuando se satisface una condición de interés.
branch básicas basadas en comparación para las que las condiciones constituyen un contenido de registro negativo y la igualdad o desigualdad de los contenidos de dos registros.
Las instrucciones branch y jump se pueden usar para formar estructuras computacionales condicionales y repetitivas comparables a if-then (si-entonces) y while (mientras) de los lenguajes de alto nivel. El enunciado if-then
Modo de direccionamiento (addressing mode) es el método que especifica la ubicación de un operando dentro de una instrucción.
Direccionamiento implícito: El operando viene de, o resulta de ir a, un lugar predefi nido que no se especifica explícitamente en la instrucción.
Direccionamiento inmediato: El operando se proporciona en la instrucción en sí misma .
Direccionamiento por registro: El operando se toma de, o resulta colocado en, un registro específico.
Direccionamiento base: El operando está en memoria y su ubicación se calcula al agregar unoffset (entero con signo de 16 bits) al contenido de un registro base específica co.
Direccionamiento relativo al PC: Igual que el direccionamiento base, pero el registro siempre
es el contador del programa y el offset se adiciona con dos 0 en el extremo derecho
Direccionamiento seudodirecto: En el direccionamiento directo, la dirección del operando se
proporciona como parte de la instrucción.
2. PROCEDIMIENTOS Y DATOS
LLAMADAS DE PROCEDIMIENTO SIMPLES
PARÁMETROS Y RESULTADOS
USO DE LA PILA PARA ALMACENAMIENTO DE DATOS
TIPOS DE DATOS
INSTRUCCIONES ADICIONALES
ARREGLOS Y APUNTADORES
Un procedimiento representa un subprograma que, cuando se llama (inicia, invoca) realiza
una tarea específica, que quizás lleve a uno o más resultados, con base en los parámetros
de entrada (argumentos) que se le proporciona y retornos al punto de llamada.
Usar un procedimiento involucra la siguiente secuencia de acciones:
1. Poner argumentos en lugares conocidos al procedimiento (registros $a0-$a3).
2. Transferir control al procedimiento y salvar la dirección de retorno (jal).
3. Adquirir espacio de almacenamiento, si se requiere, para uso del procedimiento.
4. Realizar la tarea deseada.
5. Poner los resultados en lugares conocidos al programa que llama (registros $v0-$v1).
6. Regresar el control al punto de llamada (jr).
Con cuidado adecuado,también se pueden usar los registros $v0 y $v1 para pasar parámetros a un procedimiento, lo que, en
consecuencia, permite pasar hasta seis parámetros a un procedimiento sin usar la pila.
Un mecanismo común para salvar cosas o hacer espacio para datos temporales que requiere un procedimiento es el uso de una estructura de datos dinámicos
conocida como stack (pila).
Los elementos de datos se añaden a la pila al empujarlas en la pila y se recuperan al sacarlos. Las operaciones push (empujar) y pop (sacar)
La pila es una estructura de datos dinámicos en la que los
datos se pueden colocar y recupera en orden last-in, fi rst-out (último en entrar, primero en salir).
Los datos dinámicos del programa y la pila pueden crecer en tamaño hasta la memoria máxima
disponible.
Aun cuando técnicamente una pila es una estructura de datos last-in, fi rst-out, de hecho se puede tener acceso a cualquier elemento dentro de la pila si se conoce su orden relativo desde arriba.
Antes de una llamada de procedimiento, el programa llamante empuja los contenidos de cualesquier registros que necesite salvar en lo alto de la stack y sigue esto con cualesquiera argumentos adicionales para el procedimiento.
Cada procedimiento en una secuencia anidada deja perturbada la parte de la pila que pertenece a los llamadores previos y usa la pila que comienza conla rendija vacía sobre la entrada a la que se apunta
En consecuencia, un procedimiento que usa la pila mediante la modificación del apuntador de pila debe salvar el contenido de éste en el principio y, al fi nal, restaurar $sp a su estado original.
Tamaños de datos usados de manera común son halfword (media palabra) (16 bits) y quadword (cuádruple palabra)
(128 bits).
Entero con signo.
Entero sin signo
Número en punto flotante.
Cadena de bits.
Un uso importante para elementos de datos con tamaño de byte es representar los símbolos de un alfabeto que consiste de letras (mayúsculas y minúsculas), dígitos, signos de puntuación y otros símbolos necesarios.
La instrucción load byte, al igual que muchas otras instrucciones con propiedades similares,
tendrá dos versiones, para valores con signo y sin signo.
Índice: Usar un registro que retenga el índice i e incremente el registro en cada paso para efectuar
el movimiento del elemento i de la lista al elemento i _ 1.
Tratar con los apuntadores es conceptualmente más difícil y proclive al error, mientras que el uso de índices de arreglo aparece más natural y, por ende, es más fácil de entender. De este modo, usualmente no se recomienda el uso de apuntadores sólo para mejorar la efi ciencia del programa.
Apuntador: Usar un registro que apunta al (retiene la dirección de) elemento de lista que se examina y actualizarlo en cada paso para apuntar al siguiente elemento.
La instrucción multiplicar (multiply) (mult) representa una instrucción en formato R que coloca el producto doble palabra de los contenidos de dos registros en los registros Hi (mitad superior) y Lo (mitad inferior).
La instrucción div calcula el resto y el cociente de los contenidos de dos registros fuente, y los coloca en los registros especiales Hi y Lo, respectivamente.
Las representaciones de máquina de estas instrucciones son idénticas a las de las versiones con signo