Está en la página 1de 30

Arquitectura

de Computadores

3. Lenguaje Mquina
1. Visin del Programador
2. Formato de las Instrucciones
3. Modos de Direccionamiento
4. Instrucciones Tpicas
5. Un Ejemplo: Motorola 68000

Arquitectura de Computadores Lenguaje Mquina - 1

En el captulo anterior hemos visto la interfaz hardware que ofrece la CPU, esto es, los elementos
que ofrece para conectarla con el resto de los componentes de un ordenador. Ahora abordaremos
la interfaz software, o lo que es lo mismo, lo que necesitan saber los programadores o
constructores de compiladores para poder escribir programas capaces de ejecutarse en la CPU.
Esta interfaz software muestra aspectos como el repertorio y formato de las instrucciones que
ofrece, con sus variados modos de direccionamiento para acceso a los operandos. Pero para
poder escribir programas para una CPU tambin se necesita conocer otros aspectos como los
registros internos, estructura o visin de la memoria y los tipos de datos que maneja directamente
la ALU.
Despus de dar una introduccin general a estos aspectos, se ver con cierto detalle un caso
concreto: el procesador 68000 de Motorola.

Arquitectura de Computadores Lenguaje Mquina - 1


Lenguaje Mquina Visin del Programador

Visin del
Hardware CPU Memoria
PC $0000
0400
SP 10FF $0001
SR
R0 $0400
... prog.

$0B00 2y
Rn datos
$1000
pila

Bus Bus
Datos Dir. $10FF
(x bits) (y bits) $FFFF

x
Arquitectura de Computadores Lenguaje Mquina - 2

El programador ms inmediato de un ordenador trabaja a muy bajo nivel, pues ve el hardware muy
de cerca. Los programas los tiene que escribir en lenguaje mquina o, normalmente, en
ensamblador, es decir, una representacin nemotcnica del lenguaje mquina en la que cada
instruccin ensamblador se corresponde con una instruccin mquina.
Qu tiene que conocer este programador de ensamblador o de lenguaje mquina para escribir
programas para el ordenador? La respuesta es Algo de hardware y algo de software.
1) Algo de hardware:
Algunos detalles de la CPU:
- Registros generales y de control (Contador de Programa,
Puntero de Pila, Registro de Estado, ...).
- Tamao de los registros generales, para saber el rango de los
nmeros que se pueden manejar.
Tamao de la memoria

Arquitectura de Computadores Lenguaje Mquina - 2


Lenguaje Mquina Visin del Programador

Visin del
Software Pila
E1
Juego de Instrucciones
Nemotcnico Cod. Mquina 50
move #3,R2 11000111 ($C7)
2B
add R2,R3 00110110 ($36)
...
9A
...
sub #1,R2 01100110 ($66)

- Meter
LIFO
- Sacar

Arquitectura de Computadores Lenguaje Mquina - 3

2) Algo de software:
El juego de instrucciones
Organizacin de la pila (si la hay).

Estos elementos de hardware y de software son con los que cuenta el programador para escribir
sus programas, o lo que es lo mismo, sta es la visin del programador del ordenador bsico.
En resumen, cuenta con una memoria donde almacena su programa (con las instrucciones y los
datos) y una CPU que es capaz ejecutar las instrucciones del programa, ayudndose para ello de
registros internos a los que trae los operandos desde la memoria principal, y de una pila para
guardar ciertos datos temporales.
Puesto que ya conocemos la estructura bsica de una CPU, en este captulo vamos ocuparnos del
lenguaje mquina, es decir, del formato que pueden tener las instrucciones mquina, de los modos
de direccionamiento disponibles para acceder a los operandos indicados en las instrucciones y, por
supuesto, de los distintos tipos de instrucciones que suelen ofrecer los procesadores de propsito
general (al menos los de tipo CISC).
Al final del captulo particularizaremos todo esto para el microprocesador de Motorola MC68000,
comentando su estructura general, organizacin de la memoria, su pila y, por supuesto, su juego
de instrucciones.

Arquitectura de Computadores Lenguaje Mquina - 3


Lenguaje Mquina Formato de las Instrucciones

Cod. Op.

Cod. Op. Operando

Cod. Op. Operando 1 Operando 2

- Valor
- Direccin memoria

registro

Arquitectura de Computadores Lenguaje Mquina - 4

Una instruccin mquina es una secuencia de bits que indica una operacin que debe realizarse y
con qu operandos debe realizarse.
Los operandos son datos que estn en alguno de los registros internos de la CPU, en la memoria
principal o en algn controlador de entrada/salida.
Una instruccin siempre realiza alguna accin sobre algn o algunos operandos. Estos pueden
estar indicados implcita o explcitamente en la instruccin mquina.
Un operando est implcito en una instruccin cuando el propio cdigo de operacin establece
sobre qu acta la operacin. En este caso, tal operando es fijo, es decir, el programador no puede
establecer que esa instruccin acte con otro operando distinto.
Cuando una instruccin puede operar con diversos operandos posibles, a elegir por el
programador, los operandos elegidos deben figurar de manera explcita (separados del cdigo de
operacin) en la instruccin mquina.
Si una instruccin utiliza varios operandos, estos pueden ser una mezcla de operandos implcitos y
explcitos.
El formato de una instruccin mquina define la disposicin y el reparto de sus bits entre los
componentes de la instruccin, esto es, el cdigo de operacin y los operandos.
Una instruccin mquina debe incluir el cdigo de operacin y, si los tiene, uno o ms operandos
explcitos. A cada operando explcito se accede mediante uno de los distintos modos de
direccionamiento que veremos en el siguiente apartado.
Como veremos ms tarde (al comentar los distintos tipos de instrucciones que se suelen encontrar
en los procesadores de propsito general) ya que hay instrucciones con uno, dos, tres o ningn
operando explcito, es normal que los juegos de instrucciones estn compuestos por instrucciones
con distintos formatos. En el formato de cada instruccin se suele indicar implcita o explcitamente
el modo de direccionamiento de cada uno de sus operandos.

Arquitectura de Computadores Lenguaje Mquina - 4


Lenguaje Mquina Cuestiones de Diseo
Longitud de Instruccin
Muchos cdigos de operacin
Instruccin
Muchos modos de direccionamiento ms larga
Gran espacio de direcciones
Long. instruccin mltiplo de palabra Ms memoria
Ms lento
Reparto de Bits
Cuntos cdigos de operacin?
Cuntos operandos?
Dnde estn los operandos?
COMPROMISO !
Cuntos registros hay?
Cuntos modos de direccionamiento?
Granularidad de las direcciones?
Arquitectura de Computadores Lenguaje Mquina - 5

