1 Estructura y Tecnología de Computadores Módulo C. Arquitectura del procesador Tema 4. Modos de direccionamiento y tipos de datos José Manuel Mendías Cuadros Dpto. Dpto. Arquitectura de Computadores y Automática Universidad Complutense de Madrid 2 contenidos 1. Organización de la información en memoria Organización de la memoria. Alineamiento. Ordenamiento 2. Tipos de datos Contenidos de la memoria. Caracterización de los tipos de datos. Representación de datos numéricos: enteros, reales y decimales. Representación de caracteres. Representación de información lógica o booleana. 3. Registros y pila de la arquitectura Registros principales. Códigos de condición. Pila del sistema 4. Modos de direccionamiento Definición. Modos de direccionamiento simples. Modos de direccionamiento complejos 5. Aplicaciones de los modos de direccionamiento Acceso a variables atómicas. Acceso a elementos de un array. Primitivas de pila NOTA: al final del tema 3, se estudiarán algunos ejemplos de los modos de direccionamiento utilizados en procesadores comerciales estructura y tecnología de computadores 3 introducción Ö El funcionamiento de un computador está determinado por las instrucciones que ejecuta. Ö El área que estudia las características de ese conjunto de instrucciones se denomina arquitectura del procesador o arquitectura del repertorio de instrucciones y engloba los siguientes aspectos: Ø Formato de los datos ð Tipos de datos que puede manipular el computador a nivel de lenguaje máquina Ø Registros de la arquitectura ð Conjunto de registros visibles al programador (de datos, direcciones, estado, PC) Ø Modos de direccionamiento ð Forma de especificar la ubicación de los datos y modos para acceder a ellos Ø Repertorio de instrucciones ð Operaciones que se pueden realizar y sobre qué tipos de datos actúan Ø Formato de instrucción ð Descripción de las diferentes configuraciones de bits que adoptan las instrucciones máquina estructura y tecnología de computadores 4 1. organización de la información en memoria Organización de la memoria (*) Ö Los datos e instrucciones que manipula un programa se almacenan en la memoria Ø Temporalmente se pueden almacenar datos en los registros de la CPU para su manipulación: el acceso a un registro es mucho más rápido que el acceso a memoria Ø Eventualmente pueden solicitarse datos a los dispositivos de E/S Ö Organización de la memoria en palabras Ø La memoria se organiza en grupos de n bits llamados palabras de memoria ð El ancho de palabra suele coincidir con el número de bits utilizados para representar números. Los computadores actuales utilizan anchos de palabra entre 16 y 64 bits Ø Cada palabra de memoria tiene asignado un identificador llamado dirección de memoria ð El rango de direcciones de memoria es un número entre 0 y 2k-1 ð Esas 2k direcciones distintas constituyen el espacio de direcciones del computador ð Para especificar una dirección dentro de ese rango se necesitan k bits de dirección MEMORIA EJEMPLO 0 1 Ø Ø Ø Ø Ancho de palabra: 32 bits (4 bytes) Nº de palabras en memoria: 4 M palabras (222) Espacio de direcciones: 222 palabras Nº de bits de dirección necesarios: 22 Dirección Ö Computador de 32 bits con 16 Mbytes de memoria w w w Palabra 0 Palabra 1 w w w i w w w 2k-1 Palabra i w w w (*) Desde el punto de vista del programador estructura y tecnología de computadores w w w n bits w w w Palabra 2k-1 5 1. organización de la información en memoria Ö Sin embargo, es posible que la arquitectura permita una mayor resolución en la información que es individualmente direccionable: Ø Se llama unidad direccionable, a la mínima cantidad de información que tiene una dirección única Ø Es común que en un computador de ancho de palabra 16, 32 ó 64 bits, el tamaño de la unidad direccionable sea de 1 byte (8 bits) Ö Cuando el ancho de palabra y tamaño de la unidad direccionable no coinciden aparecen 2 problemas: Ø Alineamiento: cómo relacionar las direcciones de las palabras con las direcciones de las unidades direccionables Ø Ordenamiento: cómo repartir el contenido de una palabra en un conjunto consecutivo de unidades direccionables Alternativas de alineamiento Dirección del byte Dirección del byte Ö Palabras no alineadas: permitir que una palabra tenga cualquier dirección 0 3 0 1 2 7 4 5 6 7 9 10 11 13 14 15 Ø 4 El interfaz de memoria debe secuenciar los accesos (ya que podrán requerirse varios para obtener la información) Ö Palabras alineadas: limitar las direcciones de palabra según su tamaño Ø Ø Los bytes en cualquier dirección, las palabras de 16 bits en direcciones pares, las de 32 bits en direcciones múltiplos de 4... Se desperdicia memoria 1 2 5 6 8 9 10 11 8 12 13 14 15 12 k k 3 ... ... 2 -4 2 -3 2 -2 2 -1 2k-4 2k-3 2k-2 2k-1 palabras alineadas palabras no alineadas k k estructura y tecnología de computadores 6 1. organización de la información en memoria Alternativas de ordenamiento Ö Big-Endian: los bytes se numeran comenzando por el menos significativo, una palabra tiene la misma dirección que su byte más significativo Ö Little-Endian: los bytes se numeran comenzando por el más significativo, una palabra tiene la misma dirección que su byte menos significativo Dirección del byte Dirección del byte Palabra 0 0 1 2 3 Palabra 0 3 2 1 0 Palabra 4 4 5 6 7 Palabra 4 7 6 5 4 w w w w w w Palabra 2k-4 2k-4 2k-3 2k-2 2k-1 Big-Endian w w w w w w Palabra 2k-4 2k-1 2k-2 2k-3 2k-4 Little-Endian Ö Big-endian Ø Ø orden coherente facilita la ordenación y el volcada Ö Little-endian Ø Ø facilita la aritmética facilita las conversiones de tamaño estructura y tecnología de computadores Ö Queremos almacenar en la dirección 184, el número 12.345.678 codificado en BCD: Ø Ø Ø 1 dígito BCD ocupa 4 bits 2 dígitos BCD por byte: 12-34-56-78 la memoria es direccionable por bytes Ö Big-Endian: 184 185 186 187 12 34 56 78 Ö Little-Endian: 187 186 185 184 12 34 56 78 184 185 186 187 78 56 34 12 7 2. tipos de datos Contenidos de la memoria EJEMPLO Ö El contenido de una palabra de memoria es una colección de 0’s y 1’s En una palabra de memoria de 32 bits se puede codificar Ø Es el computador el encargado de interpretar lo que representa en cada momento Ö Depende de cómo se interprete esa palabra, ésta puede representar: Ø Datos ð Numéricos a) Un número entero entre -(231-1) y +(231-1) codificado mediante magnitud y signo b31 ... b30 b1 b0 b1 b0 b = 0 para nos positivos Bit de signo b31 = 1 para nos negativos 31 Magnitud = b30x230 + ··· + b 1x21 + b0x20 b) 32 dígitos Booleanos o lógicos ü Enteros (Magnitud y signo, C’1, C’2, ...) ü Reales (Punto fijo, Punto flotante, ...) ü Decimales (BCD, Exceso-3, ...) ð Booleanos o lógicos b31 ... b30 bk = 0 ⇒ FALSE bk = 1 ⇒ TRUE 0 ≤ k ≤ 31 c) Cuatro caracteres ASCII ü TRUE, FALSE ð Caracteres 8 bits ü Letras, dígitos decimales, signos puntuación ü Representación más común: ASCII Ø Instrucciones ð Código de operación + Información de direccionamiento Carácter ASCII 8 bits 8 bits Carácter ASCII Carácter ASCII 8 bits Carácter ASCII d) Una instrucción máquina 8 bits Código de Operación 24 bits Información de Direccionamiento estructura y tecnología de computadores 8 2. tipos de datos Caracterización de los tipos de datos Ö Un tipo de datos es una sucesión de bits caracterizada por dos propiedades: Ø Su dominio, que es el conjunto de valores que el dato puede tomar y depende de: ð El tipo de representación Limita el rango y la precisión ð El tamaño o número de bits utilizado para la representación Ø Las operaciones que pueden realizarse sobre ese dato Ö Se dice que una arquitectura soporta un determinado tipo de datos si Ø Tiene asignada al menos una representación de ese tipo de datos Ø Dispone de un conjunto de operaciones para manipular esa representación Tipos de datos Numéricos Enteros Representaciones: • Magnitud y signo • C’1 • C’2 • ... Reales Decimales Representaciones: • Punto fijo • Punto flotante • ... Representaciones: • BDC • Exceso-3 • ... estructura y tecnología de computadores Lógicos Representaciones: • Compacto • No compacto Caracteres Representaciones: • ASCII • EBCDIC • ... 9 2. tipos de datos Representación de datos numéricos enteros Ö Magnitud y signo (MS) MS C’1 C’2 POSITIVOS 0000 0001 0010 0011 0100 0101 0110 0111 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 NEGATIVOS Ejemplo (tamaño = 4 bits) Ø Simétrico Ø Dos representaciones para el cero: ð + 0 → 000...00 ð - 0 → 100...00 Ø Rango (tamaño = n bits) ð -(2n-1-1) ≤ x ≤ +(2n-1-1) 1000 1001 1010 1011 1100 1101 1110 1111 -0 -1 -2 -3 -4 -5 -6 -7 -7 -6 -5 -4 -3 -2 -1 -0 -8 -7 -6 -5 -4 -3 -2 -1 b3 b2 b1 b0 Ö Complemento a 1 (C’1) Ø Simétrico Ø Dos representaciones para el cero: ð + 0 → 000...00 ð - 0 → 111...11 Ø Rango (tamaño = n bits) ð -(2n-1-1) ≤ x ≤ +(2n-1-1) Ö Complemento a 2 (C’2) Ø No simétrico Ø Una única representaciones para el cero Ø Rango (tamaño = n bits) ð -(2n-1) ≤ x ≤ +(2n-1-1) Uso: cálculos exactos, variables de control, índices estructura y tecnología de computadores 10 2. tipos de datos Representación de datos numéricos reales Ö Punto fijo Ø Ø Ø Ø Un nº fijo de bits representa la parte entera y otro la decimal El punto decimal se coloca entre ambas partes en un lugar fijo El rango representable es muy limitado Puede utilizar aritmética entera Ö Punto flotante Ø Un número N se representan mediante un signo, una mantisa (M) y un exponente (E) ð N = ± M * BE Ø La base es implícita y es común para todos los números ð No necesita almacenarse (normalmente B = 2) Ø Existen multitud de asignaciones posibles de bits a la mantisa y al exponente Ø Requiere de una aritmética propia Punto Fijo: Signo (1 bit) Punto Flotante: Signo Exponente (1 bit) (8 bits) b31 b30 Parte entera (21 bits) ··· b31 b30 ··· b23 b22 Parte decimal (10 bits) b10 b9 ··· b0 Mantisa (23 bits) ··· N = ± (b30*220 + b29*219 + .... + b10*20 + b9*2-1 + ....+ b0*2-10 ) N = ± 1,M * 2E b0 Siendo E = (b30*27 + ....+ b23*20 ) estructura y tecnología de computadores 11 2. tipos de datos Representación de datos numéricos decimales Ö Cada dígito decimal se codifica mediante un grupo de 4 bits Ø BCD: los dígitos decimales se codifican mediante su equivalente binario Ø Exceso-3: los dígitos decimales se codifican sumando 3 a su equivalente binario Decimal BCD Exc.-3 0 1 2 3 4 5 6 7 8 9 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 Empaquetamiento Ö Decimal empaquetado Ø 2 dígitos decimales por byte Dig. 1º Dig. 2º Dig. 3º Dig. 4º Dig. 5º Dig. 6º Byte 1 Byte 2 Byte 3 Ö Decimal no empaquetado Ø 1 dígito decimal por byte X Dig. 1º X Byte 1 Dig. 2º Byte 2 X Dig. 3º Byte 3 Uso: Evitar el coste de conversión de base y evitar los problemas de redondeo que aparecen (por ejemplo: 0.3(10) = 0.0100110011001...(2)). estructura y tecnología de computadores 12 2. tipos de datos Representación de caracteres Ö Los caracteres son necesarios para representación de la información escrita Ø Letras del alfabeto (a, b, ..., z, A, B, ..., Z, á, é, ..., ü, ...) Ø Signos de puntuación (, ; : . ¿? ¡! -) Ø Caracteres numéricos (0, 1, ..., 9) Ö Existen diversas alternativas de codificación (7 u 8 bits por carácter) Ø ASCII Ø EBCDIC Representación de información lógica o booleana Ö Para representar información lógica se necesita un único bit Ø TRUE = 1 Ø FALSE = 0 Ö Representación compacta Ø 8 dígitos booleanos por byte Ø Necesidad instrucciones complejas para acceder al dato booleano Ö Representación no compacta Ø 1 dígito booleano por byte Ø Instrucciones de acceso sencillas pero se desperdician 7 bits estructura y tecnología de computadores 13 3. registros y pila de la arquitectura Los principales registros son Ö Contador de programa (PC, “Program Counter”) Ø Almacena la dirección de la siguiente instrucción a ejecutar Ø Cada vez que se accede a una instrucción se le suma una cantidad igual a la longitud de la misma Ö Registro de estado (SR, “Status Register”) Ø Almacena códigos o bits de condición (Z, N, C, V, etc.) ð Son un conjunto de bits que se activan tras la ejecución de ciertas operaciones, en función del resultado de las mismas ð Se suelen utilizar en instrucciones de salto condicional, para saltar a una determinada dirección en función del resultado de una instrucción anterior Ø También almacena otra información de estado (máscara interrupciones, bit de traza, etc.) Ö Puntero de pila (SP, “Stack Pointer”) Ø Almacena la dirección de la cabecera de la pila del sistema Ö Registros de datos o de propósito general (Di ó Ri) Ø Se utilizan para almacenar datos del programa temporalmente Ø También pueden usarse para direccionamiento y manipulación de direcciones Ö Registros de direcciones (Ai) Ø Se utilizan para para direccionamiento y manipulación de direcciones Ø No siempre se distinguen de los registros de datos estructura y tecnología de computadores 14 3. registros y pila de la arquitectura Códigos de condición del registro de estado Bits de estado Significado Z (cero) Se activa siempre que el resultado una operación es cero (cero) N (negativo) Se activa siempre que el resultado una operación es negativo C (acarreo) Se activa siempre que el resultado una operación produce acarreo (carry) V (desbordamiento) Se activa siempre que el resultado una operación produce desbordamiento (overflow) Pila del sistema Ö Es una zona de memoria para almacenar datos y/o instrucciones de forma temporal Ö El acceso a la pila es restringido Ø Sólo se añadir o eliminar un elemento al final de la pila, llamado cabecera de la pila ð Funciona igual que una pila de objetos (p. ej. platos) en la que sólo se puede añadir o eliminar un objeto del final pero no de la mitad. Ø También se llama memoria LIFO (Last-In-First-Out, o último que entra primero que sale) Ø El puntero de pila es un registro que siempre apunta a la cabecera de la pila Ø Se llaman base de la pila y límite de la pila a las direcciones tope por ambos lados de la pila Ö Las operaciones básicas sobre una pila son: Ø PUSH: para poner un nuevo elemento en la cabecera de la pila Ø POP: para eliminar un elemento de la cabecera de la pila estructura y tecnología de computadores 15 3. registros y pila de la arquitectura Ejemplo de funcionamiento de la pila Ö Por lo general la pila siempre crece en orden decreciente de direcciones de memoria Ö La operaciones PUSH y POP pueden formar parte del repertorio de instrucciones, o bien pueden implementarse mediante dos instrucciones más simples: Operación PUSH 0 MEMORIA 0 • • • 91 4 • • • 320 • • • MOVE (SP), item INCREMENT SP Operación POP (*) 0 MEMORIA • • 123 91 4 SP PILA SP (Puntero de pila) POP item ⇔ • • • 320 • • • • • • • 2k-1 2k-1 MEMORIA SP 4 • • • 320 • • • PILA Situación inicial DECREMENT SP MOVE new_item, (SP) PILA PUSH new_item ⇔ 2k-1 123 new_item item 91 (*) POP a partir de la situación inicial estructura y tecnología de computadores 16 4. modos de direccionamiento Definición Ö Forma de especificar la ubicación de los datos y modos para acceder a ellos Ö Los datos que maneja una instrucción máquina pueden estar ubicados en: Ø En la propia instrucción ð El operando está contenido en un campo de la propia instrucción máquina Ø En un registro de la CPU ð Los registros de la CPU se pueden utilizar para almacenar temporalmente los datos Ø En la memoria del computador ð En este caso será necesario especificar de algún modo la dirección de memoria dónde se halla el operando: dirección efectiva (EA, “Effective Address”) del operando Modos de direccionamiento simples Ö Ö Ö Ö Ö Ö Ö Notación usada Inmediato Directo a registro Directo a memoria (absoluto) Indirecto con registro Indirecto con pila Indirecto con memoria Indirecto con desplazamiento estructura y tecnología de computadores Ri Registro nº i de la CPU (Ri) Contenido del registro Ri (X) Contenido de la posición de memoria con dirección X EA Dirección efectiva de un operando SP Puntero de pila (Stack Pointer) 17 4. modos de direccionamiento Inmediato Ö El operando está contenido en un campo de la propia instrucción máquina Ö Sintaxis: opcode #A Directo a registro Ö El operando está contenido en un registro de la CPU Ö Sintaxis: opcode Ri Instrucción: opcode A operando = A Instrucción: opcode Ri operando = (Ri) Directo a memoria (absoluto) Ö La dirección efectiva del operando está especificada en la instrucción Ö Sintaxis: opcode A Instrucción: opcode Registros R0 • • Ri • • • Rn •• operando •• • Memoria 0 • • • A operando • • • 2k-1 EA = A estructura y tecnología de computadores 18 4. modos de direccionamiento Indirecto con registro Ö La dirección efectiva del operando está almacenada en el registro especificado en la instrucción Ö Sintaxis: opcode (Ri) Instrucción: opcode Ri Memoria 0 EA = (Ri) R0 • • Ri • • • Rn • • • Registros •• operando Direc. operando •• • • • • 2k-1 Indirecto con pila Ö El operando está almacenado en la cabecera de la pila del computador (apuntada por SP) Ö Sintaxis: opcode (SP) Instrucción: Pila opcode SP operando • • • EA = (SP) Indirecto con memoria Ö La dirección efectiva del operando está almacenada en la dirección de memoria especificada en la instrucción Ö Sintaxis: opcode (A) estructura y tecnología de computadores Instrucción: opcode 0 Memoria •• A direc. operando •• operando EA = (A) 2k-1 •• 19 4. modos de direccionamiento Indirectos con desplazamiento Ö Son un conjunto de direccionamientos en los que la EA del operando se calcula sumando dos cantidades: base (dirección efectiva de memoria) y desplazamiento. Ø El lugar donde se ubiquen dichos elementos determina el nombre del direccionamiento registro-base Ö La dirección efectiva del operando se calcula sumando el campo desplazamiento al contenido del registro especificado Ö Sintaxis: opcode desp(Ri) Instrucción: opcode Ri 0 desp. R0 • • Ri • • • Rn Memoria • • • Registros operando •• • • • + •• • 2k-1 EA = (Ri)+desp relativo Ö Es un direccionamiento registro-base que utiliza implícitamente el contador de programa Ö Sintaxis: opcode desp(PC) Instrucción: opcode 0 desp. Memoria • • • operando PC • • • + 2k-1 EA = (PC)+desp estructura y tecnología de computadores 20 4. modos de direccionamiento indexado Ö La dirección efectiva del operando se calcula sumando el campo desplazamiento al contenido del registro especificado Ö Sintaxis: opcode desp(Ri) Instrucción: opcode Ri 0 A R0 • • Ri • • • Rn Memoria • • • Registros operando •• • • • + •• • desp. 2k-1 EA = A +(Ri) Instrucción: registro-base indexado opcode Ri Rj R0 • Rj Ri • Rn Ö La dirección efectiva del operando se calcula sumando el campo desplazamiento al contenido del registro especificado Ö Sintaxis: opcode (Ri, Rj) 0 Registros •• + Memoria • • • operando • • • EA = (Ri) +(Rj) estructura y tecnología de computadores 2k-1 21 4. modos de direccionamiento Comparación de los modos de direccionamiento simples Modo Inmediato Dir. Efectiva Operando = A Ventajas No accede a memoria Directo a memoria Directo a registro EA = A Sencillo Operando = (Ri) No accede a memoria Espacio direcciones Indirecto con mem. EA = (A) grande Espacio direcciones Indirecto con reg. EA = (Ri) grande Indirecto con desp. EA = base+desp Versátil Indirecto con pila EA = (SP) "No accede a memoria" Desventajas Operando de magnitud limitada Espacio direcciones limitado Nº limitado de registros Dos accesos a memoria Acceso a reg. y a memoria Complejo. Accesos a reg y a memoria No siempre disponible estructura y tecnología de computadores 22 4. modos de direccionamiento Modos de direccionamiento complejos Modo Indirecto con registro postincrementado Indirecto con registro postdecrementado Indirecto con registro preincrementado Indirecto con registro predecrementado Registro-base indexado con desplazamiento Indirecto con registro escalado Registro-base escalado Registro-base indexado y escalado con despl. Sintáxis Opcode (Ri)+ Opcode desp(Ri,Rj) Dir. Efectiva EA = (Ri) Ri = Ri + 1 EA = (Ri) Ri = Ri –1 Ri = Ri + 1 EA = (Ri) Ri = Ri – 1 EA = (Ri) EA = (Ri)+(Rj)+desp Opcode (Ri×S) EA = (Ri) ×S Opcode desp(Ri×S) Opcode desp(Rj,Ri×S) EA = (Ri) ×S+desp EA = (Rj)+(Ri) ×S+desp Opcode (Ri)Opcode +(Ri) Opcode -(Ri) Ö Se utilizan fundamentalmente para acceso a estructuras de datos complejas (vectores, arrays, tablas, registros, etc.) estructura y tecnología de computadores 23 5. aplicaciones de los modos de direccionamiento Ö En C existen 2 tipos de variables: Ø globales: accesibles por cualquier función y asignadas estáticamente a memoria al arrancar el programa Ø locales: accesibles por una única función y asignadas dinámicamente a memoria cada vez que se llama a la función Foto de la pila del sistema durante una ejecución que realiza la secuencia de llamadas: main → A → A → C MEMORIA 0 SP marco de activación de C puntero de marco local Ö Los compiladores de C crean código de tal manera que cada vez que una función es llamada, se reserva en la pila del sistema una zona para las variables locales de la función. Dicha zona se llama marco de activación marco de 2ª activación de A marco de 1ª activación de A Ö Supóngase el siguiente programa: main A B marco global puntero de marco global base de la pila C 2k-1 estructura y tecnología de computadores 24 5. aplicaciones de los modos de direccionamiento Acceso a variables atómicas Ö ¿qué conocemos? Ø El tamaño y distribución de las variables dentro de los marcos: ya que dependen de las declaraciones que haya hecho el programador Ø La dirección dinámica de los punteros a marcos (que varía de una ejecución a otra) Ö ¿cómo calcular las direcciones de las variables? Ø globales: (puntero de marco global) + desplazamiento Ø locales: (puntero de marco local) + desplazamiento MEMORIA desp. V puntero de marco Debe utilizarse el direccionamiento registro-base, en donde el registro base deberá contener la dirección de comienzo del marco (actuando como puntero de marco). estructura y tecnología de computadores 25 5. aplicaciones de los modos de direccionamiento Acceso a elementos de un array Ö ¿qué suponemos? Ø El primer índice del array es 0 Ø Los elementos del array tiene tamaño n bytes MEMORIA 0 Ö ¿ qué conocemos? Ø El array comienza en la dirección: (puntero de marco) + desplazamiento A[i] i× n Ö ¿cómo calcular la dirección del elemento i? Ø (puntero de marco) + desplazamiento + i × n puntero de marco local A[0] desp. Debe utilizarse el direccionamiento registro-base indexado y escalado con desplazamiento, en donde el registro base deberá contener la dirección de comienzo del marco, el registro índice el índice del elemento que se desea acceder y el factor de escala ser igual a n comienzo del array A[1] 2k-1 estructura y tecnología de computadores 26 5. aplicaciones de los modos de direccionamiento Primitivas de pila Ö Las operaciones básicas sobre una pila (PUSH y POP) pueden realizarse utilizando los modos de direccionamiento autoindexados: Ø Si la pila crece en orden decreciente de direcciones de memoria ð la operación PUSH se realiza utilizando direccionamiento indirecto con registro predecrementado ð la operación POP se realiza utilizando direccionamiento indirecto con registro postincrementado Ø Si la pila crece en orden creciente de direcciones de memoria ð la operación PUSH se realiza utilizando direccionamiento indirecto con registro preincrementado ð la operación POP se realiza utilizando direccionamiento indirecto con registro postdecrementado estructura y tecnología de computadores