Está en la página 1de 4

Modos de direccionamiento

Puesto que las instrucciones MOV es comn y flexible, se toman como fundamento para la explicacin para los modos de direccionamiento de datos. El origen estas ala derecha y el destino ala izquierda, junto al cdigo de operacin MOV (el cdigo de operacin, u upcode, indica al microprocesador la operacin a realizar). Parece difcil de manejar al principio, pues normalmente damos por hecho que las cosas se mueven de izquierda a derecha, mientras que aqu se mueven de derecha a izquierda. Observe que una instruccin, el destino esta siempre separado del origen por una coma. Tambin note que las transferencias de memoria a memoria no son permitidas por ninguna instruccin, con la excepcin de MOVS. En la figura 3.1, la instruccin MOV AX, BX transfiere el contenido del registro fuente (BX). El origen nunca cambia pero el destino normalmente s. Es muy importante recordar que una instruccin MOV siempre copia los datos de la fuente al destino y en realidad nunca toma los datos y lo mueve. Tambin observe que el registro de bandera no se ve afectado por la mayora de las instrucciones de trasferencia de datos. A menudo, la fuente y el destino se conocen como operados. La figura 3.2 muestra todas las variantes posibles de los modos de direccionamiento de datos utilizando la instruccin MOV. Esta figura muestra como formular cada modo de direccionamiento de datos con la instruccin MOV y adems sirve como una referencia. Observe que estos son los mismos los mismos modos de direccionamiento encontrados en todas la versiones de microprocesadores Intel, excepto para el 80386 al Pentium II. Los modos de direccionamiento de datos son: Direccionamiento de registro: Transfiere una copia de un byte o palabra desde el registro o localidad de memoria fuente hacia el registro o localidad de memoria destino (por ejemplo la instruccin MOV CX, DX copia la palabra contenida en DX al registro CX). En los 80386 y posteriores, es posible transferir una palabra doble del registro o localidad de memoria fuente al registro de localidad de destino. (Por ejemplo, la instruccin MOV ECX, EDX copia la palabra doble contenida en el registro EDX al registro EDC). Direccionamiento inmediato: transfiere el byte o palabra inmediata al registro o localidad de memoria de destino (por ejemplo, la instruccin MOV AL, 22H copia el byte 22H al registro AL). En los 80386 y posteriores, es posible transferir una palabra doble inmediata a un registro o localidad de memoria (por ejemplo, la instruccin MOV EBX, 12345678H al registro EBX de 32 bits de ancho).

Direccionamiento directo: Mueve un byte o palabra entre una localidad de memoria y un registro. El conjunto de instrucciones no soporta una transferencia de memoria a memoria excepto para la instruccin MOVS (por ejemplo, la instruccin MOV CX, LIST copia el contenido de la palabra de la localidad de memoria LIST al registro CX). En los microprocesadores 80386 y posteriores tambin es posible direccionar una localidad de memoria con un tamao de palabra doble. (Por ejemplo, la instruccin MOV ESI, LIST copia un nmero de 32 bits almacenado en 4 byte de memoria consecutiva. De la localidad LIST al registro ESI). Figura 3.1 la instruccin MOV Muestra la fuente, el destino y La direccin de flujo de datos.

MOV AX, BX

Destino Fuente

Direccionamiento indirecto por registro: transfiere un byte o palabra entre un registro y una localidad de memoria direccionada por un ndice o un registro base. El ndice y el registro base son el BP, BX, DI y SI (por ejemplo, la instruccin MOV AX,[BX] copia los datos con tamao de una palabra de la direccin dada por el segmento de datos, ms el desplazamiento indexado por BX, hacia el registro AX). En los 80386 y posteriores, se transfiere un byte, una palabra o una palabra doble entre un registro y una localidad de memoria direccionada por cualquier registro: EAX, EBX, ECX, EDX, EBP, EDI o ESI (por ejemplo, la instruccin MOV AL, [ECX] carga AL del segmento de datos y la direccin de desplazamiento elegida por el contenido de ECX). Direccionamiento base-mas-ndice: transfiere un byte o palabra entre un registro y una localidad de memoria direccionada por un ndice o un registro base (BP o BX), ms un registro ndice (DI o SI) (por ejemplo, la instruccin MOV [BX + DI], CL copia el byte contenido en el registro CL a una localidad de memoria del segmento del datos direccionada por BX mas DI). En los 80386 y posteriores es posible combinar cualquier registro EAX, EBX, ECX, EDX, EBP, EDI o ESI para generar la direccin de memoria