A la hora de disear un juego de instrucciones, se deben tener en cuenta ciertas consideraciones sobre dos
cuestiones: la longitud de la instruccin y el reparto de los bits que la componen.
Longitud de la instruccin. Hay un claro compromiso entre el deseo de un rico y variado repertorio de instrucciones,
y la necesidad de ahorrar espacio. Los programadores quieren muchos cdigos de operacin distintos (requiere
muchos bits en el campo de cdigo de operacin) para disponer de operaciones que se ajusten lo ms posible a sus
necesidades, y as escribir programas ms cortos. De igual manera, cuantos ms modos de direccionamiento estn
disponibles, ms flexibilidad tendrn para manejar estructuras de datos complejas, como tablas o matrices. Por otro
lado, puesto que cada vez se dispone de mayor cantidad de memoria, se requieren muchos bits para hacer referencia
a un gran espacio de direccionamiento. Pero claro, una instruccin que ofrezca todo esto puede ocupar 32 bits,
posiblemente, el doble que otra similar que no ofrezca tanta flexibilidad. Est claro que una instruccin larga ocupa ms
espacio en memoria que una corta, se tarda ms tiempo en llevarla de memoria a la CPU, y se tarda ms tiempo en
decodificarla.
Se debe tener en cuenta que el ancho del bus de datos sea mltiplo de la longitud de un carcter, para evitar
desaprovechar el espacio de almacenamiento. Y esta restriccin afecta a la longitud de las instrucciones, que deben
ocupar un nmero entero de palabras, o en una palabra debe caber un nmero entero de instrucciones. Por esto los
tamaos de las instrucciones suelen ser mltiplos de 8. Un diseo con caracteres de 9 bits, instrucciones de 12 y
palabras de 31 bits sera una catstrofe.
Reparto de los bits. Aqu el compromiso est en el reparto de los bits disponibles entre el nmero de cdigos de
operacin y la versatilidad de los operandos. Esta versatilidad genera las siguientes preguntas: cuntos operandos
hay en la instruccin?, de cuntos modos de direccionamiento se dispone?, dnde estn los operandos, en registros
o en memoria?, cuntos registros hay?.
El direccionamiento a memoria tambin plantea una pregunta: cul es la granularidad de las direcciones?. Es decir,
a dnde apunta cada direccin, a un byte, a una palabra de 16 bits, a una palabra de 32 bits, ...? Si el grano es de 1
byte, para direccionar una memoria de 64 Kb se requieren 16 bits, mientras que si el grano fuera una palabra de 4
bytes, solo se necesitaran 14 bits, lo cual significa instrucciones ms cortas, menor espacio para el programa, y un
menor tiempo para alimentar la instruccin. Sin embargo, tiene la pega de que para obtener un carcter de memoria
hay que acceder a la palabra completa, y luego en la CPU seleccionar la parte deseada, lo cual consume tiempo.

Arquitectura de Computadores Lenguaje Mquina - 5


Lenguaje Mquina Cdigos de Operacin con Extensin

OTRO CASO
Intel -Motorola
Instrucciones de 16 bits
Instruccin de
Longitud variable Hasta 3 operandos en 16 registros

Hasta 16 operaciones distintas

PowerPC PERO NECESITAMOS !

Formato fijo 15 Instrucciones de 3 operandos


14 de 2
C. op. Operandos
31 de 1
6 26
16 sin operandos

Cmo?
Arquitectura de Computadores Lenguaje Mquina - 6

Debido a los compromisos que acabamos de ver, normalmente todos los juegos de instrucciones son de longitud
variable, es decir, disponen de diversos formatos de instruccin, con distintas longitudes que se adaptan a las
necesidades de la instruccin. Por esto, es normal encontrarse que en una misma mquina hay instrucciones de 1, 2, 3
y 4 o ms bytes de longitud (eso s, siempre con un tamao mltiplo de 8 bits).
El Pentium de Intel, tiene instrucciones de longitud variable, y pueden llegar a tener un tamao de hasta 12 bytes. El
PowerPC, por el contrario, tiene un juego de instrucciones con un formato regular de 32 bits, donde los 6 primeros
corresponden al cdigo de operacin.
Hasta ahora hemos supuesto que una vez decidido el nmero de bits reservado para el cdigo de operacin, tanto este
nmero como el reservado para los operandos es fijo. Por ejemplo, si una CPU ofrece 100 instrucciones, parece que el
cdigo de operacin debe tener reservados 7 bits en la instruccin. Pero en algunas arquitecturas en las que las
instrucciones son de longitud fija (como en el PowerPC), puede resultar conveniente hacer variable el tamao del
cdigo de operacin, para acomodarse a las necesidades de la instruccin. Vemoslo con un ejemplo.
Supongamos una mquina con instrucciones de 16 bits, que realiza operaciones hasta con 3 operandos, y que stos
siempre estn en alguno de sus 16 registros. Esto quiere decir que se necesitan 4 bits por operando, y que si puede
haber hasta 3 operandos, se necesitan 12 bits para ellos. Esto nos deja con 4 bits para cdigos de operacin, lo que
significa que puede haber hasta 16 operaciones distintas con 3 operandos.
Pero resulta que lo que se desea es un juego con 15 instrucciones de 3 operandos, 14 instrucciones de dos operandos,
31 de un operando, y 16 instrucciones sin operandos. Cmo hacerlo? Con Cdigos de Operacin con Extensin.
En la siguiente transparencia tenemos la solucin.

Los cdigos de operacin con extensin son bastante comunes. No solamente los utilizan procesadores con formatos
instruccin de longitud fija, como el PowerPC, sino los de longitud variable como el 80386, 80486 y Pentium de Intel, y
la familia 68000 de Motorola.

Arquitectura de Computadores Lenguaje Mquina - 6


Lenguaje Mquina Cdigos de Operacin con Extensin
15 instrucciones 31 instrucciones
de 3 operandos de 1 operando
Cod. Op. 0000 XXXX YYYY ZZZZ Cod. Op. 1111 1110 0000 XXXX
de 4 bits 0001 XXXX YYYY ZZZZ de 12 bits 1111 1110 0001 XXXX
0010 XXXX YYYY ZZZZ . . .
. . . 1111 1110 1111 XXXX
. . . 1111 1111 0000 XXXX
. . . 1111 1111 0001 XXXX
1101 XXXX YYYY ZZZZ . . .
1110 XXXX YYYY ZZZZ 1111 1111 1101 XXXX
1111 1111 1110 XXXX

16 instrucciones
14 instrucciones
sin operandos
de 2 operandos Cod. Op. 1111 1111 1111 0000
Cod. Op. 1111 0000 XXXX YYYY
de 16 bits 1111 1111 1111 0001
de 8 bits 1111 0001 XXXX YYYY 1111 1111 1111 0010
1111 0010 XXXX YYYY . . .
. . . . . .
. . . 1111 1111 1111 1101
. . . 1111 1111 1111 1110
1111 1100 XXXX YYYY 1111 1111 1111 1111
1111 1101 XXXX YYYY

Arquitectura de Computadores Lenguaje Mquina - 7

15 instrucciones de 3 operandos.
Comencemos con el formato de las 15 instrucciones de 3 operandos de 4 bits. No tenemos ningn problema, pues para representar
15 cdigos de operacin se requieren 4 bits, y los 12 bits restantes se utilizan para los tres operandos de 4 bits.
As, los cdigos de operacin sern el 0000, 0001, ..., hasta el 1110. Y nos sobra una combinacin de las 165 que ofrecen 4 bits!

