Upload
others
View
24
Download
1
Embed Size (px)
Citation preview
Modos de Direccionamiento
Universidad Nacional de La Matanza
Dpto. Ingeniería e Investigaciones Tecnológicas
Arquitectura de Computadoras
Lectura recomendada: STA05 Págs 407-415FLO06 790-792
Autor: Ing. Jaír E. Hnatiuk
Revisión: Ing. Ezequiel Calaz, Ing. Edgardo Gho
Ver. 1.2.5 (2021)
Código de operación Operando 1 Operando 2
Formatos de instrucción
Código de operación Operando 1
Código de operación
Fetch
Decode
FetchOperands
Execute
Store results
Ciclo de instrucción
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
2
Código de operación Operando 1 Operando 2 Resultado
¿Necesito operandos?¿Dónde están el/los operando(s)?
¿Cómo los obtengo?
Modos de direccionamiento
¿Cómo obtenemos y damos indicaciones en la vida cotidiana?
• Mi domicilio es “Florencio Varela 1903”• Estoy a dos cuadras al norte del Hospital Italiano• Pasá por la casa de Carlitos y preguntale cómo llegar• Frente al bar metalero• 34° 40’ 11,588’’ S; 58° 33’ 45,379’’ O
Modo de direccionamiento: manera por la que una instrucción de un programa accede a sus operandos (en memoria principal o registros internos de CPU).Puede tratarse de operandos para operaciones aritméticas, lógicas o de control de flujo del programa.
“Out of bounds”: definición gráfica
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
3
• El código de operación se almacena en memoria principal (ROM/RWM)
• Los operandos pueden hallarse en memoria principal (ROM/RWM) o en registros
La memoria principal puede verse como un vector unidimensional
donde cada dirección corresponde a un elemento del mismo.
Modos de direccionamiento
La CPU no puede obtener operandos o códigos de operación
de la memoria secundaria
Los registros accesibles disponibles dependerán de la
estructura de la CPU
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
4
Velocidad, costo, tamaño
Modos de direccionamiento
Arquitectura de programación
Registros accesibles
Set de instrucciones
Modos de direccionamiento
Memoria principal
Componentes visibles al programador de base
¿Qué instrucciones entiende la CPU?
¿Con qué memoria cuento?
¿Qué registros tiene la CPU?
¿Cómo accedo a los operandos?
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
6
El diseñador de hardware puede incorporar más de un registro con un
propósito similar (por ejemplo N registros índice o M registros de segmento)
Bus de direcciones
Memory Address Register
ProgramCounter
Index RegisterSegmentRegister
Base Register/PointerStack Pointer
Page Register/Pointer
Temporal AddressRegister
Modos de direccionamiento
Algunos de los registros accesibles de CPU cumplen una función específica en ciertos
modos de direccionamiento.
Generalmente (no siempre) estos registros tienen el mismo tamaño que el bus de direcciones.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
7
Modos de direccionamiento
Datos…¿Dónde están?
¿Cómo se indica dónde está?
¿Cómo se da la dirección del dato?
Dirección efectiva Modo Absoluto
Dirección del dato Dirección de referencia + desplazamiento
Modo Relativo Inmediato, indexado, relativo, paginado, segmentado, base y despl.
En memoria Dirección de la dirección del dato
En la instrucción Modo indirecto Absoluto indirecto
Con datos
En un registro Modo registro indirecto
Instrucción En registro Modo registro
Sin datos
Modo implícito
Modos teóricosEl concepto de cada uno puede
implementarse individualmente o combinado con otro según el fabricante
Modos de direccionamiento - Arquitectura de Computadoras - Unlam (2020) 9
Sin datos
La CPU no requiere operandos para ejecutar la instrucción.
Código de operación Arquitectura
No operation
NOP 12 (00010010) MC6809
NOP 00 (00000000) Intel 8085
NOP 00 (00000000) Zilog Z80
NOP66 90 (01100110 10010000)
IA-64
NOP 90 (10010000) IA-32
NOP 01 (00000001) MC6800
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
10
Mnemonico CodOp Arquitectura
Set interrupt mask
SIM 30 (00110000) Intel 8085
STI FB (11111011) IA-32
SEI 0F (00001111) MC68HC11
Formato de instrucción
Código de Operación
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo registro directo
Los operandos requeridos están en registros internos. Si el/los registro(s) implicados se indican en el mismo código de operación se los conoce como datos implícitos o inherente.Instrucciones rápidas: acceden a memoria sólo para leer el código de operación.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
11
Mnemonico CodOp Arquitectura
Rotate accumulator A
RORA 46 (01000110) MC6800/6809/68HC11
RAR 1F (00011111) Intel 8085
Sumar r1 y r2 y guardar el resultado en r0
ADD r0, r1, r2 ARM
Add $1, $2, $0 MIPS
Sumar EAX y EBX y guardar el resultado en EBX
ADD EBX, EAX Intel IA-32
Código de operación Registro
Formato de instrucción
Cuando se habla de datos implícitos/inherente las referencias a los registros están embebidas
en el código de operación.
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo registro directo
¿Dónde aparece la referencia al operando?
Mnemónico Descripción Código de operación (Hexa) Código de operación (binario)
ASLA Arithmetic Shift Left A 48 0100 1000
ASLB Arithmetic Shift Left B 58 0101 1000
ASRA Arithmetic Shift Right A 47 0100 0111
ASRB Arithmetic Shift Right B 57 0101 0111
CLRA Clear Accumulator A 4F 0100 1111
CLRB Clear Accumulator B 5F 0101 1111
Analice los códigos de operación de estas instrucciones del procesador Motorola 68HC11
La identificación del registro involucrado está incluida en el código de operación
Motorola denomina INHERENTE a los modos de direccionamiento que analizamos como “sin operandos” y
“registro directo” (y alguno más)
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
12
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo absoluto directo
La dirección real del operando acompaña al código de operación. En el campo de datos de la instrucción hallaremos la dirección del operando. El tamaño de la misma será el mismo que el del bus de direcciones.
Dirección de memoria Contenido
….
C002 04
C001 00
C000 7C
…
Ejemplo Motorola 68HC11:
INC $0004
Supongamos que durante la ejecución de un programa el PC adquiere el valor C000. El código de operación almacenado en C000 es 7C (01111100), cuya acción es incrementar en uno el contenido de la dirección indicada en campo de operandos (0004).
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
14
Código de operación Dirección del operando
Formato de instrucción
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo absoluto directo
Ejemplo: INC $0004
Dirección de memoria Contenido
….
C002 04
C001 00
C000 7C
…
0004 0F
0003 20
…
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
15
PC
C000
Dirección de memoria Contenido
….
C002 04
C001 00
C000 7C
…
0004 0F
0003 20
…
Antes de ejecutar la instrucción Después de ejecutar la instrucción
¿Qué pasa si el ancho del bus de direcciones es mayor al ancho del bus de datos?
10
PC
C003
Modo absoluto directo (extendido en 68HC11)Dirección de memoria Contenido
….
C002 04
C001 00
C000 7C
…
¿Cómo obtiene la CPU la DRO del operando?
Supongamos un bus de datos de 8 bits y un bus de direcciones de 16 bits:1. La CPU lee el código de operación (7C) apuntado por el Program
Counter y lo almacena en el Instruction Register. Se incrementa el PC.2. El PC apuntará entonces a la dirección C001 donde se halla la parte
alta de la dirección del operando (00), se copia al TAR (H). El PC se incrementa.
3. Ahora el PC apuntará a C002, que es la dirección donde se encuentra la parte baja de la dirección del operando (04), se copia al TAR (L). El PC se vuelve a incrementar.
4. El Registro Temporal de Direcciones (TAR) contiene la DRO.5. Se copia el TAR al MAR y se procede a leer/escribir en memoria
¿Cuáles son las limitaciones que impone el modo absoluto?
Dirección de memoria Contenido
…. ..
0004 01
0003 20
0002 07
… ..
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
16
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Acc
….
Modo absoluto indirecto Dirección de memoria Contenido
….
04 01
05 FA
06 03
…
F9 00
FA 07
FB 01
..
Se provee la dirección de la dirección del operando.El código de operación se acompaña de la dirección donde se encuentra la dirección del operando.La siguiente sintaxis:
DEC PDP-8 (1965) soporta el modo absoluto indirecto.En este procesador las direcciones de memoria 0010-0017 al utilizarse con modo indirecto además se autoincrementaban. El Zilog Z80 (1976) -evolución del PDP-8 en un solo chip- también lo soporta. El Motorola 68HC11 no posee este modo, tampoco Intel (32/64 bits)
Load Acc, [5]
Haría que se cargue en el registro Acc el contenido de la dirección almacenada en la dirección 5.Si en la dirección 05 está almacenado el valor FA, entonces el contenido de FA –que es 07- se cargará en el registro Acc.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
17
Código de operación Dirección de la dirección del operando
Formato de instrucción
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
07
Modo absoluto indirectoDirección de memoria Contenido
….
A1 7C
A2 07
A3 04
…
Considere la ejecución del siguiente ejemplo
Supongamos un bus de datos de 8 bits y de direcciones de 8. Existe un acumulador llamado A y la instrucción LD carga el operando del segundo argumento en el primero. En este caso cargará en el acumulador A el operando cuya dirección está contenida en 05.
LD A, [05]
1. La CPU lee el código de operación apuntado por el Program Counter y lo almacena en el Instruction Register. El PC se incrementa.
2. El PC apuntará entonces a la dirección donde se halla la dirección del operando. Se copia al RTD. El PC se vuelve a incrementar.
3. El RTD se copia al MAR y se lee la memoria. En el bus de datos la memoria colocará el valor A2 (MBR).
4. El MBR se copia al RTD nuevamente. Se repite el paso anterior: el RTD se copia al MAR y se lee la memoria. En el bus de datos la memoria colocará el valor 07 (MBR).
5. Se copia el MBR al acumulador A.Podría obviarse el uso del RTD dado que los buses son del mismo tamaño.
Dirección de memoria Contenido
…. ..
04 01
05 A2
06 03
… ..
No se detalla el área de memoria donde está almacenado el programa
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
18
Modo absoluto indirecto
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
19
Opcode X I Modo/desplazamiento
15 12 11 10 9 0
Ejemplo: Hewlett-Packard 3000
Manejaba instrucciones de 16 bitsFormato típico de instrucción de carga/almacenamiento:
El bit I (Indirect mode) en 1 indicaba que la referencia a memoria debía interpretarse en modo indirecto.
DB
DB+4 7
DB+7
LOAD DB+4,I
Celda indirecta
El desplazamiento (+4) apunta a la celda indirecta en P+4. La celda indirecta contiene una dirección relativa +3, esto apunta a una ubicación tres direcciones adelante, o P+7. El contenido de P+7 es el que se carga en el registro.
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo Registro Indirecto
Dirección de memoria Contenido
E0112230 00
E0112231 00
E0112232 00
E0112233 07
La dirección del operando se halla en un registro de CPU. La instrucción especifica cuál es el registro.
Registro Contenido
r0 ..
r1 E0112230
En el Motorola 68HC11 este método se implementa a través de la pila
LDR r0, [r1]
r0 y r1 son registros de uso general en ARM de 32 bitsLDR es una instrucción de carga (LoaD into Register)
• r0 se cargará con el valor contenido en la dirección de memoria indicada en r1
• En esta instrucción r0 es el registro de destino y r1 es el registro base
Ejemplo con procesador ARM
Registro Contenido
0 ?
1 E0112230
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
20
Código de operación Registro donde se encuentra la dirección del operando
Formato de instrucción
0 00000007
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo registro indirecto a través de registro de pila
Cuando la dirección del operando no se conoce sino hasta en la ejecución, podemos también emplear este modo.Utilizando un registro de pila (Stack Pointer, Stack Segment, etc) los operandos se pueden colocar en la pila (push) oquitar de ella (pull, pop). Estas operaciones además incrementan o decrementan el registro de pila.Este método puede emplearse para pasar parámetros a una subrutina con las precauciones del caso.Es requisito inicializar el puntero de pila antes de emplearla.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
22
Stack Pointer
…..
ORG $C000
..
PSHA
PSHB
Dirección Contenido
…. ..
00FB ..
00FC ..
00FD ..
00FE ..
00FF ..
…
Program Counter
C000
A B
F1 99
Considere el siguiente ejemplo del HC11:Los puntos … indican contenido desconocido o no inicializado
Registros de CPU Memoria principal
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
p/e: LDS #$00FF
Modo indirecto a través de registro de pila
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
26
Stack Pointer
00FF
ORG $C000
LDS #$00FF
PSHA
PSHB
Dirección Contenido
…. ..
00FB ..
00FC ..
00FD ..
00FE ..
00FF ..
…
Program Counter
C008
A B
F1 99
El Stack Pointer siempre apunta a la siguiente dirección disponible de la pila
Memoria principal
PSHA: Almacena el contenido del acumulador A en el área de pila (dirección contenida en el SP) y decrementa el SP
00FE
La operación no modifica el registro acumulador A
Dirección Contenido
…. ..
00FB ..
00FC ..
00FD ..
00FE ..
00FF F1
…
Modo indirecto a través de registro de pila
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
27
Stack Pointer
00FE
ORG $C000
LDS #$00FF
PSHA
PSHB
Dirección Contenido
…. ..
00FB ..
00FC ..
00FD ..
00FE ..
00FF F1
…
Program Counter
C009
A B
F1 99
El Stack Pointer siempre apunta a la siguiente dirección disponible de la pila
Memoria principal
PSHB: Almacena el contenido del acumulador B en el área de pila (dirección contenida en el SP) y decrementa el SP
00FD
La operación no modifica el registro acumulador B
Dirección Contenido
…. ..
00FB ..
00FC ..
00FD ..
00FE 99
00FF F1
…
Modo base + desplazamiento
El offset puede admitir un formato signado o no signado dependiendo del procesador
No signado (positivo): solo permite avanzar hacia direcciones de memoria posteriores a la base.Signado: permite obtener direcciones hacia adelante o hacia atrás desde la posición de la base.
Base
Memoria
Base
Memoria
Offset no signado Offset signado
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
28
¿Qué relación hay entre el tamaño del offset admitido y la cantidad de direcciones hacia las que se puede
saltar (hacia adelante o hacia atrás)?
Modo base + desplazamiento
La dirección del operando se obtiene sumando el contenido de un registro y un offset que se indica en el campo de operandos de la instrucción. Distintos modelos de procesador implementan variantes de este modo.
En la arquitectura x86 se puede emplear –por ejemplo- el registro BP (Base Pointer) de 16 bits o EBP de 32 bitsEl Base Pointer se suele emplear como “frame pointer” o puntero al comienzo del área de datos de una subrutina.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
29
Por ejemplo:MOV BP, BP+4
Carga en el registro BP el contenido de BP+4.
RBP (64 bits)EBP (32 bits)
BP (16 bits)
Operación Registro Desplazamiento
Registros
BP
Memoria
+
MOV BP BP +4
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo base + desplazamiento
r1
C0 00 00 05Dirección Contenido
C0 00 00 09 15 06 20 13
El procesador PowerPC solo admite este modo para transferencias registro <-> memoria.El desplazamiento se indica en uno de los campos de la instrucción.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
30
Por ejemplo:lwz r12,4(r1)
Carga en el registro r12 el contenido de r1+4
Opcode Registro destino Registro origen Desplazamiento
0 5 6 10 11 15 16 31
100000 01100 00001 00000000 00000100
r12 +0004
+ C0000005
C000000915 06 20 13
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo Inmediato o literal (relativo al PC, offset cero)
Dirección de memoria Contenido
C000 4F
C001 C6
C002 0F
El dato acompaña al código de operación. La dirección se obtiene sumando un offset cero al Program Counter. En otras palabras, la DRO será la contenida en el PC.
¿Cuáles son las limitaciones que impone el modo inmediato?
Para que el ensamblador de HC11 emplee modo inmediato debe utilizarse el prefijo # (numeral) delante del operandoORG $C000
Inicio CLRA
LDAB #$0F
…
Acumulador B
0F
¿Cómo obtiene CPU la DRO del operando?
Supongamos un bus de datos de 8 bits y de direcciones de 161. La CPU lee el código de operación (C6) apuntado por el Program
Counter (PC=C001) y lo almacena en el Instruction Register. El PC se incrementa.
2. La instrucción se decodifica.3. El PC está apuntando a la dirección C002. Allí es donde se halla
el operando 0F. Se copia del PC->MAR, se envía la señal READ por el Bus de Control. Luego del tiempo de acceso de la memoria el dato estará disponible en el MBR.
4. Se copia el MBR al acumulador B.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
31Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo Inmediato o literal (relativo al PC, offset cero)
Memoria Contenido
0205 ..
0204 ..
0203 6A
0202 74
0201 ..
Ejemplo con microcontrolador Intel 8051
El ensamblador de Intel 8051 requiere que se utilice el prefijo # (numeral) delante del operando
para indicar modo inmediato
MOV A, #6AH
El microcontrolador Intel 8051 posee un registro acumulador de 8 bits llamado “A”
Instrucción Código de operación Bytes Ciclos
MOV A, #6AH 74H 2 1
Acumulador A
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
32
El assembler de Intel dicta que los valores hexadecimales se indican con el sufijo “H”. Si el valor comienza con una letra debe anteponerse un cero. Por ejemplo, ABH no es válido, mientras
que 0ABH sí lo es.
6APC
PC
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo relativo al contador de programa (offset distinto de cero)
Instrucción Dirección de memoria
Ensamblado
….
CLRA C000 4F
LDAB $2002 C001 F6 20 02
INCB C004 5C
BCC sinCarry C005 24 01
INCA C007 4C
INX C008 08
La dirección se obtiene sumando un offset al Program Counter. Se utiliza en instrucciones de salto (Branch).Dado que el offset se expresa en complemento a la base, podemos restar del PC sumándole un número negativo.Este es el modo que se utiliza para alterar el flujo de ejecución, sea bajo cierta condición o de modo incondicional,permitiendo implementar estructuras de alto nivel como if, for, while, etc. El offset se indica en el campo de operandos.
¿Qué modo de direccionamiento se utiliza en cada instrucción?
ORG $C000
Inicio CLRA
LDAB $2002
aumento INCB
BCC sinCarry
INCA
sinCarry INX
Observe el uso del modo relativo en la siguiente porción de código del Motorola HC11.
¿Qué offset correspondería para que salte a “aumento” en lugar de a “sinCarry”?
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
33Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo relativo al contador de programaDirección de
memoriaContenido Instrucción
….
C000 4F CLRA
C001 F6 LDAB
C002 20 20
C003 02 02
C004 5C INCB
C005 24 BCC
C006 01
C007 4C INCA
C008 08 INX
C009
Analicemos la ejecución desde que PC=C005
Observe que aquí cada byte está en un renglón
1. La CPU lee el código de operación (24) apuntado por el ProgramCounter (PC=C005) y lo almacena en el Instruction Register. El PC se incrementa.
2. La instrucción se decodifica.3. El PC apuntará a la dirección C006. Allí es donde se halla el
operando 01. Se lee el contenido de C006 y se incrementa el PC. (Ahora PC=C007).
4. Se evalúa si el flag Carry en la ALU es cero (carry clear).a) Si C=0 se sumará el offset 01 al PC (PC+01=C008)b) Si C=1 no se altera el PC (PC=C007)
El ensamblador calcula el offset comparando la dirección de la etiqueta que hayamos puesto con la dirección de la
instrucción que siga a la de salto. El offset siempre se aplicará cuando CPU ya haya leído la dirección de memoria donde está almacenado el mismo.
sinCarry ->
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
34
Modo relativo al contador de programa Dirección de memoria
Contenido Instrucción
….
C000 4F CLRA
C001 F6 LDAB
C002 20 20
C003 02 02
C004 5C INCB
C005 24 BCC
C006 FD aumento
C007 4C INCA
C008 08 INX
C009
Analicemos la ejecución desde que PC=C005 si el salto lo efectuara a la etiqueta aumento en lugar de sinCarry
FD= 1111 1101= -3(los offset se expresan con números signados)
1. La CPU lee el código de operación (24) apuntado por el ProgramCounter (PC=C005) y lo almacena en el Instruction Register. El PC se incrementa.
2. La instrucción se decodifica.3. El PC apuntará a la dirección C006. Allí es donde se halla el
operando FD. Se lee el contenido de C006 y se incrementa el PC. (Ahora PC=C007).
4. Se evalúa si el flag Carry en la ALU es cero (carry clear).a) Si C=0 se sumará el offset FD al PC (PC+FD=C004)b) Si C=1 no se altera el PC (PC=C007)
¿Cómo calculó el offset el ensamblador?La etiqueta corresponde a la dirección C004.
Luego de leer la instrucción de salto y el offset el PC tendrá el valor C007. Se resta entonces C004-C007 = -3
y se expresa el resultado negativo en complemento a la base
aumento ->
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
35
Modo Indexado o de registro base
El modo indexado pertenece a la categoría de modos relativos. La dirección del operando se obtiene sumando un índice y un offset. Uno de estos valores o ambos están en registros.
El registro base tendrá el mismo tamaño que el bus de direcciones. Algunos procesadores admiten offset positivo y negativo, otros solo positivo.
Offset
07
+
DRO
3107
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
36
Este modo de direccionamiento es muy bueno para recorrer vectores, o varias posiciones de memoria consecutivas
Registro índice
3100
El IA-32 admite el formatoBase + (Índice * escala) + desplazamientoUtilizando uno entre varios registros como base y como índice. La escala es un literal (inmediato) y el desplazamiento es de valor de 0, 8 o 32 bits.• Desplazamiento apunta al comienzo del vector.• Índice es el número del elemento• Escala indica el tamaño del elemento.
El Motorola MC6805 cuenta con registro índice y permite almacenar el offset en otro registro.
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo Indexado o de registro base
Registro índice IX
ORG $C000
LDX #$2000
LDAA 1,x
INX
Ejemplo con Motorola 68HC11: Dirección de memoria
Contenido
…
2000 07
2001 08
2002 09
…
LDX # C000 CE
20 C001 20
00 C002 00
LDAA C003 A6
1,x C004 01
INX C005 08
+
El microcontrolador Motorola 68HC11 posee dos registros índice:
IX, IY, ambos de 16 bits.El offset es fijo, sólo se puede leer
desde memoria y debe ser positivo.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
37
Acc A
08
01
2001PC
C000
2000
¿Qué hace el programa?
Si se tratara de recorrer un vector, ¿qué tendría que hacer para apuntar
al siguiente elemento?Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo Indexado o de registro base
La dirección real del operando (DRO) se obtiene sumando el registro índice (base) + offset
Registro índice IX
4000
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Offset = 01H
Registro índice IX
4001
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Registro índice IX
4002
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Registro índice IX
4003
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
4000H + 01H = 4001H 4001H + 01H = 4002H 4002H + 01H = 4003H 4003H + 01H = 4004HModos de direccionamiento - Arquitectura de Computadoras -
Jaír Hnatiuk - Unlam (2020)38
Modo Indexado o de registro base
La dirección real del operando (DRO) se obtiene sumando el registro índice (base) + offset
Registro índice IX
4000
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Offset = 02H
Registro índice IX
4001
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Registro índice IX
4002
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
Registro índice IX
4003
Memoria Contenido
4000 17
4001 28
4002 39
4003 4A
4004 5B
4005 6C
4007 7D
4000H + 02H = 4002H 4001H + 02H = 4003H 4002H + 02H = 4004H 4003H + 02H = 4005HModos de direccionamiento - Arquitectura de Computadoras -
Jaír Hnatiuk - Unlam (2020)39
Modo autoincrementado/autodecrementado
• Autoincrementado: El hardware incrementa automáticamente el registro base.• Post incrementado: Usa el registro base y lo incrementa después.• Pre incrementado: Incrementa el registro y lo usa después.
• Autodecrementado: El hardware decrementa automáticamente el registro base.• Post decrementado: Usa el registro base y lo decrementa después.• Pre decrementado: Decrementa el registro y lo usa después.
En ARM el preincremento se indica con un signo de admiración luego del campo de datos.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
40
Algunos procesadores permiten autoincrementar/decrementar un registro antes o después de usarloResulta particularmente útil para recorrer vectores. Es una variante de base más desplazamiento.
STD 0,Y++
El Motorola 6809 admite autoincremento y autodecremento. Luego de usarse el registro base se incrementa en uno o dos, facilitando el recorrido de vectores de elementos de 8 y 16 bits. El predecremento lo efectúa antes.
Por ejemplo:
Guarda el contenido del registro D (16 bits) en la dirección apuntada por Y. Luego efectúa Y = Y+2 (porque D es de 2 bytes) Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo paginado
La dirección del operando se obtiene sumando el contenido de un registro base (de página) y un offset.
El registro de página tendrá el mismo tamaño que el bus de direcciones, pero se subdivide en dos campos: nro de página y renglón. La parte del “renglón” en el registro de página se compone de ceros.
Registro de página
Nro de página Renglon
Si se aplica un offset cero, se obtiene la dirección de inicio de la página
Instrucción Offset
+ Dirección real del operando
El tamaño del offset es el mismo que el de la sección “renglón” del registro de
página
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
41
Modo paginado
El Motorola 68HC11 posee un modo paginado muy particular llamado “Directo”
El HC11 no posee registro de página. En modo Directo actúa como si tuviera un registro de página con el valor 0000. Por lo tanto podemos decir que el modo directo del HC11 es un “paginado en página cero”.
Registro de página (inexistente)
00 00
Se provee el offset en el campo de operandos de la instrucción
Instrucción Offset
+ Dirección real del operando
Ejemplo:
LDAA $05
Cargar el acumulador A con el contenido de la dirección formada por (página)+05H.
La DRO es 0005HEl campo de operandos solo contiene la parte baja de la dirección.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
42
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo segmentado
La dirección se obtiene sumando el contenido de un registro de segmento base y un offset. (Modo real)
Los procesadores 8086/8088 tienen cuatro registros de segmentos (CS,DS,SS,ES) todos de 16 bits, pero el bus dedirecciones es de 20 bits.
Registro CS
Dirección base del segmento de 16 bits 0000
+
Dirección de desplazamiento de 16 bits
=
Dirección física de 20 bits
Un segmento es un bloque de 64kB de memoria que puede comenzar en cualquier punto del 1MB de espaciodireccionable por CPU, siempre y cuando comience en una frontera de 16 bytes (o sea los 4 bits menos significativosson cero).
Para localizar una posición de memoria concreta, la dirección de segmento se combina con otra dirección querepresenta el desplazamiento. La dirección del segmento representa los dieciséis bits más significativos (cuatro dígitoshexadecimales) de la dirección física correspondiente al inicio del segmento. La dirección de desplazamiento sondieciséis bits adicionales que representan la distancia desde el principio del segmento hasta la dirección física deseadadentro del segmento (en el ejemplo el offset está en el registro IP).
IP (Puntero de instrucción)
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
43Todas las marcas mencionadas pertenecen a sus respectivos dueños.
Modo segmentado
A000 0
+
A0B0
=
AA0B0
El puntero de instrucción IP (Instruction Pointer) de 16 bits apunta al desplazamiento, dentro de la memoria, de lasiguiente instrucción que hay que ejecutar. El IP siempre hace referencia al registro CS (segmento de código); portanto, la dirección física de la siguiente instrucción se forma combinando el segmento de código y el puntero deinstrucción.El IP siempre contiene la dirección de desplazamiento de la siguiente instrucción mientras que el registro CS siemprecontiene la dirección del segmento. Esta dirección se muestra en lenguaje ensamblador con el formato CS:IP.
IP
El segmento de 64 kB estará entre las direcciones A0000 y AFFFF
El programador de assembler no está obligado a expresar las direcciones
físicas, pudiendo emplear la notaciónA000:A0B0 (CS:IP)
Ejemplo:
Para formar la dirección física de 20 bits correspondiente a la siguiente instrucción, la dirección de desplazamientode 16 bits almacenada en el IP (A0B0) se suma a la dirección de segmento contenida en el registro CS (A000)después de desplazar ésta cuatro bits a la izquierda (A0000), como se muestra en la figura. Los cuatro bits menossignificativos de la dirección de segmento se consideran siempre 0000.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
44
Registro CS
Ejemplo de modos de direccionamiento en IA-32
Ejemplo con un procesador de la familia Intel IA-32
Tabla TIMES 10 DD 0 ; Reserva 10 double words (4 bytes c/u) inicializado en 0
MOV EBX, #Tabla ; Inmediato: La dirección de Tabla se guarda en EBX
MOV [EBX], 110H ; Registro indirecto: Tabla[0] = 0x110
ADD EBX, 4 ; Registro directo: EBX = EBX + 4
MOV [EBX], 123H ; Registro indirecto: Tabla[1] = 0x123
DW es una directiva al ensamblador que declara uno o más Words, en este caso inicializados en cero.EBX es un registro base de un CPU Intel de 32 bitsMOV copia el valor del segundo argumento en el primero. ADD suma los dos argumentos y guarda el resultado en el primero.
El modo registro indirecto se usa generalmente para variables que contienen varios elementos, por ejemplo vectores.
Note el uso de corchetes en ambas arquitecturas para indicar modo indirecto
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
45
Todas las marcas mencionadas pertenecen a sus respectivos dueños.
EBX (32 bits)
??
Ejemplo de modos de direccionamiento en IA-32
Supongamos que Tabla se almacena a partir de AA00BB10 (32 bits).
EBX (32 bits)
AA00BB10
MOV EBX, #Tabla
1. Copia la dirección de la reserva de Tabla en EBX
Memoria Contenido
AA00BB10 ??
AA00BB11 ??
AA00BB12 ??
AA00BB13 ??
AA00BB14 00
AA00BB15 00
MOV [EBX], 110H
2. Copia el valor 110H en la dirección contenida en el registro EBX. Notar el almacenamiento Little Endian.Se almacena el byte menos significativo (son cuatro: 00 00 01 10) en la dirección más baja.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
46
10
01
00
00
Ejemplo de modos de direccionamiento en IA-32
Supongamos que Tabla se almacena a partir de AA00BB10 (32 bits).
EBX
AA00BB10
ADD EBX, 4
3. Suma 4 al contenido del registro EBX
Memoria Contenido
AA00BB12 00
AA00BB13 00
AA00BB14 ??
AA00BB15 ??
AA00BB16 ??
AA00BB17 ??
MOV [EBX], 123H 4. Copia el valor 123H en la dirección contenida en el registro EBX.
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
47
23
01
00
00
AA00BB14
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
48
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
…determine la dirección y el valor del operando para cada modo de direccionamiento.• La primera instrucción carga el acumulador. • El CodOp (8 bits) indica el modo de
direccionamiento• El campo de dirección de la instrucción tiene el
valor 500 (puede que no siempre lo utilice)• El ancho de palabra de memoria es de 16 bits
Dada una computadora ficticia que cuenta con los registros y memoria indicados….
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
1. Inmediato/literal2. Registro3. Registro indirecto4. Absoluto directo5. Indirecto6. Relativo7. Indexado8. Autoincrementado (reg. Indirecto)9. Autodecrementado (reg. Indirecto)
Basado en un ejercicio de Ali Asghar Manjotho. Department of Computer Systems Engineering, MUET-Jamshoro.
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
49
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo inmediato se cargará el valor 500 en el registro AC.
1. Inmediato/literal
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
500
Dirección efectiva = 201 (dada por el PC)
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
50
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. Instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo registro se cargará en el registro AC el valor del registro R1 (el único mencionado).No se accede a memoria principal.
2. Registro
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
400
Dirección efectiva = ninguna
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
51
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo registro indirecto se cargará en el acumulador el valor de la dirección de memoria contenida en R1.
3. Registro indirecto
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
700
Dirección efectiva = 400
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
52
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo absoluto directo la dirección real del operando acompaña al código de operación.
4. Absoluto directo
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
800
Dirección efectiva = 500
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
53
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo indirecto la dirección de la dirección real del operando acompaña al código de operación.Dirección de la dirección del operando = 500Dirección del operando = 800
5. Indirecto
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
300
Dirección efectiva = 800
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
54
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
En modo relativo se requiere un registro base y un offset. El registro base es el PC. El offset es 500.La instrucción tiene 3 bytes de largo (código de operación + longitud del offset)
6. Relativo
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
325
Dirección efectiva = 200 + 500 + 3 = 703
Si considera el valor del PC después de haber leído la instrucción completa no debe
sumar el largo de la misma.
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
55
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
El registro índice tiene el valor 100La base/offset es 500.La dirección se obtiene de sumar: base + desplazamiento.
7. Indexado
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
900
Dirección efectiva 100 + 500 = 600
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
56
Dirección Contenido
200 Cargar AC Modo
201 500
203 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
Se calcula igual que para registro indirecto, solo que el valor del registro R1 se incrementa luego de la lectura.Dado que son palabras de 2 bytes, incrementa R1 en 2.
8. Autoincrementado (registro indirecto)
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
700
Dirección efectiva = 400
R1
402
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
57
Dirección Contenido
200 Cargar AC Modo
201 Dirección = 500
202 Sig. instrucción
… ..
398 450
400 700
…
500 800
…
600 900
703 325
800 300
Se calcula igual que para registro indirecto, solo que el valor del registro R1 se decrementa luego de la lectura.Dado que se trata de palabras de 16 bits, se decrementa en 2 el registro R1.
9. Autodecrementado (registro indirecto)
PC = Program CounterR1 = RegisterXR = Index RegisterAC = Accumulator
PC
200
R1
400
XR
100
AC
AC
700
Dirección efectiva = 400
R1
398
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
58
Formato de instrucción
Describir el formato requerido para una instrucción genérica de una computadora de cuatro buses, con tamaños de palabra de 32 bits en los buses de datos y de direcciones, si la mencionada instrucción tuviese sus dos operandos en memoria. Asumir que el código de operación de la instrucción tiene siempre 16 bits. Analizar las diferencias de formato que se producen en el caso en que la instrucción tenga: a.- Sus dos operandos expresados mediante direccionamiento absoluto.b.- Sus dos operandos expresados mediante direccionamiento relativo a un registro base dado, con desplazamiento de 16 bits sin signo. c.- Cada uno de los dos operandos en uno de los dos modos antes mencionados.
Código de operación (16)
Dirección primer operando (32) Dirección segundo operando (32)
Código de operación (16)
Arg. primer operando (16)
Arg. segundo operando (16)
Código de operación (16)
Dirección primer operando (32)Arg. segundo operando (16)
a.
b.
c.
¿Qué cambia en la ejecución según el formato de instrucción?
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
59
Formato de instrucción
La computadora de la página anterior tiene un formato de instrucción de 32 bits con operandos en registros. La misma cuenta con 256 registros accesibles en la CPU, y cada uno de sus dos operandos reside en alguno de ellos. ¿Cuál sería la forma más provechosa de utilizar el formato de este modelo de instrucción?
Código de operación (16) Registro 1 (8 bits) Registro 2 (8 bits)
Ejercicio
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
60
Formato de instrucción
Describir el formato requerido para una instrucción genérica de una computadora de cuatro buses, con tamaños de palabra de 8 bits en el bus de datos y 32 en el de direcciones, si la mencionada instrucción tuviese sus dos operandos en memoria. Considerando operandos y códigos de operación de 16 bits, analizar las diferencias de formato y de ejecución en el caso en que la instrucción tenga:a.- Sus dos operandos expresados mediante direccionamiento absoluto.b.- Sus dos operandos expresados mediante direccionamiento relativo.c.- Cada uno de los dos operandos en uno de los dos modos antes mencionados.d.- Uno de sus operandos en un registro de una interfaz de entrada salida
Las diferencias de formato según la ubicación y direccionamiento son: a.- La instrucción es [CodOp: 16][DIR 1er op 32] [DIR 2do op 32]b.- En el campo de operandos no hay direcciones sino referencias (offsets) que se suman al contenido del registro asignado como base. El tamaño del offset no fue definido en el enunciado. Se puede suponer un tamaño de 8 o 16 bits, por ejemplo. c.- Uno de los elementos del campo de operando es una dirección, el otro es una referencia. d.- Uno de los elementos del campo de operando es una dirección de memoria, el otro es una dirección de entrada salida. En las máquinas de cuatro buses, los registros de E/S tienen espacio de direccionamiento aparte.
Conclusiones
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
61
Sin dudas se trata de un tema complicado. Para comprenderlo es importante lograrabstraerse de las implementaciones particulares de cada fabricante y modelo a finde captar los principios comunes a todos.
Se han incluido múltiples ejemplos de los modos admitidos por distintas CPU(algunas más modernas que otras) a fin de ilustrar cada caso y a la vez darperspectiva al asunto, pero no es tan importante centrarse en las particularidadesde cada implementación
Si bien en las prácticas empleamos el Motorola 68HC11, queda claro que es unprocesador pequeño y limitado. Esto es bueno para que la tarea de conocerlo nosea abrumadora, pero en la mente del alumno no debe quedar el concepto de queotros procesadores tienen las mismas limitaciones y simpleza.
BibliografíaMUR00 Murdocca-Heuring. Principios de arquitectura de computadoras. Pearson Editores, 2000. ISBN 987-
9460-69-3
STA05 William Stallings, Organización y arquitectura de computadoras, séptima edición. Pearson Educación,
2005, ISBN 978-84-832-2858-6
FLO06 Thomas Floyd. Fundamentos de sistemas digitales. Pearson Educación, 2006 ISBN 978-84-832-2720-6
UMA08 K. Udaya Kumar – B. S. Umashankar. The 8085 Microprocessor Architecture, Programming and
Interface, 2008, Pearson Education, ISBN 978-81-7758-455-4
POW05 PowerPC User Instruction Set Architecture. Version 2.02 (January 28, 2005)
MANJ Addressing Modes by Ali Asghar Manjotho. Department of Computer Systems Engineering, MUET-Jamshoro.
Documentación online de Apple OS X.https://developer.apple.com/library/content/documentation/DeveloperTools/Reference/Assembler/000-Introduction/introduction.html#//apple_ref/doc/uid/TP30000851-CH211-SW1
Modos de direccionamiento - Arquitectura de Computadoras -Jaír Hnatiuk - Unlam (2020)
62