Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CAPTULO 1 PARTE II
Instrucciones
Introduccin
En un computador el componente encargado del control del mismo es el CPU. El CPU lo hace
mediante la ejecucin de un programa, el cual lee de la memoria (por tanto, el programa debe
haberse grabado previamente en la memoria). Una memoria est constituida por registros, y se
ha visto que los registros son un conjunto de celdas de memorias, cada una de las cuales
almacena un valor binario. En resumen, podramos decir que en la memoria slo pueden estar
almacenados nmeros. Si el CPU lee instrucciones de la memoria., entonces necesariamente
estas instrucciones tienen que estar codificadas como nmeros, pues es lo nico que se podr
leer, y como la memoria se lee registro por registro, dichas instrucciones necesariamente
ocuparn un nmero entero de registros. La codificacin mencionada debe ser tal y como la
espera el CPU. Dicha codificacin ha sido creada por el equipo diseador del CPU, y hay
tantas codificaciones de instrucciones como procesadores y microcontroladores hay en el
mercado. Sin embargo todas ellas tienen algo en comn: se representan con nmeros, que
sern grabados en la memoria al formar parte de un programa. As como las instrucciones
estn codificadas como nmeros, tambin tiene que estarlo cualquier tipo de dato que se desee
sea procesado por el computador. Un ejemplo es el cdigo ASCII que permite representar
como nmeros de 7 u 8 bits las letras y signos de puntuacin del alfabeto (todos estos
denominados caracteres). Otro ejemplo lo son los nmeros con signo (sino, cmo
representaran el signo menos?).
En el presente captulo se define a una instruccin, se describe cmo se codifican como
nmeros, y cmo se almacenan stos en la memoria. Se ver que algunas instrucciones ocupan
ms espacio de memoria que otras, pero siempre la cantidad de bits que ocupan ser un
mltiplo de la longitud de palabra de los registros de la memoria.
Ejercicio:
Indicar qu representa el siguiente nmero binario: 01100001
Si:
a) Es un cdigo ASCII
b) Representa a un nmero sin signo
c) Representa a un nmero decimal en formato BCD empaquetado.
d) Representa a un nmero en formato de signo y magnitud.
Instruccin (instruction)
Una instruccin es un conjunto de bits que le indican al CPU qu operacin debe realizar,
cmo acceder a los datos que se van a utilizar en la operacin (operandos) y dnde almacenar
los resultados.
Dependiendo del CPU, este conjunto de bits puede estar agrupado en bytes, como en el caso
de los CPUs de 8 bits como el del microcontrolador 68HC11 de Motorola, o en palabras
CAPITULO1Parte2rev21.doc
02/09/2014
como en el caso del CPU del LM3S6965 (ncleo Cortex-M3) de la compaa Texas
Instruments, en el que la mayora de instrucciones son de una palabra de 16 bits, y algunas de
32 bits.
En general toda instruccin consta de dos partes: cdigo de operacin y campos de referencia
de operando.
Formatos de instrucciones
Cada instruccin es representada por un patrn de bits. Cada patrn consta de cdigo de
operacin y campos de referencia a operando. Al momento de disear el CPU, el diseador
tiene que definir cmo se representarn las instrucciones:
- Cuntos bits para los cdigos de operacin y qu bits
- Cuntos bits para referenciar a cada operando, y cuntos operandos.
CAPITULO1Parte2rev21.doc
02/09/2014
A cada manera diferente en que pueden representarse las instrucciones del CPU se le
denomina formato de instruccin, y toda instruccin del CPU corresponder a uno de dichos
formatos.
Por ejemplo, en los microcontroladores basados en ncleo Cortex-M3 se tienen los
siguientes formatos de instrucciones (slo se muestran algunos de ellos). En gris oscuro se
muestra el cdigo de operacin.
CAPITULO1Parte2rev21.doc
02/09/2014
Base
Prefijo
Observaciones
Ejemplos
2
8
16
10
0b
0
0x
ninguno
es el dgito 0, no la letra o
es el dgito 0
dgito 0, como en lenguaje C
no debe comenzar con cero
0b1100, es el nmero 12
010, es el nmero 81
0xC es el nmero 12
27
Registros
Los registros del CPU tienen un nombre con el cual se identifican. Es el fabricante del
microcontrolador el que define los nombres para dichos registros, aunque algunos de ellos,
por su funcin particular, tienen un nombre comn, como PC, e IR (Ver seccin: ejecucin de
instrucciones, para una explicacin de la finalidad de estos registros).
PC es el contador de programa
IR es el registro de instrucciones
SP es el puntero de pila (stack pointer)
En los microcontroladores con ncleo Cortex-M3 hay 13 registros de 32 bits denominados
de propsito general (general purpose), con los nombres R0, R1, hasta R12.
Transferencia de datos
Para indicar que el contenido de un registro se copia en otro registro se emplea el smbolo
o el signo :=. Si se usa la flecha, sta apunta al registro en el cual se copiar el dato. Si
se usa :=, siempre al lado izquierdo del signo es donde se copiar el dato.
Ejemplo: Copiar el contenido del registro R3 en el registro R7
Se representara as:
R7 R3
o tambin as:
R7 := R3
1
Uno de los errores ms comunes y, al ser tan simple, ms difcil de encontrar, es el error al escribir los nmeros.
Por ejemplo, si al escribir un nmero binario se escribe 01001011 en vez de 0b01001011, el ensamblador
interpreta el primer nmero como correcto, pero asume que est en base 8.
CAPITULO1Parte2rev21.doc
02/09/2014
Seleccin de un bit
Hay dos maneras de especificar un bit en particular de un registro: se coloca primero el
nombre del registro seguido del nmero de bit entre los signos < y > o se coloca entre
corchetes [ ].
Ejemplo: Para especificar el bit 4 del registro R3:
Se representara as:
R3<4>
o as R3[4]
Ejemplo: Poner a 1 el bit 3 del registro R9.
Se representara as:
R9<3> := 1
o as R9[3] := 1
CAPITULO1Parte2rev21.doc
02/09/2014
R11[31:16] := 0x4759
Registros concatenados
A veces hay instrucciones que hacen uso de dos registros para formar un nmero de mayor
longitud, y lo utilizan as en las operaciones. Para representarlos se coloca primero el nombre
del registro que representar a los bits ms significativos, luego el carcter : y a
continuacin el nombre del registro que representar a los bits menos significativos.
Ejemplo: Si R0 y R1 son registros de 32 bits. Representarlos como un registro de 64 bits
donde el byte ms significativo ser el contenido de R1.
Se representara as:
R1:R0
CAPITULO1Parte2rev21.doc
02/09/2014
Donde los bits 6..3 (Rm) representa uno de los registros R0...R15, y los bits 7, 2..0 (D:Rd)
representa a otro de los registros R0..R15.
La operacin de la instruccin es:
Rd := Rm ; copia en registro Rd el contenido de Rm
Por ejemplo, si se quiere copiar el contenido de R7 en R12 tendramos:
7 = 0b0111 (campo Rm en instruccin valdra 0b0111)
12 = 0b1100 (campo D valdra 1, y campo Rd 0b100)
CAPITULO1Parte2rev21.doc
02/09/2014
14
1
13
0
12
0
11
0
10
1
9
1
8
0
7
1
6
0
5
1
4
1
3
1
2
1
1
0
0
0
02/09/2014
CAPITULO1Parte2rev21.doc
02/09/2014
CAPITULO1Parte2rev21.doc
10
02/09/2014
CAPITULO1Parte2rev21.doc
11
02/09/2014
Compilador (compiler)
Es un programa que recibe como entrada un archivo que tiene un programa escrito en un
lenguaje, y genera como resultado un archivo con el mismo programa pero escrito en otro
lenguaje. En el caso de los compiladores de C, generan el archivo en lenguaje ensamblador.
Ensamblador (assembler)
Es un compilador (programa) que acepta como entrada un archivo que tiene un programa
escrito en lenguaje ensamblador, y genera como salida un archivo con el cdigo mquina del
programa. El cdigo ,mquina est en un lenguaje intermedio, denominado lenguaje objeto.
Enlazador (linker)
Es un programa que recibe como entrada uno o ms archivos en lenguaje objeto, ms otros
archivos (bibliotecas) y genera un archivo con el cdigo mquina de todos los archivos de
entrada.
12
02/09/2014
Ejecucin de instrucciones
En general, se suelen distinguir dos fases en la ejecucin de una instruccin:
Bsqueda del cdigo de operacin, tambin llamado ciclo de captacin, o Ciclo fetch (opcode fetch)
Decodificacin/ejecucin
La primera fase consiste en la lectura del cdigo de operacin y su grabacin en un registro
especial, denominado comnmente registro de instrucciones (IR, instruction register).
La segunda consiste en la lectura y procesamiento de las dems palabras de la instruccin (si
las hubiera), lectura de datos, procesamiento de stos, y grabacin del resultado.
El CPU siempre comienza la ejecucin de una instruccin con la bsqueda del cdigo de
operacin, luego realiza la decodificacin y ejecucin de sta. A continuacin, efecta un
nuevo ciclo de bsqueda de cdigo de operacin, repitindose el ciclo.
Capturar
siguiente
instruccin
INICIO
Ejecutar
Instruccin
PARADA
Ejecucin de instrucciones
El CPU para poder ejecutar las instrucciones de manera secuencial tiene que saber en todo
momento en qu registro de la memoria est la siguiente instruccin a ejecutar. Para ello
cuenta con un registro especial denominado contador de programa (program counter) y que
suele tener el nombre abreviado PC, el cual tiene almacenada la direccin del registro de la
memoria que contiene la siguiente instruccin a ejecutar. Cada vez que el CPU capta una
instruccin, incrementa dicho contador, de manera que al finalizar la ejecucin de la
instruccin actual, capte la siguiente instruccin de la direccin de memoria inmediata
superior.
Para poder ejecutar una instruccin primero tiene que leerla de la memoria de programa y
almacenarla temporalmente dentro del CPU para decodificarla, para lo cual internamente
cuenta con un registro denominado registro de instrucciones (instruction register) y que
suele tener el nombre IR.
Adems de estos registros, tiene los registros de propsito general (general purpose registers),
cuyos contenidos son utilizados como operandos en la mayora de instrucciones con que
cuenta el CPU. Antiguamente los CPUs contaban con uno o dos de estos registros, a los
cuales se les denominaba acumuladores.
CAPITULO1Parte2rev21.doc
13
02/09/2014