14 instrucciones de 2 operandos.
La combinacin que nos sobraba del formato anterior (la 1111) la utilizaremos ahora para indicar un nuevo formato de instruccin.
Es decir, las instrucciones cuyos 4 bits de mayor peso sean 1111 tendrn un cdigo de operacin extendido con los 4 bits
siguientes. En este nuevo formato, el cdigo de operacin ocupa 8 bits, donde los 4 de mayor peso estn siempre a 1. Los ocho
bits restantes se utilizan para indicar los dos operandos de este formato.
Ahora nos encontramos con que tambin nos sobran dos combinaciones: 1111 1110 y 1111 1111. Las aprovecharemos.

31 instrucciones de 1 operando.
Si los cuatro bits de mayor peso a 1 indican que el cdigo de operacin se extiende o ampla con otros cuatro, cuando los 7 bits de
mayor peso son 1111 111, indica que el formato de tales instrucciones est formado por un cdigo de operacin de 12 bits (los de
mayor peso). Los cuatro bits restantes se utilizan como operando.
Para este formato disponemos ahora de 5 bits para expresar 31 nuevas instrucciones, las que tienen los cdigos desde 1111 1110
0000 hasta 1111 1111 1110. Ahora nos sobra una combinacin de las disponibles.

16 instrucciones sin operandos explcitos.


Como vamos viendo, el que sobre alguna combinacin no es casualidad o buena suerte, simplemente es que es necesario para
poder seguir extendiendo el cdigo de operacin. Ahora nos encontramos con que los doce bits de mayor peso a 1 indican un
nuevo formato de instruccin con un cdigo de operacin de 16 bits.
Los cuatro bits de la ampliacin son los que nos ofrecen los ltimos 16 cdigos de operacin para las instrucciones sin operandos
explcitos.

Cuando se planifican formatos de instrucciones con cdigos de operacin con extensin, para cada formato, se debe reservar
alguna de las combinaciones posibles para expresar una extensin en el cdigo de operacin.

Arquitectura de Computadores Lenguaje Mquina - 7


Lenguaje Mquina Modos de Direccionamiento
 Dnde se Ubican los Operandos?
En la Instruccin
ADD #7,R4,$FF1234 Rpido y simple
Slo constantes
No para resultados

En Memoria Principal
Muchos bits

En Registros de la CPU
Se requieren pocos bits
Rpido acceso
Pocos registros
Hay que cargar los registros

Arquitectura de Computadores Lenguaje Mquina - 8

El diseo cuidadoso de los cdigos de operacin es una parte importante del juego de instrucciones de una mquina.
No obstante, la mayor parte de los bits de una instruccin se utilizan para especificar los operandos de la operacin,
por lo que tambin debe afrontarse con mucho cuidado el modo de direccionar los operandos de las instrucciones.
Vamos a considerar ahora dos factores sobre los operandos a tener en cuenta en el diseo del formato de las
instrucciones:
Dnde poner los operandos
Cuntos operandos se indican en la instruccin

Los operandos pueden estar en tres sitios:


En la propia instruccin
En registros de la CPU
En memoria principal
Con el operando en la misma instruccin, parece claro que el acceso a l es simple y rpido, no obstante estos
operandos solamente pueden ser constantes, pues su valor se establece en tiempo de compilacin; por esto mismo,
tampoco se pueden utilizar como operandos de destino o de resultado. As, si las variables estn ubicadas en memoria
principal, parece conveniente utilizar el campo de operando para indicar su direccin en memoria principal, sin
embargo, para los procesadores actuales, es normal disponer de un bus de direcciones de 32 bits, lo que implica que
el campo de operando en la instruccin requiere tambin 32 bits, y si consideramos una instruccin con tres operandos
ms el cdigo de la operacin, la longitud de la instruccin se dispara. Una alternativa puede ser utilizar registros
generales para contener los operandos. As, en una mquina con 8 registros se necesitan solamente 3 bits para
indicar uno de ellos en el campo de operando. Esto tendra la mejora aadida de que el acceso a un registro es mucho
ms rpido que a memoria principal. Pero tambin tiene pegas. Una es que si se dispone de pocos registros generales
y se ubican en ellos las variables, se pueden agotar enseguida. Por esto, las arquitecturas recientes tienden
proporcionar un nmero generoso de registros. Otra pega es que para operar con operandos en registros, previamente
hay que cargarlos desde memoria principal, lo que significa ejecutar instrucciones adicionales con direcciones de
memoria (largas y costosas). Por esto, solamente merece la pena cargar los operandos en registros cuando se van a
utilizar repetidamente (lo cual suele ser lo ms habitual).

Arquitectura de Computadores Lenguaje Mquina - 8


Lenguaje Mquina Modos de Direccionamiento
 Cuntos Operandos se Indican en la Instruccin?

Todos
ADD $FF1234,$FFF123,$FFFF12
Requiere muchos bits

Reutilizar Alguno
ADD $FF1234,$FFF123

Omitir Alguno (Implcitos)


- En Acumulador: ADD $FF1234
- En la Pila: PUSH R1

Arquitectura de Computadores Lenguaje Mquina - 9

En cuanto al nmero de operandos, algunas instrucciones pueden requerir tres operandos, como
la suma (dos sumandos y un resultado), lo cual puede resultar en un exceso de bits. Por ello, la
mayora de este tipo de instrucciones suele utilizar como resultado uno de los mismos operandos,
ahorrando as espacio en la instruccin. Otra posibilidad consiste en no indicar los operandos
explcitamente en la instruccin, utilizando directamente ciertos operandos de forma implcita. As,
algunas mquinas indican un nico operando para realizar una suma, y lo que hacen es aadir el
contenido de ese operando al de un registro especial llamado acumulador, y el resultado lo dejan
tambin en el acumulador. El problema que presenta esta ltima tcnica es que cuando hay
muchos clculos, hay que estar constantemente cargando y salvando el contenido del acumulador,
lo cual requiere espacio de instrucciones y tiempo de ejecucin. Otro modo de indicar operandos
implcitos es con los direccionamientos orientados a Pila que veremos en las siguientes
transparencias.

Arquitectura de Computadores Lenguaje Mquina - 9


Modos de Direccionamiento Inmediato

MOV_AC #47

C. Op. Operando

Constantes pequeas
Nmeros en complemento a dos
Sin referencias a memoria

Arquitectura de Computadores Lenguaje Mquina - 10

Como ya hemos mencionado, el espacio disponible para los operandos en una instruccin suele
estar bastante limitado. Tambin sabemos que los datos con los que hay que operar pueden
encontrarse en los registros del procesador, en variables de la memoria principal o en la pila. Por
otra parte, dependiendo de la complejidad de las estructuras de datos manejadas se puede hacer
necesaria la utilizacin de modos de direccionamiento ms o menos complejos. Algunas veces el
modo del direccionamiento viene indicado implcitamente por el cdigo de operacin, que fuerza el
modo de direccionamiento, en otros casos el modo debe indicarse explcitamente en cada
operando.
Vamos a dedicarnos ahora a tratar algunos modos de direccionamiento ms comunes que suelen
encontrarse en los procesadores de propsito general. Aunque hay mltiples variaciones, todas
ellas suelen estar basadas en los modos que vamos a tratar a continuacin.