(por ejemplo, la instruccin MOV [EAX + EBX], CL copia el byte contenido en CL a la localidad de memoria del segmento de datos direccionada por EAX mas EBX). Direccionamiento relativo al registro: Mueve un byte o palabra entre un registro y una localidad de memoria direccionada por un registro base o ndice, ms un desplazamiento (por ejemplo, MOV AX, [BX + 4] o MOV AX, ARRAY [BX]. La primera instruccin carga a AX desde la direccin del segmento de datos formada por BX ms 4 y la segunda instruccin carga a AX desde la localidad de memoria del segmento de datos ARRAY mas el contenido de BX). Los 80386 y posteriores utilizan cualquier registro para direccionar memoria (por ejemplo, MOV AX, [ECX + 4] o MOV AX, ARRAY [EBX]. La primera instruccin carga a AX desde la direccin del segmento desde datos formada por ECX ms 4 y la segunda instruccin carga a AX desde la localidad del segmento de datos ARRAY mas el contenido de EBX). Direccionamiento relativo a base-mas-ndice: transfiere un byte o una palabra entre un registro y la localidad de memoria direccionada por una base y un registro ndice, ms un desplazamiento (por ejemplo, MOV AX, ARRAY [BX + DI] o MOV AX, [BX +DI + 4]. estas instrucciones cargan a AX desde una localidad de memoria en el segmento de datos; la primera utiliza la direccin formada por la suma de ARRAY, BX y DI y la segunda por la suma de BX, DI y 4). En los 80386 y posteriores MOV EAX, ARRAY [EBX + ECX] carga EAX desde una localidad de memoria del segmento de datos, a la cual se accede con la suma de ARRAY, EBX y ECX. Direccionamiento ndice escalado: est disponible solamente en los microprocesadores 80386 al Pentium Pro. El segundo de un par de registros es modificado por un factor de escala de 2X, 4X u 8X para generar la direccin de memoria del operando (por ejemplo, una instruccin MOV EDX, [EAX+4*EBX] carga a EDX desde una localidad de memoria del segmento de datos direccionada por EAX mas cuatro veces EBX). El escalamiento permite acceder a arreglos de datos de una memoria de una palabra (2X), una palabra doble (4X) o una palabra cudruple (8X). observe que tambin existe el factor de escalamiento 1X, pero generalmente est implcito y no aparece en la instruccin. La instruccin MOV AL, [EBX+ECX] es un ejemplo de factor de escalamiento de 1. En forma alterna, esta instruccin puede escribirse como MOV AL. [EBX+1*ECX].otro ejemplo es la instruccin MOV al, [2*EBX], la cual utiliza solamente un registro escalado para direccionar la memoria.

Direccionamiento de registro El direccionamiento de registro es el tipo ms comn de direccionamiento de datos y, una vez que se aprendan el nombre de los registro, es el ms fcil de aplicar. El microprocesador tiene los siguientes registros de 8 bits usados con el direccionamiento de registro: AH, AL, BH, BL, CH, CL, DH Y DL. Tambin se encuentran los siguientes registro de 16 bits AX, BX, CX, DX, SP, BP, SI Y DI. En los microprocesadores 80386 y posteriores, los registros extendidos de 32 bits son EAX, EBX, ECX, EDX, ESP, EBP, EDI Y ESI. Con el direccionamiento de registros, algunas instrucciones MOV (as como PUSH y POP) tambin utilizan los registros de segmentos de 16 bits CS, ES, DS, SS, FS Y GS. Es importante utilizar registros del mismo tamao en las instrucciones; nunca mezcle un registro de 8 bits con uno de 16, una de 8 con otro de 32, ni con uno de16 con uno de 32 bits, ya que esto no est permitido por el microprocesador y da resultado un error al ensamblar. Esto es aplicable incluso cuando las instrucciones MOV AX, AL o MOV EAX, al parecer tener sentido. Por supuesto, la instruccin MOV AX, AL o MOV, EAX, al no estar permitida Al parecer tener sentido ya que estos registros son de diferente tamao. Observe que unas pocas instrucciones (como SH, DX, CL) constituye acepciones de esta regla, como se explica en captulos anteriores. Tambin resulta importante tener en cuenta que ninguna de las instrucciones MOV afecta los bits de bandera. La tabla 3-1 muestra muchas variables de instrucciones de movimiento de registo.es imposible mostrar todas por que se demasiadas. Por ejemplo: el subconjunto de 8 bits de la instruccin MOV tiene 64 variables diferentes. La instruccin MOV desde un registro de segmento a otro registro de segmento es prcticamente el nico tipo de instruccin MOV de registro no permitido. Observe el registro de segmento de cdigo no es normalmente modificado por una instruccin MOV, ya que la direccin de la siguiente instruccin esta dada tanto en IP/EIP como en C. Si solo CS cambia, la direccin de la siguiente instruccin sera impredecible. Por lo tanto, no esta permitido el cambio de registro CS con una instruccin MOV La figura 3-3 muestra la operacin de la instruccin MOV BX, CX. Observe que le contenido del registro fuente no cambia, a diferencia del contenido del registro distinto

También podría gustarte