En general, las instrucciones (de máquina) de un procesador constituyen las órdenes o
comandos para decirle al hardware lo que tiene que hacer. En general también, hay que hablar en el
idioma que habla o entiende el computador para que éste pueda seguir y ejecutar las órdenes
dadas. Veremos luego, y con más detalle, un set de instrucciones real que es común en
procesadores RISC reales. Una instrucción es una orden y tiene un significado para la máquina,
ésta indica la operación a ejecutar y los operandos o datos a procesar. Comúnmente, una
instrucción puede tener uno o más operandos, los cuales vienen con la instrucción o deben ser
extraídos desde la memoria. Por ejemplo, una instrucción de suma siempre tiene dos operandos y
un lugar donde colocar el resultado.
"Es fácil ver por los métodos lógicos normales, que existen ciertos set de
instrucciones que en abstracto son adecuados para controlar y lograr la ejecución de cualquier
secuencia de operaciones... Las consideraciones realmente decisivas desde el punto de vista actual
para seleccionar un set de instrucciones son más de naturaleza práctica: simplicidad de la
estructura exigida por el set de instrucciones y la claridad de su aplicación a los problemas
realmente importantes junto a la velocidad de manipulación de esos
problemas".
Como se señaló anteriormente, la cantidad de operandos que puede contener una
instrucción varía, pero acá veremos instrucciones que pueden llegar a tener hasta tres
operandos, especialmente las instrucciones de tipo aritmética y lógica. Un principio importante
que se debe dejar en claro, es que los operandos de las instrucciones aritméticas y lógicas no
pueden ser variables de memoria, éstos deben proceder de otros elementos internos del procesador
denominados registros. Los registros son posiciones de almacenamiento especiales generalmente del
tamaño de una palabra (4 bytes o 32 bits). Los registros constituyen los ladrillos con los cuales
se construye el computador. Como se señaló anteriormente, estos son limitados.
Ejemplo 1.
Supongamos que deseamos realizar la siguiente suma, a través de una
instrucción en lenguaje C:
Las variables de memoria s, f, g, k y n pueden ser asignadas a los registros $16, $17, $18, $19 y $20, respectivamente. El código en lenguaje assembly es el siguiente:
add $8,$17,$18 # registro $8 contiene f+g add $9,$19,$20 # registro $9 contiene k+n sub $16,$8,$9 # s obtiene $8-$9 de $16.
El lenguaje assembly o ensamblador es un lenguaje simbólico (o mnemónico) que
permite representar con símbolos o caracteres las instrucciones de máquina y los registros del
procesador. Sólo nos vamos a familiarizar, por simplicidad, con este lenguaje para programar la
máquina, y no con el verdadero lenguaje de máquina el cual está constituido sólo por
ceros (0) y unos (1). De todas maneras, y por conveniencia, podemos llamar lenguaje de máquina
al lenguaje assembly.
La instrucción add que se vió anteriormente, permite sumar dos elementos
(contenidos en registros) y deja el resultado en otro elemento (otro registro). Por ejemplo, la
instrucción add $8,$17,$18 significa sumar los contenidos de los registros $17 y
$18 y dejar el resultado en el registro $8, similar a la instrucción sub la cual
resta.
Las instrucciones div (división), mult (multiplicación), y las lógicas
and, or, y xor, tienen un formato similar a la suma. A excepción de la
instrucción not que sólo posee dos operandos. Por ejemplo, la instrucción not
$8,$9 deja la negación lógica bit a bit del registro $9 (invirtiendo los bits) en el
registro $8.
Las instrucciones aritméticas pueden manipular datos numéricos de tipo entero y real, en
su representación punto fijo y punto flotante. Los datos de tipo entero son generalmente de cuatro
bytes (es decir, una palabra completa según nuestro procesador y en lenguaje C se declaran
como int, los enteros cortos (short int) ocupan 2 bytes, es decir, media palabra. Por
último, hay enteros de un byte, que pueden ser manejados como un tipo char sin signo (unsigned char en lenguaje C), o como tipo byte en el lenguaje de programación
JAVA. Los datos reales de simple y doble precisión pueden ocupar cuatro o más bytes
cuando se utiliza la notación punto flotante. Un número en punto flotante (conocido también
como notación científica), se compone de tres elementos o campos consecutivos: un signo, una
mantisa, y un exponente, tal como se muestra a en el cuadro 7.2, donde:
: Es el sigo del número.
: Exponente normalizado
: Mantisa
que ocuparía 8 bytes (dos palabras) si es doble precisión.
Por ejemplo, en el número real
el elemento
sería el signo
; el exponente
; y la mantisa
.
Por último, a modo de conclusión, todas las operaciones de
tipo aritmético/lógicas se llevan a cabo sobre los registros.