Direccionamiento Inmediato
La forma ms simple de indicar un operando es incluyndolo en la propia instruccin. Ya que las
instrucciones no son modificables, este es el modo que se utiliza en operaciones con constantes.
Si la constante es un valor numrico, se almacena en complemento a dos.
La ventaja del direccionamiento inmediato es que no se requieren referencias adicionales a
memoria para obtener el operando, ahorrando por lo tanto espacio y tiempo. El inconveniente es
que el espacio reservado para este operando suele estar restringido y suele ser menor que el
tamao de la palabra, por lo que en algunos procesadores solamente se utiliza para constantes de
valores pequeos.

Arquitectura de Computadores Lenguaje Mquina - 10


Modos de Direccionamiento Directo

INC $10B0
C. Op. dddddddddddddddd ....

operando

Para las variables globales


MEMORIA
Una referencia adicional a memoria
Requiere muchos bits

Arquitectura de Computadores Lenguaje Mquina - 11

Direccionamiento Directo (o absoluto)


Otra forma muy simple de hacer referencia a un operando es indicando su direccin en memoria
principal, y solamente requiere una referencia adicional a memoria para obtener el operando. Es el
modo de direccionamiento comn para las variables globales de los programas.
La pega que tiene es que cuando se dispone de grandes espacios de direccionamiento, requiere
muchos bits para indicar la direccin, como es el caso de Motorola. En el Pentium de Intel, se
utiliza hasta un mximo de 32 bits para indicar la direccin del operando en memoria.

Arquitectura de Computadores Lenguaje Mquina - 11


Modos de Direccionamiento A Registro

INC R2
Registros
C. Op. rrrr .... de la CPU

operando

Valores temporales o muy


referenciados
Sin referencias a memoria
Requiere pocos bits
Suele haber pocos registros

Arquitectura de Computadores Lenguaje Mquina - 12

Direccionamiento a Registro
Este modo es similar al direccionamiento directo, pero en este caso, el campo de direccin se
refiere a uno de los registros generales del procesador.
Las ventajas que tiene es que solo necesita 3 o 4 bits para indicar uno de los registros generales, y
que no requiere referencias adicionales a memoria. El inconveniente es que no se suele disponer
de muchos registros, aunque con el advenimiento de las mquinas RISC, la tendencia es a ir
incrementando su nmero.
Se utiliza para guardar valores temporales en la evaluacin de expresiones, o para mantener en
registros algunas variables que se referencian muy a menudo.

Arquitectura de Computadores Lenguaje Mquina - 12


Modos de Direccionamiento Indirecto

INC_IND R7
C. Op. rrrr .... Memoria

dddddd operando
Registros
de la CPU

Cuando no se conoce la direccin del dato


en tiempo de compilacin
Requiere mltiples accesos

Arquitectura de Computadores Lenguaje Mquina - 13

Direccionamiento Indirecto
Si en el direccionamiento directo, el campo de operando indicaba la direccin del dato, en el direccionamiento indirecto,
se hace referencia a una palabra de memoria principal en la que se encuentra la direccin del operando. La otra
posibilidad de este direccionamiento es que el campo de operando hace referencia a un registro general en el que se
encuentra la direccin del dato.
Como se puede apreciar, segn este esquema, con una indireccin se requieren dos accesos adicionales a memoria
para obtener el operando (si es va registro, solo uno).
Este direccionamiento se utiliza cuando la direccin de las variables no se conoce en tiempo de compilacin, sino que
es durante la ejecucin del programa cuando se calcula la direccin del operando y se guarda sta en memoria o en un
registro.
Los procesadores de Intel de la familia 80x86 y Pentium disponen de direccionamiento indirecto por registro, pero no a
travs de memoria. Igual le sucede al MC68000 de Motorola. Su hermano mayor, el MC68020 tambin dispone de
direccionamiento indirecto va memoria.
Una rara variante de este modo es el direccionamiento indirecto multinivel. En este caso, el primer bit de la palabra
direccionada indica si dicha palabra es ya la direccin efectiva del operando, o se debe aplicar un nuevo nivel de
indireccin.

Supongamos que en una determinada mquina se dispone de dos operaciones para incrementar el valor de una
variable en memoria principal, una por direccionamiento directo, y otra por direccionamiento indirecto por memoria, es
decir, que ambas instrucciones constan de cdigo de operacin y de una direccin de memoria principal. Cmo saber
cundo se est utilizando la del direccionamiento directo o la del direccionamiento indirecto?
Hay dos maneras para diferenciarlas:
1) Teniendo cdigos de operacin distintos, que implcitamente indican el modo de direccionamiento.
2) Teniendo ambas el mismo cdigo de operacin, pero disponiendo en la instruccin de un campo que indica
explcitamente el modo de direccionamiento de cada operando.

Ojo! Dos instrucciones en ensamblador con el mismo nombre nemotcnico pueden generar instrucciones mquina
con distintos cdigos de operacin. Y al contrario, dos instrucciones en ensamblador con distinto nombre nemotcnico
pueden generar instrucciones mquina con el mismo cdigo de operacin y distintos modos de direccionamiento.

Arquitectura de Computadores Lenguaje Mquina - 13


Modos de Direccionamiento Por Desplazamiento

C. Op. rrrr dddddddddd


MEMORIA

bbbbbb +
operando

REGISTROS
 Relativo CP
Para control de bucles
Segn  Por Registro Base Un Registro base
rrrr Para reas de datos reubicables

 Indexado Reg. de ndice


Para acceso a tablas
Arquitectura de Computadores Lenguaje Mquina - 14

Direccionamiento por Desplazamiento


Hay unos cuantos mtodos de direccionamiento que para formar la direccin del operando utilizan el contenido de un
registro ms un desplazamiento que viene explcitamente en el campo de operando.
A este mecanismo para formar la direccin del operando se le conoce tambin como base+desplazamiento. La base
est contenida en un registro, y el desplazamiento viene indicado por los bits del campo de operando.
En algunos casos, el registro base utilizado puede estar implcitamente impuesto por el cdigo de operacin.
Dependiendo del registro base utilizado, se distinguen los siguientes modos de direccionamiento por desplazamiento:
- Relativos. En este modo se utiliza el Contador de Programa, de tal modo que la direccin efectiva se calcula
aadiendo el desplazamiento que figura en el campo de operando ms el contenido del Contador de Programa.
Este direccionamiento lo utilizan los compiladores para indicar las direcciones de salto en las instrucciones de
control de bucles.

- Por registro base. Este modo de direccionamiento se utiliza comnmente en los programas reubicables. El
registro base contiene la direccin de una gran rea de datos o de instrucciones. Y los bits del campo de
operando indican el desplazamiento del dato a partir del comienzo del rea de datos indicado por el registro
base.
Adems de permitir programas reubicables, constituye una buena alternativa al direccionamiento directo, pues
requiere pocos bits en el campo de operando.

