Vous êtes sur la page 1sur 2

1.8 Modos de direccionamiento La CPU ofrece varios mtodos para calcular direcciones de memoria.

Los accesos a memoria se pueden categorizar como accesos para obtener la siguiente instruccin a ejecutarse, o para obtener algn dato especfico. En cuanto a conseguir la siguiente instruccin por ejecutarse, la CPU utiliza la combinacin de los registros CS e IP, los cuales dan la direccin deseada. Antes de entrar en detalles sobre las diferentes modalidades de direccionamiento de la memoria para obtener algn dato especfico, vale la pena aclarar algunos conceptos acerca de lo que es un segmento, as como de la manera que se forma una direccin. Los segmentos La arquitectura del 8086 obliga a usar en combinacin un registro de segmento (CS, DS, ES y SS) y un desplazamiento, para obtener as la localidad absoluta de algn byte de informacin (ya sea datos o instrucciones) dentro de la memoria (puede ser RAM o ROM). Dichos segmentos sirven como los separadores de una carpeta: se puede dividir la carpeta en varios temas (mediante separadores) y tener cierta cantidad de hojas por tema. En el caso del 8086, la cantidad de hojas se traduce en cantidad de caracteres y su lmite es de 64KB por cada tema o segmento. Las direcciones El esquema de direccionamiento que impone la CPU obliga a usar los registros de segmentos en cada operacin. El 8086 tiene un bus de direcciones de 20 bits, debido a que los registros son de 16 bits. Cada direccin de memoria se divide en dos partes: el segmento y el desplazamiento dentro del segmento (cada uno de 16 bits). En notacin hexadecimal se tendra SSSS:DDDD donde SSSS representa el registro de segmento seguido de dos puntos y del desplazamiento representada por DDDD. Para calcular una direccin de memoria, que est dividida en segmento y desplazamiento, y juntarla en una sola direccin de 20 bits, es necesario aplicar la siguiente formula: Registro de segmento * 10H + desplazamiento Por ejemplo: Si el segmento fuera 2A54H, y el desplazamiento de 0022H, sera: 2A54H * 10H = 2A540H + 0022H = 2A562H Como slo se tienen 20 bits en el bus de direcciones, es posible que una o ms combinaciones de segmentos y desplazamientos originen la misma direccin. Tal es el caso del siguiente ejemplo: 2A55H * 10H = 2A550H + 0012H = 2A562H Modos de direccionamiento Es la forma en que una instruccin obtiene los operandos requeridos por medio de cualquier instruccin en ensamblador, para explicarlos, utilizaremos como ejemplo la instruccin "MOV destino, origen", que transfiere datos desde el origen al destino. Direccionamiento Inmediato MOV AX, 50 Transferimos un valor directamente, en este caso el 50 al registro AX Direccionamiento Directo Un valor de 16 bits forma parte de la instruccin y es interpretado como un acceso a la memoria. Cuenta es una localidad de memoria, donde se encuentra alguna informacin que ser movida al registro BX. MOV BX, Cuenta Transferimos el valor de la variable cuenta al registro BX Direccionamiento de Registro a Registro En esta modalidad, una de las mas sencillas, solamente se realiza una copia del registro fuente al registro destino, dejando intacto el primero. MOV AX, BX Transfiere el contenido del registro BX al registro AX Direccionamiento Indirecto Trae un valor de memoria a un registro o viceversa, pero primero se tiene que meter un registro, pero no se puede meter a cualquier registro, solamente puede ser a los registros BX, SI, DI o BP y despus pasarlo a otro registro. MOV BX, 1047H MOV AX, [BX] Es el registro que tiene la direccin que se quiere obtener el valor, este debe ir entre corchetes

Si usamos los registros DX, SI, DI , tenemos que combinarlos con el registro DS, y si usamos el registro SP, hay que combinarlo con SS. Los corchetes indican que se trata de una referencia a memoria, y por lo tanto que debe interpretarse como el contenido de la direccin especificada. Direccionamiento de Base Solo se pueden utilizar (BX o BP) es similar al anterior. MOV AX, [BX + 4] o tambin MOV AX, [BX][4] Direccionamiento Indexado Solo se pueden utilizar los registros SI o DI MOV AX, [SI + 7] o tambin MOV AX, [SI][7] Direccionamiento Indexado de Base MOV AX, [BX + SI] MOV AX, [BX][SI] El desplazamiento indicado por el registro BX, se toma en funcin al segmento DS, y el desplazamiento indicado por el registro BP se toma en funcin al registro de segmento SS. Cuando se usa el registro BP, debe incluirse un segundo operando, ya sea un ndice o un operando inmediato. Por ejemplo: MOV AX, [BP] Ser ensamblada como: MOV AX, [BP + 0]. 1.9 Funcionamiento de la pila Existe un uso muy especial de la memoria, en el cual un bloque de esta es utilizado para almacenar informacin bajo el esquema de ltimo en entrar primero en salir (LIFO). Dicho bloque de memoria es mejor conocido como pila (STACK) y es necesario que exista, pues la CPU lo requiere. En la pila se empujan datos y luego se extraen conforme al ltimo dato introducido. La pila proporciona a la CPU un mecanismo para que pueda almacenar el contexto de un programa (las direcciones de retorno despus de invocar alguna rutina, o el manejo de alguna interrupcin), o sirve como rea temporal de almacenamiento. En el procesador 8086 se utilizan dos registros para manipular la pila: el SS y el SP. La direccin formada por los dos registros SS:SP, da como resultado el principio de la pila, en el cual se encontrar el ltimo dato empujado a la misma. La pila es un segmento en realidad, y tiene la capacidad de contener hasta 64Kb de datos. En la arquitectura del 8086 la pila crece hacia abajo (desde la direccin ms alta hasta la ms baja del segmento). Otra norma relativa a la pila es que los datos almacenados en ella siempre son de 16 bits. Es decir, aunque se empuje un solo byte (ste ser almacenado como una palabra). Cuando se empuja un dato a la pila, lo primero en suceder es que el registro SP se decrementa en 2 (SP = SP -2) para accesar a la siguiente localidad libre, y la palabra es escrita al principio de la pila. De manera similar, al sacar la palabra de la pila, dicha palabra es copiada en su lugar de destino y despus el registro SP se incrementa en 2 (SP = SP + 2).

Vous aimerez peut-être aussi