Logo Studenta

cpr Arquitectura ARC-Capítulo 4y5- MURDOCCA

¡Este material tiene más páginas!

Vista previa del material en texto

Capítulo 4:
La Arquitectura de Programación.
ARC, una computadora RISC.
Libro: Principios de Arquitectura de Computadoras –Autores: Miles Murdocca y Vincent Heuring
Universidad Tecnológica Nacional
Facultad Regional Tucumán
Ingeniería en Sistemas de Información
 ARQUITECTURA DE COMPUTADORES
Capítulo 5:
Los Lenguajes y la Máquina.
5.2: El Proceso de Ensamblado.
Modelo de Bus de Sistema (Revisión)
La CPU genera direcciones que se transfieren sobre el bus de direcciones.
La Memoria recibe esas direcciones a través del mismo bus.
La Memoria nunca genera direcciones y la CPU nunca recibe direcciones.
Describe
cómo se
transfiere
la
info rmació
n y qué se
hará co n
ella.
Describe
hacia
dónde
se
transfiere
la
info rmació
n
Describe qué
info rmación
se está
transmitie nd
o .
•ARC (A RISC Computer): es un subconjunto del
modelo de arquitectura basado en el
procesador SPARC, desarrollado por Sun
Microsystems.
•RISC: significa computadora con un conjunto
reducido de instrucciones.
ARQUITECTURA ARC
ARQUITECTURA ARC
Tipos de palabras:
• Palabra de datos o de instrucciones: tienen 32 bits.
• Palabra de dirección de memoria: también tiene 32
bits, puede especificar una de 232 –1 direcciones.
Tamaños Comunes en los formatos de
Palabras de Datos
• Los tamaños típicos de palabras son de 16, 32, 64 y 128 bits.
• El de 32 bits es el que se usa en la Arquitectura ARC.
• Equivale a 4 bytes (4 x 8 = 32), que son 4 registros.
• El dato más pequeño que se puede hacer referencia en la memoria
es el byte (8 bits).
Memoria en la Arquitectura ARC
•La Memoria consiste en un conjunto de
registros numerados (direccionados) en forma
consecutiva, cada uno almacena normalmente
un byte (8 bits).
•Locación de Memoria es la dirección de cada
registro.
Espacio de Direcciones: es el rango numérico de direcciones de memoria
al que puede hacer referencia la Unidad Central de Procesamiento (CPU).
El tamaño del rango es único y depende del tamaño de la palabra de
dirección que la CPU puede colocar sobre el bus de direcciones.
En forma general, una palabra de dirección de n bits puede especificar
una de 2n direcciones.
Ésta memoria tendrá un espacio de direcciones de n bits, o en forma
equivalente un espacio de direcciones de 2n bytes.
Por ejemplo:
Si la memoria tiene un espacio de direcciones de 32 bits
entonces tiene una capacidad máxima de 232 bytes (que son 4
GB).
El rango de direcciones irá desde 0 a 232 –1.
Memoria en la Arquitectura ARC
Mapa de Memoria de la Arquitectura ARC
El último reg istro
esta en la
dirección 232-1
La última
palabra esta en
la dirección 232-4
32 bits = 1 palabra
=
4 byte s = 4
re g istros de 8 bits
c/ u
Formatos Big-Endian y Little-Endian
La dirección, X, de una palabra de 4 bytes, es la dirección del byte que tiene la
dirección más baja de la palabra (byte menos significativo, LSB son sus iniciales en
inglés).
Cuando se usan palabras de varios bytes, hay dos opciones para ordenar los bytes que
se almacenan en la memoria:
•Little-endian: el byte menos significativo se almacena en la dirección más
baja de memoria.
•Big-endian: el byte más significativo, el mayor, se almacena en la dirección
más baja de memoria.
Es e l que
usare mos
| H | O | L | A |
| A | L | O | H |
Ejemplo:
palabra
HOLA(ASCII)
Vista Abstracta de una CPU
La CPU consiste en:
• Una sección de datos, llamada también “trayecto de datos"
o "datapath", que contiene registros y una ALU.
• Una sección de control, que interpreta las instrucciones y
realiza las transferencias entre registros.
La Unidad de Control
• Es la responsable de la ejecución de las
instrucciones del programa, escritas ya en código
máquina, de una instrucción a la vez.
• Posee dos registros que permiten conectarse con la
Sección de Datos:
- Contador de Programa (PC): contiene la
dirección de la instrucción en ejecución.
- Registro de Instrucción (IR): almacena la
instrucción a ejecutar.
•Los pasos que la Unidad de Control lleva a cabo
en la ejecución de un programa son:
1. Buscar de la memoria la siguiente instrucción a
ejecutar.
2. Decodificar el código de operación.
3. Buscar los operandos de la memoria principal, si los
hubiera.
4. Ejecutar la instrucción y almacenar los resultados.
5. Volver al paso 1.
Esto se conoce como:
Ciclo de Búsqueda y Ejecución.
Trayecto de Datos (datapath)
Esta formado por:
• Conjunto de registros: son memorias pequeñas y rápidas, separadas
de la memoria principal, están en la CPU. Se las usa para el
almacenamiento temporal durante las operaciones de cálculo. Cada
registro posee una dirección ordenada secuencialmente a partir de
cero. Éstas direcciones son más chicas que las de la memoria
principal.
Por ejemplo:
Un conjunto de registros que contenga 32 registros usará una
palabra de dirección de solo 5 bits (25=32).
• ALU: implementa una variedad de operaciones, de uno y dos
operandos.
Por ejemplo:
Suma aritmética, Operaciones Lógicas (And, Or, Not).
00000 = re g istro 0
a
11111 = re g istro
31
Trayecto de Datos (datapath)
La UC, que NO pertenece
al Trayecto de Datos,
se lecciona las
operaciones y operandos
a utilizar.
El resultado obtenido en la ALU
se transfiere , a través de un bus,
al reg istro destino que se
encuentra en e l Conjunto de
Reg istros.
Los dos
operandos se
transfieren
desde e l
Conjunto de
Reg istros, a
través de buses,
a lo s Reg istros
Fuentes.
Buses del Sistema,
que conectan el
Trayecto de Datos con
Memoria y E/S.
Buses adicionales,
internos al Trayecto de
Datos, que conectan el
Conjunto de Registros con
la ALU.
Registros de la CPU de la Máquina ARC
•Cada registro tiene 32 bits.
•Los registros se especifican con el símbolo %.
•Hay 32 registros visibles para el usuario, del 0 al
31, de uso general, salvo los de usos específicos:
§ El registro 0 (%r0) siempre contendrá el valor
cero.
§ El registro 14 (%r14) es el puntero de pila.
§ El registro 15 (%r15) es el registro de enlace.
Registros ARC de uso general
Registros ARC
• El registro PC es el registro número 32.
• Existen 4 registros temporales.
• El registro IR es el número 37.
En total hay 38 registros en el conjunto de registros
del Trayecto de datos.
Registros ARC
• El registro PSR (Registro de Estado del Procesador)
contiene información acerca del estado del procesador.
Posee códigos de condición que especifican si una
operación aritmética dio :
§ Resultado negativo (n).
§ Resultado cero (z).
§ Si produjo un desborde (v), o sea que el resultado de
la operación aritmética es demasiado grande para la
ALU.
§ Si produjo un arrastre (acarreo) a la salida de la ALU
(c).
NOTA: Los números negativos se los expresa en complemento a 2.
El Conjunto de Instrucciones de ARC
• Es la colección de instrucciones que un procesador puede
ejecutar.
• Difiere de un procesador a otro, en el tamaño de las
instrucciones, el tipo de operaciones que permiten, el tipo de
operandos que puede ejecutar y los resultados que pueden
entregar.
• El tamaño de una instrucción en ARC es de 32 bits, o sea una
palabra.
• En ARC solo dos instrucciones pueden acceder a Memoria, ld
(load=carga) y st (store=descarga).
El Conjunto de Instrucciones de ARC
Las instrucciones aritméticas y lógicas terminadas con el sufijo “cc”especifican que luego de
realizadas las operaciones se deben actualizar los códigos de condición del registro PSR.
Formato de Lenguaje Ensamblador ARC
•El lenguaje hace distinción entre mayúsculas y minúsculas.
•Los campos de etiqueta y comentario son optativos.
•El campo etiqueta usa caracteres alfabéticos, numéricos (siempre y
cuando no sea el primer dígito), los símbolos guión bajo (_), signo
monetario ($), punto (.) y los dos puntos (:) que indica el final de la
etiqueta.
•El campo comentario va precedido del símbolo !
•Los operandos se separan con comas (,) y su uso dependerá de cada
instrucción.
•Los operandos origen 1 y destino siempre deben ser un registro. El
operando origen 2 puede ser una constante.
Ejemplos de instrucciones enassembler
•Instrucciones aritméticas: Suma el co ntenido del
reg istro 1 co n el
co ntenido del reg istro 2 ,
el resultado lo almacena
en el reg istro 3.
Al co ntenido del
reg istro 1 le suma el
valo r 12, el resultado
lo almacena en el
reg istro 3.
El valor de la constante esta en decimal, 12(10). Si se lo quisiera expresar en
hexadecimal se debe poner adelante “0x”o debe terminar en “H”.
•Instrucciones de memoria:
Ejemplos de instrucciones en assembler
§ La referencia al contenido de una posición de
memoria se indica con corchetes [ ].
§ Los registros siempre se mencionan en función de
su contenido, nunca en términos de una dirección.
§ Si no se nombra el operando origen 1 se
considera que es el %r0.
• Instrucciones de memoria:
Ejemplos de instrucciones en assembler
Al contenido de la
posición X de Memoria se
lo copia en el registro 3
del Trayecto de Datos.
Copia el contenido del
registro 3 en la posición Y
de Memoria.
st guarda (escribe) en
Memoria.
ld saca (lee) de la Memoria.
EJEMPLOS: usando etiquetas para hacer referencia al
contenido de una posición de memoria [ ].
• Instrucciones de memoria:
EJEMPLOS: usando registros y constantes, que sumados, hacen
referencia al contenido de una posición de memoria [ ].
Se suman los contenidos de los %r1 y %r2, el resultado será una posición
de memoria.
Lo que se encuentre en esa posición de memoria se guardará en el %r3 de
la CPU.
Ejemplos de instrucciones en assembler
•Instrucciones lógicas:
lab_5: sethi 0x304F15 , % r1
lab_9: srl %r1 , 3 , %r2
Carga el valor hexadecimal
304F15 en los 22 bits más
significativos del %r1, colocando
en 0 los restantes
10 bits.
Desplaza el contenido del %r1 tres
posiciones a la derecha, almacena
el resultado en %r2. Las
posiciones que quedaron vacías se
completan con ceros.
Ejemplos de instrucciones en assembler
•Instrucciones lógicas:
lab_6: andcc %r1 , %r2 , % r3
lab_7: orcc %r1 , 1 , % r1
lab_8: orncc %r1 , %r0 , %r1
Realiza el AND, bit por bit, entre
los contenido de los %r1 y %r2 y
almacena el resultado en el %r3.
En función del resultado se modifican los códigos de condición del
registro PSR.
Realiza el OR, bit por bit, entre el
contenido del %r1 y la constante
de valor 1, almacena el resultado
en el %r1.
Realiza el NOR, bit por bit, entre
los contenidos de los %r1 y %r0,
almacena el resultado en %r1.
Hace el complemento.
Ejercicio
Escriba una instrucción en assembler que realice
la suma lógica usando dos registros fuentes y el
registro 25 como destino.
orcc %r1, %r2, %r25
Ésta es una posibilidad, podemos variar los
registros a sumar.
Ejercicio
Si en la instrucción los valores de los registros
fuentes son 00000000(16) y FFFFFFFF(16). ¿Qué
valor queda almacenado en el registro destino?.
orcc %r1, %r2, %r25
Ejercicio
Dada la instrucción:
andcc %r1, %r0, %r25
¿Qué valor queda almacenado en el
registro destino?.
La compuerta lógica AND solo resulta con valor 1
cuando todas son entradas tienen 1. Si alguna entrada
vale 0 el resultado es 0.
El %ro siempre tiene almacenado el valor cero, por lo
que al realizar un AND entre cualquier valor del %r1 con
%r0 el resultado a guardar en %r25 será cero.
•Una Subrutina, llamada también función o
procedimiento, es una secuencia de
instrucciones a la que se invoca como si se
tratara de una única instrucción.
Cuando el programa llama a la subrutina se
transfiere el control a ésta, la que ejecuta la
secuencia de instrucciones requerida, tras lo
cual vuelve a la posición inmediatamente
siguiente a la que generó el llamado.
Algunas definiciones
Mas adelante ampliaremos éste tema.
Ejemplos de instrucciones en assembler
•Instrucciones de control:
lab_10: call sub_r
lab_11: jmpl %r15 + 4 , %r0
Es una operación de llamado y enlace.
Invoca una subrutina, que comienza en la
posición de memoria sub_r, y almacena la
dirección de la instrucción actual, que esta
en PC, en %r15.
Retorno de subrutina. Debe
volverse a la dirección siguiente a
call, que se la calcula como el
valor de PC, que esta en %r15,
más 4, porque cada palabra tiene
4 registros.
La dirección de la instrucción
actual se descarta en %r0 , pero
internam ente la arquitectura
guarda el destino en el PC .
En éstas instrucciones la referencia a
la dirección de una posición de
memoria se indica sin corchetes [ ],
como en el ejemplo la etiqueta
sub_r.
Ejemplo de Llamado a Subrutina
Se usa una subrutina para realizar una suma de dos
números contenidos en registros.
Ejemplos de instrucciones en assembler
•Instrucciones de control (de Salto
condicional):
Salta a label si el código de condición z = 1, que indica que
todos los bits del registro que contiene el resultado son
ceros. Si z= 0 sigue con la instrucción siguiente a be en el
programa.
Salta a la etiqueta label si el código de condición n= 1, que
indica que el primer bit más significativo (el del signo) del
registro que contiene el resultado es 1, o sea es un
número negativo. Si n= 0 sigue con la instrucción siguiente
a bneg en el programa.
Salta a label si el código de condición c = 1, que indica que
ocurrió un arrastre o acarreo al realizar los cálculos en la
ALU. Si c= 0 sigue con la instrucción siguiente a bcs en el
programa.
Salta a label si el código de condición v= 1, que indica que
ocurrió un desbo rde al realizar los cálculos en la ALU. Si
v= 0 sigue con la instrucción siguiente a bvs en el
programa.
lab_12: be label
lab_13: bneg label
lab_14: bcs label
lab_15: bvs label
Lo que se está haciendo es asignar la dirección destino del salto, a la dirección de la instrucción en
ejecución.
Ejemplos de instrucciones en assembler
•Instrucciones de control (de Salto
incondicional):
lab_16: ba label
Salta a label,
independientemente de los
valores que adopten los
códigos de condición.
Lo que se está haciendo es asignar la dirección destino del salto, a la dirección de
la instrucción en ejecución.
Formatos de las instrucciones
ARC
en Lenguaje Máquina (código objeto)
• El formato de instrucción definirá como el programa
ensamblador (que traduce programas en lenguaje
assembler a códigos binarios), distribuye los diferentes
campos de una instrucción y la forma en que los
interpreta la Unidad de Control.
• Cada instrucción tiene 32 bits.
• Los dos bits más significativos forman el campo OP, que
corresponde al código de operación, a partir de éste se
identificará el formato.
Formatos de las instrucciones ARC
Figura
4.10,
página
114,
cap ítulo 4
del libro
del autor
Murdocca.
Ejemplos de instrucciones en código objeto
• Instrucciones aritméticas:
NOTA: Las etiquetas y comentarios no se traducen a código objeto.
Identifica la instrucción, según
la tab la op3 (con op = 10)
En los
campos rd,
rs1 y rs2 van
los números
de los
registros
escritos con 5
dígitos
binario s.
Ejemplos de instrucciones en código objeto
• Instrucciones aritméticas:
Cuando el
segundo
reg istro o rigen
es una
constan te
entonces i = 1,
y en el cam po
sim m 13 se
escribe el valo r
de la constan te
usando 13
d íg itos b inarios.
Ejemplos de instrucciones en código objeto
• Instrucciones lógicas:
Realiza el AND, bit por bit, entre los
contenido de los %r1 y %r2 y
almacena el resultado en el %r3.
Ejemplos de instrucciones en código objeto
• Instrucciones lógicas: Realiza el OR, bit por bit, entre el
contenido del %r1 y la constante de
valor 1, almacena el resultado en el
%r1.
Ejemplos de instrucciones en código objeto
• Instrucciones lógicas: Realiza el NOR, bit por bit, entre los
contenidos de los %r1 y %r0,
almacena el resultado en %r1. Hace
el complemento.
Ejemplos de instrucciones en código objeto
• Instrucciones lógicas:
Desplaza el contenido del %r1 tres
posiciones a la derecha, almacena el
resultado en %r2. Las posiciones que
quedaron vacías se completan con
ceros.
Ejemplos de instrucciones en código objeto
• Instrucciones lógicas: Carga el valor hexadecimal 304F15 en los
22 bits más significativos del %r1,
colocando en 0 los restantes 10 bits.Ejemplos de instrucciones en código objeto
• Instrucciones de memoria:
q El formato de éstas instrucciones tiene tres operandos, dos
de origen(rs1 y rs2) y uno de destino (rd).
q Sin embargo, las instrucciones de memoria solo necesitan dos
operandos, uno para la dirección y otro para el dato.
q El campo operando remanente se lo utilizará también para la
dirección:
§ Cuando i = 1 los operandos contenidos en los campos rs1 y
simm13 se sumarán para obtener la dirección.
§ Cuando i = 0 los operandos contenidos en los campos rs1 y
rs2 se sumarán para obtener la dirección.
Ejemplos de instrucciones en código objeto
• Instrucciones de memoria:
En éste ejemplo
supond remos
que la dirección
x es 2064.
En simm13 va la dirección, en éste caso X que vale 2064, escrita en binario usando 13 bits.
No es el contenido de la dirección.
En los ejemplos se utiliza el %r0 para rs2, con lo
cual solo se especifica el operando origen restante.
Ejemplos de instrucciones en código objeto
• Instrucciones de memoria:
En éste ejemplo
supond remos que
la dirección Y es
2065.
En el único caso en que el campo rd (registro destino) identificará un registro origen es
en la instrucción st.
Ejemplos de instrucciones en código objeto
• Instrucciones de control:
Es una operación de llamado y enlace.
Invoca una subrutina, que comienza
en la posición de memoria sub_r, y
almacena la dirección de la instrucción
actual, que esta en PC, en el %r15.
Se considera que sub_r se encuentra ubicada 25 palabras (25 x 4 =
100 bytes) después de la instrucción call.
Ejemplos de instrucciones en código objeto
• Instrucciones de control:
Retorno de subrutina. Debe volverse
a la dirección siguiente a call, que se
la calcula como el valor de PC, que
esta en %r15, más 4, el resultado se
dice que se descarta en %r0, pero
internam ente la arquitectura guarda el
destino en el PC , que es el %r32,
pero com o no se puede escrib ir 32
con 5 bits se dice que se descarta en
el %r0 .
Ejemplos de instrucciones en código objeto
• Instrucciones de control (de Salto condicional):
Salta a label si el código de condición z = 1, que
indica que todos los bits del registro que
contiene el resultado son ceros . Si z= 0 sigue con
la instrucción siguiente a be en el programa.
Se considera que label se encuentra en
una dirección de memoria 5 palabras
(5 x 4 = 20 bytes) mayor que la de la
instrucción be.
En el formato de salto
el bit 29 siempre vale 0.
Ejemplos de instrucciones en código objeto
• Instrucciones de control (de Salto condicional):
Salta a label si el código de condición n= 1, que
indica que el primer bit más significativo (el del
signo) del registro que contiene el resultado es
1, o sea es un número negativo. Si n= 0 sigue
con la instrucción siguiente a bneg en el
programa.
Se considera que label se encuentra en
una dirección de memoria 5 palabras
(5 x 4 = 20 bytes) mayor que la de la
instrucción bneg.
Ejemplos de instrucciones en código objeto
• Instrucciones de control (de Salto condicional):
Salta a label si el código de condición c = 1,
que indica que ocurrió un arrastre o acarreo al
realizar los cálculos en la ALU. Si c= 0 sigue con
la instrucción siguiente a bcs en el programa.
Se considera que label se encuentra en
una dirección de memoria 5 palabras
(5 x 4 = 20 bytes) mayor que la de la
instrucción bcs.
Ejemplos de instrucciones en código objeto
• Instrucciones de control (de Salto condicional):
Salta a label si el código de condición
v= 1, que indica que ocurrió un desbo rde
al realizar los cálculos en la ALU. Si v= 0
sigue con la instrucción siguiente a bvs
en el programa.
Se considera que label se encuentra en
una dirección de memoria 5 palabras
(5 x 4 = 20 bytes) mayor que la de la
instrucción bvs.
Ejemplos de instrucciones en código objeto
• Instrucciones de control (de Salto incondicional):
Salta a label,
independientemente de los
valores que adopten los códigos
de condición.
Se considera que label se encuentra en una dirección de
memoria 5 palabras (5 x 4 = 20 bytes) menor que la de la
instrucción ba.
Directivas o Pseudo Operaciones ARC
• No son códigos de operación, son instrucciones para que el ensamblador
realice ciertas operaciones en el momento del ensamble.
• Siempre comienzan con un punto ( . ).
Algunas directivas las veremos más adelante.
Ejemplo de Programa ARC
Un programa ARC en lenguaje assembler que suma dos enteros:
A partir de la dirección 2048 se
cargará el código.
Como solo se pueden sumar números que estén
almacenados en registros de ARC, el programa
comienza cargando en %r1 y %r2 los contenidos de
la direcciones X e Y de la memoria.
Ejercicio
Indique cuales son las etiquetas, las directivas, las
instrucciones y los comentarios.
El Proceso de Ensamblado
•Es el proceso de transformar un programa en lenguaje ensamblador a
un programa en lenguaje de máquina.
•Los ensambladores comerciales proveen las siguientes prestaciones:
-- Permiten al programador especificar la ubicación de variables y
programas, y la dirección de inicio de un programa, si existiera.
-- Proveen expresiones nemónicas en el lenguaje de programación
para todas las instrucciones del lenguaje de máquina.
-- Permiten el uso de rótulos simbólicos (etiquetas) para representar
direcciones y constantes.
-- Incluyen un mecanismo que permite la definición de variables en un
programa escrito en lenguaje simbólico y el uso de las mismas en otro
programa ensamblado por separado.
-- Proveen la expansión de macro rutinas (se definen una sola vez).
A continuación exploraremos como el proceso de ensamblado genera un
programa ARC a través del "Ensamblado a Mano".
Ensambladores de dos pasadas
•La mayoría de los ensambladores recorren dos veces el texto escrito
en lenguaje simbólico.
•En la primera pasada determinan:
•direcciones de todos los datos e instrucciones del programa.
•seleccionan que instrucción del lenguaje máquina debe generarse
para cada instrucción en lenguaje simbólico, pero sin generar aún
el código máquina.
•realizan operaciones aritméticas.
•insertan las definiciones de etiquetas y constantes en una tabla
de símbolos. A cada símbolo (etiqueta) se le ingresa en la tabla el
valor correspondiente a la posición en que se encuentran.
•En la segunda pasada se genera el código máquina, insertando en el
mismo los valores de los símbolos ya conocidos de la tabla anterior.
Ejemplo de Programa ARC
Un programa que suma cinco números
enteros:
Figura 4.14, página 124,
cap ítulo 4 del libro del
autor Murdocca.
Sobre el programa anterior, realice el
proceso de ensamblado en dos pasadas:
1. Primera Pasada: escribir la tabla de
símbolos.
2. Segunda Pasada: escribirlo en
lenguaje máquina o código objeto.
Ejercicio
Primera pasada: TABLA DE
SÍMBOLOS El símbolo lengh
aparece como no
determinado por el
momento.
El contador de
posiciones se va
incrementando en 4.
A cada símbolo
(etiqueta) se le
ingresa en la tabla el
valor correspondiente
a la posición en que se
encuentran.
Segunda pasada: CÓ DIGO OBJETO
MODOS DE
DIRECCIONAMIENTO
SINTAXIS SIGNIFICADO
Inmediato #K K Se refieren a un valor (constante o dirección)
conocido al momento del ensamble.
Directo K M[K]
Indirecto * (K) M[M[K]] Se usa para acceder a una variable puntero
cuya dirección se conoce al momento de la
compilación.
Indirecto a través
de registro
(Rn) M[Rn] Se refiere al contenido de un registro.
Se usa cuando la dirección del operando, que
esta almacenado en una pila, no se conoce
hasta el momento de la ejecución.
Indexado a través
de registro
(Rm + Rn) M[Rm + Rn] Se refieren a la suma de los contenidos de
registros y constantes.
Se usan para acceder a los componentes de
arreglos, y a componentes ubicados más allá
del comienzo de la pila.
Basado en registro (Rm + X) M[Rm + X]
Indexado basado en
registro *
(Rm + Rn + X) M[Rm + Rn + X]
Modos de Direccionamiento
Métodos para obtener la dirección de un dato almacenado en memoria.
La dirección se obtiene a través del cálculo indicado entre corchetes.
Tablaa modo de ejemplo, la sintaxis difiere a la de ARC.
(* no se usan éstos modos en ARC) .
•Una Subrutina, llamada también función o
procedimiento, es una secuencia de
instrucciones a la que se invoca como si se
tratara de una única instrucción.
Cuando el programa llama a la subrutina se
transfiere el control a ésta, la que ejecuta la
secuencia de instrucciones requerida, tras lo
cual vuelve a la posición inmediatamente
siguiente a la que generó el llamado.
Acceso a Subrutinas
Llamado a Subrutina usando Registros
Se pasan los parámetros (argumentos) en los registros.
No funciona cuando la cantidad de registros a transferir excede el número
de registros disponibles, o cuando las subrutinas están muy encadenadas.
Llamado a Subrutina usando un Área de enlace
(transferencia) de datos
Los parámetros se pasan en un área separada en la memoria.•La d irectiva .dwb crea un área de 3 palab ras, en las
d irecciones x, x + 4 y x + 8.
•Con st se cargan los argum entos (conten idos de %r1 y
%r2) en las posiciones de m em oria x y x+ 4,
respectivam ente .
•Con seth i se carga la d irección x en los 22 b its m ás
significativos del %r5, com pletando con cero los o tros
10 b its.
•Con srl desp lazo el conten ido del %r5 10 posiciones a
la derecha y alm aceno el resultado de nuevo en %r5, lo
que se hizo es co locar la d irección x en los 22 b its
m enos significativos.
•Con ésto la d irección de com ienzo del área, x, se pone
en %r5 y se llam a a la subrutina add_2.•Con ld se leen los operandos conten idos en %r5
y %r5+ 4 y se los guarda en %r8 y %r9.
•Se realiza la sum a y el resultado se lo guarda en
%r10.
•Con st se transfiere el resultado a la posición
%r5 + 8.
•Se reto rna a la rutina invocan te.
•Con ld el resultado de la sum a, que esta en la
posición x+ 8 de m em oria, se lo co loca en el
%r3 de la CPU.
Llamado a Subrutina usando una Pila
Los argumentos, o punteros a los mismos, se colocan en una pila tipo LIFO (last in first out
= último en entrar primero en salir).
•El reg istro punte ro de p ila, stack po inter, %sp =
%r14, contie ne la d irección de la cabeza de la p ila.
•Con addcc se decrem enta %sp en 4, con lo cual
queda apuntando a la p rim era palab ra lib re por
encim a de la p ila.
•Median te st se co loca los argum entos (%r1 y %r2)
en la p ila.
•Se llam a a la subrutina add_3.•Con ld la rutina invocada extrae de la p ila,
p rim ero %r8.
•Con addcc se increm enta %sp en 4, con lo
cual queda apuntando a la p rim era palab ra
ocupada.
•Con ld se extrae de la p ila el conten ido de
%r9.
•Realiza la sum a y guarda el resultado en
%r10.
•Con st co loca en la p ila lo que deba
reto rnar.•La rutina invocan te extrae el valo r devue lto ,
con ld , y continua la ejecución.
La pila tiene por ventaja que su tamaño aumenta o
disminuye a medida que resulta necesario.