- Indexado. El propsito de este modo de direccionamiento es facilitar el acceso iterativo a las matrices o tablas de
datos. Lo que se hace es indicar en los bits del campo de operando la direccin inicial de la tabla, y a esta
direccin se le aade el contenido de un registro llamado registro de ndice. Para ir referenciando los
sucesivos elementos de la tabla simplemente hay que ir incrementando el contenido del registro de ndice.

Arquitectura de Computadores Lenguaje Mquina - 14


Modos de Direccionamiento A Pila

ltimo en entrar - Implcito (PP)


Primero en salir Direccionamiento
- Explcito

Cima
66 66
(PP)
Cima Cima
55 55 55
(PP) (PP)
Cima
44 44 44 44
(PP)
33 33 33 33
66
22 22 22 22
Base 11 11 11 11 Ac

MEMORIA Push 55 Push 66 Pop


PRINCIPAL
Arquitectura de Computadores Lenguaje Mquina - 15

Direccionamiento a Pila
La Pila es una estructura de datos que se mantiene en memoria principal. Bsicamente es un
vector de celdas de datos de direcciones secuenciales, en los que se meten y sacan datos con
poltica LIFO (Last In, First Out), es decir, el ltimo en entrar es el primero en salir.
Esta estructura es muy til como ayuda en la ejecucin de los programas, pues se utiliza para
guardar en ella variables temporales, parmetros, direcciones de retorno en la llamada a
procedimientos, etc.
El primer elemento que se mete en la pila se dice que esta en el fondo de la pila, y el ltimo que se
ha metido est en la cima de la pila. El inters de la cima de la pila es que siempre est en ella el
primer dato disponible de la pila. Las operaciones con la pila son meter y sacar datos de ella, y
operan utilizando un registro denominado puntero de pila que siempre contiene la direccin de la
cima de la pila.
En algunos procesadores, como el 68000, el registro de puntero de pila es simplemente uno de los
registros generales que se utilizan para direcciones, y se accede a la pila mediante instrucciones
de movimiento de datos y el ya comentado direccionamiento indirecto por registro. Los
procesadores de Intel disponen de un registro especfico: el Puntero de Pila, que siempre est
apuntando a la cima de la pila, y se ofrecen instrucciones especficas para meter y sacar datos de
la pila (PUSH y POP) en las que ni siquiera se indica explcitamente el registro de indireccin, pues
est implcito por el cdigo de operacin.

Tanto en Motorola como en Intel, la Pila es una estructura de datos que, en contra de la intuicin,
crece de las direcciones altas hacia las bajas, es decir, que la cima de la Pila siempre est en una
direccin ms baja que la base de la Pila (salvo cuando la Pila est vaca, claro).

Arquitectura de Computadores Lenguaje Mquina - 15


Modos de Direccionamiento Ejemplo - Resumen

Modo
Inmediato #1234 1130
R0 1234
Directo a registro R0
R1 130
Absoluto 1132 1132 1234
R2 1132
Indirecto por registro (R2) ...
R3 1132
Indirecto por memoria (6003) ...
R4 -6
Indexado 1138(R4) 6000 1130
R5 1133
Pre-decremento -(R5) R6 1100
Post-incremento (R3)+ R7 32
6003 1132
Reg. base + desplazamiento 32(R6)
Relativo al PC 130(PC) PC 1002
Memoria Principal
Relativo al PC indexado (PC,R1)

Arquitectura de Computadores Lenguaje Mquina - 16

En la transparencia se muestra la especificacin de un operando con valor 1234 situado en la


propia instruccin (con direccionamiento inmediato), en el registro R0 (accesible mediante
direccionamiento directo a registro) y en la direccin de memoria principal 1132 (accesible
mediante direccionamiento directo a memoria o absoluto).
Como se puede comprobar con este ejemplo, tambin hay otros variados modos de
direccionamiento a travs de los cuales se obtiene el valor 1234 del operando.
Se puede acceder a este operando mediante direccionamiento indirecto a travs del registro R2, o
de la direccin de memoria 6003.
Mediante direccionamiento indexado se obtiene igualmente la direccin del operando aadiendo el
desplazamiento 1138 al contenido del registro R4. De forma similar se obtiene la direccin con el
modo de registro base ms desplazamiento.
El direccionamiento relativo al PC tambin es similar al indexado o indirecto con desplazamiento,
salvo que el registro utilizado es el PC. En la variante indexada, la direccin del operando se
obtiene sumando el contenido del PC ms el registro de ndice R1.
Para la gestin de la pila, los procesadores suelen ofrecer o bien instrucciones especficas (como
push y pop) o bien direccionamientos apropiados, como es el caso del Motorola 68000, mediante
los modos con pre-incremento y post-decremento. Con instrucciones de movimiento o copia de
datos y estos direccionamientos se emula el comportamiento de las instrucciones push y pop.
Consltense los direccionamientos del Motorola 68000 para ver cmo funcionan estos
direccionamientos con pre-decremento y post-incremento.

Arquitectura de Computadores Lenguaje Mquina - 16


Lenguaje Mquina Instrucciones Tpicas

 Transferencia de Datos Ejecucin de la Instruccin


 Aritmticas Operandos
 Lgicas
 Transferencia de Control Registro
ALU de
 Control del Sistema Estado

Resultado

0, 1, 2, n
Operandos
Ortogonalidad En Registros Longitud de
En Memoria Instruccin

Arquitectura de Computadores Lenguaje Mquina - 17

Aunque el nmero de instrucciones que se ofrece vara de mquina a mquina, en todas ellas
suelen encontrarse los mismos tipos de instrucciones:
Transferencia de datos
Aritmticas
Lgicas
Transferencia de Control
Control del sistema
Muchas de estas instrucciones utilizan dos operandos, y dependiendo de la versatilidad u
ortogonalidad de la mquina, pueden permitir que ambos operandos estn solamente en registros
generales, uno en registro y el otro en memoria, o los dos en memoria. Obviamente, siempre hay
un compromiso entre la mxima ortogonalidad (cualquier mezcla de modos de direccionamiento),
con la correspondiente longitud de instruccin que ello conlleva.
En general, Intel y PowerPC suelen ofrecer instrucciones en las que no permiten todos los tipos de
direccionamiento en una misma instruccin (por ejemplo, direccionamiento directo para ambos
operandos), sobre todo en el caso del PowerPC, que es un procesador RISC. En cambio Motorola
ofrece un juego de instrucciones ms ortogonal, claro est, a cambio de tener instrucciones de
hasta 10 bytes de longitud.
Otra cuestin que se debe tener en cuenta es que una gran parte de las instrucciones modifican o
establecen los flags de estado del Registro de Estado, indicando si la ltima operacin ha
producido overflow, si un resultado es cero, positivo o negativo, etc.

Arquitectura de Computadores Lenguaje Mquina - 17


Instrucciones Tpicas Transferencia de Datos (Copia)

MOVE OP_fuente,OP_destino
Op_destino := Op_fuente

Operandos en:
Registro
Memoria
Pila
Inmediato

Cargar: Memoria Registro


Almacenar: Registro Memoria

Arquitectura de Computadores Lenguaje Mquina - 18

Transferencia de Datos
En realidad no son instrucciones de transferencia o movimiento de datos, sino simplemente de
copia. Es uno de los tipos de instrucciones ms fundamentales. Estas instrucciones tienen dos
operandos, el fuente y el destino, y deben copiar el contenido del operando fuente al de destino.
Por tanto, deben indicar la ubicacin o direccin de ambos operandos, que pueden estar en un
registro, en memoria o en la pila. (El operando fuente tambin puede ser un operando inmediato
incluido en la propia instruccin).
A las instrucciones de copia de memoria a registro se las suele llamar de carga, mientras que las
que copian de registro a memoria se denominan de almacenamiento.

Arquitectura de Computadores Lenguaje Mquina - 18


Instrucciones Tpicas Aritmticas

ADD OP_1,OP_2
Op_1 := Op_1 + Op_2

Suma, Resta,
- Coma Fija y Flotante
Multiplicacin,
Divisin - Truncamientos

Inc, Dec, Abs, Not - Redondeos

Arquitectura de Computadores Lenguaje Mquina - 19

Aritmticas
Todos los procesadores de propsito general proporcionan las operaciones bsicas aritmticas de
suma, resta, multiplicacin y divisin, siempre, al menos, para nmeros enteros de coma fija. Los
procesadores de los ltimos aos tambin suelen incluir operaciones en coma flotante, y los
mainframes tambin manejan nmeros decimales empaquetados.
Las instrucciones aritmticas suelen ofrecerse con distintas precisiones, y no debe olvidarse que
pueden producirse resultados con truncamiento o redondeo.
Otras instrucciones aritmticas comunes son: incrementar, decrementar, valor absoluto y valor
negado.

Arquitectura de Computadores Lenguaje Mquina - 19


Instrucciones Tpicas Lgicas

OR OP_1,OP_2
Op_1 := Op_1 OR Op_2

Op. Booleanas: OR, AND, XOR, NOT


Manejo de bits

Transformacin de formato

Arquitectura de Computadores Lenguaje Mquina - 20

Lgicas
Tambin es normal ofrecer instrucciones para manejar los bits individuales de un byte o de una
palabra. Normalmente lo que hacen es realizar operaciones booleanas sobre bits, por lo que las
instrucciones ofrecidas suelen ser: OR, AND, OR exclusivo y NOT (negacin).
Estas operaciones se aplican a bits individuales o a series de bits, de tal forma que si cada
operando es una serie de bits, la operacin lgica se realiza entre el primer bit de la serie 1 y el
primer bit de la serie 2, entre el segundo bit de la serie 1 y el segundo bit de la serie 2, ...
Algunos autores incluyen dentro de las operaciones lgicas las operaciones de Transformaciones
de Formato, es decir, los desplazamientos y las rotaciones. Vemoslas en la siguiente
transparencia.

Arquitectura de Computadores Lenguaje Mquina - 20


Instrucciones Tpicas Desplazamientos y Rotaciones
A Derechas A Izquierdas
Desp. Lgico
0 C C 0

Desp. Aritmtico
S C C 0

Rotacin
C C

Arquitectura de Computadores Lenguaje Mquina - 21

Desplazamientos y Rotaciones
Los desplazamientos y las rotaciones se aplican sobre un nico operando, y pueden actuar a
derechas o a izquierdas.
Los desplazamientos pueden ser lgicos o aritmticos. El desplazamiento aritmtico a la derecha
va replicando el bit de signo (el del extremo izquierdo) a medida que se va desplazando, por lo que
se mantiene el signo en el resultado. En el desplazamiento aritmtico a izquierdas, el
desplazamiento no afecta al bit de signo, por lo que tambin se mantiene el signo en el resultado.
Como ya es sabido, el efecto aritmtico de un desplazamiento a izquierdas es el de ir multiplicando
por las sucesivas potencias de 2, mientras que el desplazamiento aritmtico a la derecha produce
la divisin por las sucesivas potencias de 2.
Ya que las rotaciones y los desplazamientos suelen afectar al bit de acarreo, estas instrucciones
sirven para analizar de forma individual los bits que componen un byte o una palabra de datos,
pues simplemente hay que consultar en cada momento el bit de acarreo para saber el valor que
tena el ltimo bit de la izquierda o la derecha antes de realizar la operacin.

Arquitectura de Computadores Lenguaje Mquina - 21


Instrucciones Tpicas Control del Sistema

 Establecer Privilegio
 Modificacin del Registro de Estado
 RESET, HALT, ...

Arquitectura de Computadores Lenguaje Mquina - 22

Control del Sistema


Estas instrucciones no afectan a operandos de los programas de usuario, sino que tienen que ver
con el modo de ejecucin del procesador, tales como el nivel de privilegio de ejecucin (usuario,
supervisor), modificacin del registro de estado, RESET, HALT, y otras que varan de unas
mquinas a otras.
Suelen ser instrucciones reservadas para los sistemas operativos, que solamente pueden
ejecutarse cuando el procesador est en modo supervisor.

Arquitectura de Computadores Lenguaje Mquina - 22


Instrucciones Tpicas Transferencia de Control
A veces hay que romper el flujo
secuencial de las instrucciones
Bifurcaciones Control Llamadas a Interrupciones
If Then Else de Bucles Procedimientos Excepciones

Saltos
Incondicionales Condicionales
JMP direccin
BEQ direccin
1 2
Establecer Bifurcar BNE direccin
Estado segn Condicin BHI direccin
(V,C,N,Z)
BLT direccin
ADD OP1,OP2
BCS direccin
CMP OP1, OP2
BVS direccin
TEST OP1

Arquitectura de Computadores Lenguaje Mquina - 23

Transferencia de control
Ya sabemos que el flujo natural de ejecucin de las instrucciones es el orden lineal: se ejecuta la instruccin de la
siguiente direccin de memoria. No obstante, los programas tienen que modificar esa secuencialidad dependiendo de
ciertas situaciones o de los datos de entrada. Tambin se hace necesaria la ruptura del flujo secuencial de control
cuando se realizan llamadas a procedimientos, que si bien mantienen una secuencialidad lgica, requieren un salto a
una instruccin distinta de la siguiente en secuencia.
Por esto se hace necesaria la presencia de instrucciones que permiten variar el flujo de control, lo cual se realiza con
instrucciones de salto o bifurcacin.
Hay instrucciones de salto incondicional, que simplemente tienen un cdigo de operacin y un operando que indica la
direccin de la siguiente instruccin a ejecutar. Pero en muchas ocasiones, los saltos se realizan solamente si se da
una determinada circunstancia, es decir, necesitamos saltos condicionales.
Los saltos condicionales se realizan en funcin de los bits o flags de estado del registro de estado. Estos bits los
establecen muchas operaciones de transferencia de datos, lgicas y aritmticas. Adems se dispone tambin de
operaciones de comparacin, que toman dos operandos y establecen los bits de estado dependiendo de la
comparacin de los dos operandos. Tambin hay instrucciones de prueba o test, que establecen los flags de estado
considerando solamente el valor de un nico operando (positivo, negativo, cero).
Algunos de los flags ms comunes que suele tener el registro de estado son los que indican: overflow, acarreo, cero,
negativo.
Como resumen, decir que los saltos condicionales estn formados por pares de instrucciones, una que establece el
estado, y otra que establece la condicin y el salto; si el estado cumple la condicin, se produce el salto. Las
instrucciones ms habituales para establecer el estado son las aritmticas, las de comparacin y las de prueba o test.

Hay otros mecanismos para romper el flujo secuencial de ejecucin, como son las corrutinas, las interrupciones y las
excepciones (o interrupciones software). De stas, en esta asignatura vamos a tratar solamente las interrupciones,
pero lo haremos en el captulo dedicado a los Sistemas de Entrada/Salida

Arquitectura de Computadores Lenguaje Mquina - 23


Instrucciones Tpicas Transferencia de Control

EJEMPLO Programa que resta el valor 5 a los


contenidos de las posiciones de
memoria comprendidas entre la
$0100 y la $0200.

Dir. Instruccin
$5000 MOVE #$0100,R2 R2 Apunta a la 1 dir.
$5004 SUB #5,(R2) Resta 5 a la pos. de memoria
. . . ADD #1,R2 Incrementa puntero
. . . CMP #0201,R2 R2 en la ltima direccin?
. . . BNE $5004 Si no era la ltima, repite

Arquitectura de Computadores Lenguaje Mquina - 24

En el fragmento de programa de arriba se muestra un ejemplo en el que se utilizan instrucciones


de bifurcacin condicional para controlar la repeticin del bucle en el que se van incrementando las
posiciones de memoria entre la direccin $100 y la direccin $200.

Arquitectura de Computadores Lenguaje Mquina - 24


Instrucciones Tpicas Llamadas a Procedimientos
P. Pr. Proc 1 Proc 2
L Programa
Llamada CAL Dir
Proc. P1 Proc. P2
.
principal
del p.p. 4000 4500 4800

RE
TU 4100 Call P1 4600 Call P2
RN 4101 4601
Return
LL

4650 Call P2
CA

4651

Return
URN
T
RE

4601 4651
Retorno 4101 4101 4101 4101 4101
al p.p.

Pila Despus Despus Despus Despus Despus Despus


inicial Call P1 Call P2 Return Call P2 Return Return
a P1 a P1 a P.P.
Arquitectura de Computadores Lenguaje Mquina - 25

Los procedimientos se utilizan asiduamente en los lenguajes de alto nivel, por lo que el lenguaje mquina debe
proporcionar un soporte para que se ejecuten eficazmente. As, veremos aqu el mecanismo que generalmente se
utiliza para realizar las llamadas a procedimientos con el nivel que ofrece el lenguaje mquina.
Sabemos que un procedimiento o subrutina es un grupo de instrucciones que realizan alguna tarea y que puede ser
llamado desde diversos puntos de un programa. A diferencia de los saltos, estas llamadas tienen la particularidad de
que una vez terminado el trabajo del procedimiento, se devuelve el control a la siguiente instruccin del punto de
llamada. Por esto, una de las primeras cosas que hay que hacer en una llamada a procedimiento es guardar la
direccin de retorno en alguna parte. Veamos algunas posibilidades.
En un registro. Cuando se llama a un procedimiento se guarda siempre la direccin de retorno en un registro
preestablecido, as cuando finaliza el procedimiento simplemente hay que tomar la direccin de retorno de ese registro.
La pega que tiene es que si desde un programa principal se llama a un procedimiento P_1, y ste llama a su vez al
procedimiento P_2, al realizar la segunda llamada se machaca la direccin de retorno de la primera llamada.
Este problema se produce porque se utiliza el mismo lugar para guardar la direccin de retorno de todos los
procedimientos. Por esto, una mejora podra consistir en guardar la direccin de retorno en una posicin de memoria
al comienzo de cada procedimiento, de tal manera que si el programa principal llama al procedimiento P_1, se
guarda la direccin de retorno en una zona de datos al comienzo del procedimiento P_1, y cuando ste llama al
procedimiento P_2, esta direccin de retorno se guarda en la zona correspondiente del procedimiento P_2, con lo que
no se machaca la primera direccin de retorno. El problema est en que no permite los procedimientos recursivos ni
los reentrantes. (Un procedimiento es reentrante si en un momento dado puede tener activas varias instancias por
haber sido llamado desde distintos procedimientos de distintos procesos).
El mejor lugar para guardar la direccin de vuelta es la Pila. Cuando se llama a un procedimiento se mete la direccin
de retorno en la cima de la pila. (Tngase en cuenta que cada proceso tiene su propia pila de trabajo). As, si un
procedimiento se llama recursivamente, se van guardando sus direcciones de vuelta en la pila, que simplemente va
creciendo a medida que se producen las llamadas, y empezar a decrecer segn se vaya llegando al final de cada
instanciacin.
Por esto, todos los procesadores de propsito general disponen de instrucciones de llamada a procedimiento (CALL)
que tienen un nico parmetro, la direccin del procedimiento llamado, que automticamente salva el CP en la pila
antes de saltar al procedimiento llamado. Obviamente, tambin disponen de una instruccin de fin de procedimiento
(RETURN) que saca el valor de la cima de la pila y lo pone en el CP (Contador de Programa).

Arquitectura de Computadores Lenguaje Mquina - 25


Instrucciones Tpicas Llamadas a Procedimientos
procedure Ejemplo (x, y: integer) is
a, b: integer;
begin
...
b := (x * x) - (y * y); Qu pasa
... con los parmetros ?
end Ejemplo;

0000 Dir. Ret. PP


y

Direcciones
x x (PP+2)
...
y (PP+1)
...

FFFF Pila
Arquitectura de Computadores Lenguaje Mquina - 26

Una vez que sabemos guardar la direccin de retorno, debemos ocuparnos del paso de parmetros.
Podramos pensar en poner los parmetros en una direccin fija de memoria o en registros, pero nos
encontraramos con los mismos problemas que para salvar la direccin de retorno. Por esto, los parmetros
tambin se van a poner en la pila.
Supongamos un programa que en un punto determinado realiza la siguiente llamada al procedimiento P1:
CALL P_1 (x, y).
Esta es la secuencia de acciones que deben llevarse a cabo para realizar la llamada a un procedimiento:
1. Meter en la pila el parmetro x.
2. Meter en la pila el parmetro y.
3. Meter en la pila el valor del CP.
4. Saltar a la direccin del procedimiento P1.
Una vez que toma control el procedimiento llamado, tiene en la cima de la pila la direccin de retorno,
inmediatamente debajo el parmetro y y, por ltimo, el parmetro x. Sabiendo esto, se puede acceder a los
parmetros mediante un direccionamiento relativo al PP (Puntero de Pila): PP+1, PP+2, ...
Cuando en el procedimiento llamado se alcance la instruccin RETURN, su ejecucin provocar el sacar de
la pila la direccin de retorno y ponerla en el CP, con lo que se devolver el control al procedimiento
llamante. En ste, se deber restaurar el estado de la pila a la misma situacin que tena antes de la
llamada al procedimiento, es decir, habr que sacar de la pila los dos parmetros que se encuentran
situados en las dos posiciones ms altas de la pila. Una vez que se haya dejado la pila en su situacin
original se contina con la ejecucin de la siguiente instruccin a la de la llamada al procedimiento.
Esto funciona aparentemente, aunque, como veremos ms adelante, hay situaciones en las que este
mecanismo no es vlido y necesita algn arreglo.

Arquitectura de Computadores Lenguaje Mquina - 26


Instrucciones Tpicas Llamadas a Procedimientos

... y las variables locales ?

0000
b PP
a x (PP+4)
Dir. Ret.
y (PP+3)
y
x a (PP+1)
... b (PP)
...
FFFF
Direcciones Pila

Arquitectura de Computadores Lenguaje Mquina - 27

El ltimo aspecto que nos queda por ver de la llamada a procedimientos es la asignacin de
espacio para las variables locales.
Las variables globales de un programa pueden guardarse o ubicarse en alguna zona fija de
memoria, sin embargo, no puede hacerse lo mismo con las variables locales de un procedimiento,
pues como ya hemos visto antes, se machacaran estos valores en procedimientos reentrantes o
recursivos. Por lo tanto, las variables locales de un procedimiento deben guardarse tambin en la
pila.
Hasta ahora hemos visto que la llamada a un procedimiento deja en la pila los parmetros y la
direccin de retorno antes de ceder el control al procedimiento llamado. Ahora, una vez que toma
control el procedimiento debe ocuparse de asignar espacio para sus variables locales. Si cada
variable necesita una palabra de memoria, lo que se puede hacer es dejar tantos huecos en la pila
como variables haya, haciendo corresponder cada hueco a una variable.
En este momento, despus de haber reservado espacio para las variables locales, el escenario de
la pila ser el siguiente: el PP estar apuntando a la ltima de las variables locales, seguida del
resto de las variables locales, en orden inverso al de su declaracin. En nuestro ejemplo, el PP
estar apuntando a la variable b y PP+1 estar apuntando a la variable a; PP+2 apuntar a la
direccin de retorno, mientras que PP+3 apuntar al parmetro y y PP+4 al parmetro x.
El conjunto de valores constituido por los parmetros, la direccin de retorno y las variables locales
se denomina trama de pila.

Arquitectura de Computadores Lenguaje Mquina - 27


Instrucciones Tpicas Llamadas a Procedimientos

... y las variables temporales ?

y*y PP
x*x
0000
b x (BL+2)
a y (BL+1)
Dir. Ret. BL
y
a (BL-1)
x b (BL-2)
...
...
FFFF
Direcciones Pila

Arquitectura de Computadores Lenguaje Mquina - 28

Acabamos de ver el mecanismo para referenciar las variables locales de cada rutina. No obstante,
todava se pueden presentar problemas. Por ejemplo, supongamos una llamada al procedimiento
de la transparencia, en el que se debe calcular la siguiente expresin
b:=(x * x)-(y * y)
Es comn que la evaluacin de esta expresin se realice por partes, de tal manera que primero se
calcula el valor de x2 y se guarda en la pila, a continuacin se calcula el valor de y2 y tambin se
guarda en la pila. Por ltimo se toman los dos valores de la cima de la pila y se restan.
Pues bien, cuando se ha metido en la pila el valor de x2 y vamos a acceder al parmetro y resulta
que ya no est en PP+3! Esto es porque la pila ha crecido, la cima de la pila se ha desplazado y
por lo tanto el registro PP ha variado su valor.
Para evitar este problema lo que se necesita es un registro que est continuamente apuntando a la
trama de la pila en curso (puede haber otras tramas debajo si hay llamadas anidadas). A este
registro lo vamos a llamar BL (Base Local). As, lo primero que debe hacer el procedimiento
llamado es poner el BL con el valor de PP actual y despus reservar el espacio para sus variables
locales. As, posteriormente podr direccionar los parmetros y las variables locales mediante
direccionamiento relativo al BL (BL-1, BL-2, ...), con lo que ya no importa que el PP vare su
valor debido a variables temporales.

Arquitectura de Computadores Lenguaje Mquina - 28


Instrucciones Tpicas Llamadas a Procedimientos
... y que pasa con el BL de las tramas anteriores ?
b PP
0000 a
BL de P2 BL (de P3)
Dir. Ret. x (BL+3)
y y (BL+2)
x
... a (BL-1)
... b (BL-2)
q
FFFF BL de P1
Direcciones y permite acceder a las variables
!
Dir. Ret.
p locales de las rutinas llamantes
...

Arquitectura de Computadores Lenguaje Mquina - 29

Todava nos queda un problema por resolver. Supongamos que desde un procedimiento P1 se llama a un
procedimiento P2, y que ste llama a su vez al procedimiento P3. Mientras se est ejecutando P2, el registro BL est
apuntando a la trama de pila de P2, pero cuando ste llama a P3 el BL se actualiza con la direccin de la trama de pila
de P3, machacando y perdiendo! la direccin de la trama de pila de P2. Es decir, cuando se llama a un procedimiento
se pierde la direccin de la trama de pila del procedimiento llamante.
La forma de solucionar esto es muy simple, consiste en guardar en cada trama de pila la direccin de la trama de pila
del proceso llamante antes de actualizar el BL con la direccin de la nueva trama de pila.
Veamos cual sera el orden completo de las acciones de una llamada:
Secuencia de llamada (en el procedimiento llamante):
1. Meter los parmetros en la pila.
2. Meter en la pila la direccin de retorno.
3. Ceder el control al procedimiento llamado.
Prlogo del procedimiento llamado:
4. Guardar en la pila el valor del registro BL.
5. Copiar el registro PP al registro BL.
6. Asignar espacio en la pila para las variables locales (moviendo el PP).

Por su parte, esto es lo que origina la terminacin de un procedimiento:


Eplogo de la rutina llamada:
1. Liberar el espacio de las variables locales: BL PP
2. Restaurar el anterior BL, sacndolo de la pila.
3. Retorno al procedimiento llamante, sacando la direccin de retorno de la pila.
Secuencia de retorno del procedimiento llamante:
4. Liberar el espacio de pila utilizado para los parmetros (moviendo el PP).

Los procesadores suelen ofrecer instrucciones para ejecutar fcilmente el prlogo y el eplogo de los procedimientos
(Intel: ENTER y LEAVE; Motorola: LINK y UNLK). Las mquinas RISC como PowerPC no disponen de este tipo de
instrucciones.
La instruccin ENTER del Pentium consume 11 ciclos de reloj para su ejecucin, aunque si el prlogo se realiza a base
de instrucciones elementales requiere solamente 1,5 ciclos !

Arquitectura de Computadores Lenguaje Mquina - 29


Lenguaje Mquina Instrucciones Tpicas

Y la Entrada/Salida ?
Cmo se leen y escriben
los datos?

Arquitectura de Computadores Lenguaje Mquina - 30

Y cmo se realiza la entrada/salida?


Por supuesto que faltan los mecanismos de E/S, pero es que sobre esto hay mucho que hablar, y
lo veremos con detalle en el captulo dedicado a los Sistemas de Entrada/Salida.

Arquitectura de Computadores Lenguaje Mquina - 30

También podría gustarte