Modos de Direccionamiento
Conjunto de Instrucciones 386 Conjunto de Instrucciones Básico ≡ conjunto de instrucciones del 8086/8088 Conjunto de Instrucciones Extendido : 80286; algunas instrucciones nuevas y modos de direccionamiento adicionales Conjunto de instrucciones específico del  80386: Basic  Instruction Set Basic + Extended Instruction Set Basic + Extended+ 80386 specific Instruction Set System control Instruction set System control Instruction set 8086/8088 80286 80386 Protected Mode Real Mode
Conjunto de Instrucciones 386 Modos de Direccionamiento de Datos del  80386DX  Modos de direccionamiento: m é todos para especificar operandos Operandos : en registro, dentro de instrucción, memoria, puertos E/S * Control de puertos : direccionamiento directo, indirecto Modos de Direccionamiento disponibles: Direccionamiento por Registro : registro Direccionamiento inmediato: dentro de instrucción Direccionamiento directo Direccionamiento indirecto por Registro Direccionamiento Base Direccionamiento Indexado Direccionamiento Indexado Base MEM o E/S
Modos de Direccionamiento Direccionamiento por registro Puede accesarse por bytes, palabras, palabras dobles. MOV  AX, BX Byte: AL, AH, BL, BH, CL, CH, DL, DH Palabra: AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS, ES, FS, GS Palabra doble: EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI Direccionamiento Inmediato Un operando es parte de la instrucción MOV AL, 15H 8 bits, 16 bits, y 32 bits
Direccionamiento por Registro ABCD  0000 0100 XXXX  ABCD  01000  89  MOV AX, BX 01001  D8 01002  XX  IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI Dirección Contenido Memoria Instrucción 80386 uP
Direccionamiento Inmediato 0000 0100 01000  B0  MOV AL, 15H 01001  15 01002  XX  XX 15 IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI Dirección Contenido de Memora Instrucción 80386 MPU
Direccionamiento Directo Operandos de 16 y 32 bits en memoria Dirección del dato = Segmento : EA (dirección efectiva) Dirección Segmento Base : localidad inicial del segmento EA : desplazamiento (offset)del operando desde el inicio del segmento   EA = Base + Index + Desplazamiento   Base = BX or BP, Index = SI o DI, desplazamiento = 8-bits o 16-bits
Direccionamiento Directo Ejemplo PA = Segmento Base*16 + EA del dato Ejemplo:  MOV  BX, [1234H] MOV BX, [1234H] IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 8B 0E 34 12 XX 0000 0100 0200 XXXX 03234  ED 03235  BE BEED
Direccionamiento Indirecto por Registro Ejemplo Segmento Base : Dirección Indirecta {BX,BP,SI,DI} Ejemplo :  MOV AX, [SI] MOV AX,[SI] IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 8B 04 XX XX XX 0000 0100 0200 XXXX 03234  ED 03235  BE BEED 1234
Direccionamiento Base PA = Segmento*16 + {BX o BP} + {desplazamiento de 8-bit o 16-bit} Registro Base : comienzo de la estructura de datos  Example: MOV  [BX]+1234H, AL MOV [BX]+1234H, AL Arreglo de datos IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 88 07 34 12 XX 0000 0100 0200 04234  04235  1234 ED 1000 Desplazamiento Registro Base + Elemento 0 Elemento 1 Elemento n-1
Direccionamiento Indexado PA = Segmento*16 + {SI, DI} + {desplazamiento 8-bit o 16-bit} Desplazamiento : dirección inicial de un arreglo Indice: selecciona elemento específico en el arreglo Ejemplo: MOV AL, [SI]+1234H 8A 44 34 12 XX 0000 0100 0200 05234  05235  2000 XX 1000 MOV AL, [SI]+1234H BE . . . Indice  Desplazamiento + Element 0 Element 1 Arreglo de datos Element n-1 IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004
Direccionamiento Base+ Indice Características: PA= Segmento*16 +{BX, BP}+{SI,DI}+{desplazamiento 8-bit o 16-bit} Usado para accesar estructuras complejas de datos Ver figura en la página siguiente El desplazamiento (valor fijo) ubica el arreglo en memoria El registro base especifica la coordenada  m El registro índice especifica la coordenada  n Ejemplo:  MOV AH, [BX][SI]+1234H   opcode : 8A 44 34 12
Direccionamiento Base+Indice de un arreglo de dos dimensiones Arreglo de datos de dos dimensiones. Elemento (m, n) Elemento (m, 1) . . . Elemento (m, 0 Elemento (l, n) . . . Elemento (1, 1) Elemento (1, 0) Elemento (0, n) . . . Elemento (0, 1) Elemento (0, 0) Registro índice Registro base Desplazamiento + +
Ejemplo:  MOV AH, [BX][SI]+1234H M0V AH,[BX][SI]+1234H 0200 0100 0000 01000  8A 01001  A0 01002  34 01003  12 01004  xx 02000  xx 02001  xx  Dirección  Contenido  Instrucción  . . . . . . . . 06234  BE  Operando  Fuente xx xx 1000 2000 IP SI CS DS AX BX ANTES
Ejemplo:  MOV AH, [BX][SI]+1234H M0V AH,[BX][SI]+1234H 0200 0100 0004 01000  8A 01001  20 01002  34 01003  12 01004  xx 02000  xx 02001  xx  Dirección  Contenido  Instrucción  . . . . . . . . 06234  BE  Operando  Fuente xx BE 1000 2000 IP SI CS DS AX BX DESPUES
Direccionamiento Indice Escalado Exclusivo de los microprocesadores 80386 hasta Pentium 4 Factor de escala afecta a la dirección efectiva solamente EA = Registro Base + (Registro Indice  x  factor de escala) + desplazamiento PA = Segmento Base*16 + EA
Ejemplos de Direccionamiento Inmediato MOV BL,44 MOV AX,44H MOV SI,0 MOV CH,100 MOV AL,’A’ MOV AX,64H MOV CL,11001110B MOV EBX,12340000H MOV ESI,12 MOV EAX,100H
Ejemplos de direccionamiento por Registro MOV AL, BL MOV CH, CL MOV AX, CX MOV SP, BP MOV DS, AX MOV SI, DI MOV BX, ES MOV ECX, EBX MOV ESP, EDX MOV ES, DS ;?? NO se permite segmento a segmento MOV BL, DX ;?? NO se permite tipos de datos distintos MOV CS, AX ;?? NO se permite CS como destino.
Ejemplos de Direccionamiento Directo MOV AL, NUMERO MOV AX, ALGO MOV EAX, AGUA MOV NOTICIAS, AL MOV ALLA, AX MOV CASA, EAX MOV ES:[2000H],AL MOV [2000H], AL MOV AL, [1234H] MOV CX, DATO+5 MOV TABLA1, AX MOV AL, DATO1
Ejemplos de direccionamiento Indirecto por Registro MOV CX, [BX] MOV [BP], DL MOV [DI], BH MOV AL, [EDX] MOV ECX, [EBX] MOV [DI], [BX] ;?? NO se permite transferencia de memoria a memoria, excepto con instrucciones que manejan cadenas de caracteres.
Ejemplos de direccionamiento Base +Indice MOV CX, [BX+DI] MOV CH, [BP+SI] MOV [BX+SI], SP MOV [BP+DI], AH MOV CL, [EDX+EDI] MOV [EAX+EBX], ECX
Ejemplos de direccionamiento Base +Indice Este direccionamiento se usa para accesar los elementos de un arreglo de datos en memoria. Veamos la siguiente secuencia de instrucciones en lenguaje ensamblador. ARREGLO DB 16 DUP(?) ;arreglo de 32 bytes en memoria MOV BX, OFFSET ARREGLO MOV DI, 10H MOV AL, [BX+DI] MOV DI, 2OH MOV [BX+DI], AL Asuma que el dato en la localidad 10H en ARREGLO es 29H.
Ejemplos de direccionamiento relativo por Registro MOV AX, [DI+100H] MOV ARREGLO [SI], BL MOV LISTA [SI+2], CL MOV DI, TABLA [BX] MOV DI,[EAX+10H] MOV TABLA1 [EBX], EAX ; A continuación tenemos un ejemplo del uso del direccionamiento relativo por registro MOV DI, 10H MOV AL, ARREGLO [DI] MOV DI, 20H MOV ARREGLO [DI], AL
EJERCICIO 1 Asuma que DS=1512H. Encontrar la direccion fisica y su contenido de la localidad de memoria despues de ejecutar: MOV AL,99H MOV [3518],AL
EJERCICIO 2 Asuma que DS=1120H, SI=2498H, y AX=17FEH. Muestre graficamente el contenido de las localidades de memoria despues de ejecutar: MOV   [SI],AX
EJERCICIO 3 Asuma que DS=4500, SS=2000, BX=2100, SI=1486, DI=8500, BP=7814, y AX=2512. Muestre las direcciones f í sicas donde se almacena el contenido de AX en cada uno de los casos siguientes: MOV [BX]+20,AX MOV [SI]+10,AX MOV [DI]+4,AX MOV [BP]+12,AX NOTA: Todos los valores son hexadecimales.
EJERCICIO 4 De las instrucciones siguientes cuantas no codifican en lenguaje ensamblador, d é  la raz ó n por qu é  NO. MOV AX,27 MOV AL,97F MOV DS,9BF2 MOV CX,397 MOV SI,9516 MOV CS,3490 MOV DS,BX MOV BX,CS MOV CS,BX MOV CS,BH MOV AX,12345 MOV CS,DS
Ejemplos de instrucciones con direccionamiento relativo base+ í ndice MOV DH, [BX+DI+20H] MOV AX, ARCHIVO [BX+DI] MOV LISTA [BP+DI], CL MOV LISTA1 [BP+SI+4], DH MOV EAX, ARCHIVO1 [EBX+ECX+] ; Considere el siguiente segmento de programa. Asuma que un archivo de muchos arreglos de datos existe en memoria, y que cada arreglo contiene muchos elementos. MOV BX, OFFSET ARREGLOA MOV DI, 0 MOV AL, ARCHIVO [BX+DI] MOV BX, OFFSET ARREGLOC MOV DI,2 MOV ARCHIVO [BX+DI], AL
Ejemplos de direccionamiento  í ndice escalado MOV EAX, [EBX+4*ECX] MOV [EAX+2*EBX], CX MOV AX, [EBP+2*EDI+100H] MOV LISTA [EAX+2*EBX+10H],DX Considere el ejemplo siguiente: MOV EBX, OFFSET LISTA MOV ECX, 2 MOV AX,[EBX+2*ECX] MOV ECX,4 MOV [EBX+2*ECX], AX MOV ECX,7 MOV [EBX+2*ECX], AX Nota: LISTA es una variable tipo doble palabra.

Modos de Direccionamiento

  • 1.
  • 2.
    Conjunto de Instrucciones386 Conjunto de Instrucciones Básico ≡ conjunto de instrucciones del 8086/8088 Conjunto de Instrucciones Extendido : 80286; algunas instrucciones nuevas y modos de direccionamiento adicionales Conjunto de instrucciones específico del 80386: Basic Instruction Set Basic + Extended Instruction Set Basic + Extended+ 80386 specific Instruction Set System control Instruction set System control Instruction set 8086/8088 80286 80386 Protected Mode Real Mode
  • 3.
    Conjunto de Instrucciones386 Modos de Direccionamiento de Datos del 80386DX Modos de direccionamiento: m é todos para especificar operandos Operandos : en registro, dentro de instrucción, memoria, puertos E/S * Control de puertos : direccionamiento directo, indirecto Modos de Direccionamiento disponibles: Direccionamiento por Registro : registro Direccionamiento inmediato: dentro de instrucción Direccionamiento directo Direccionamiento indirecto por Registro Direccionamiento Base Direccionamiento Indexado Direccionamiento Indexado Base MEM o E/S
  • 4.
    Modos de DireccionamientoDireccionamiento por registro Puede accesarse por bytes, palabras, palabras dobles. MOV AX, BX Byte: AL, AH, BL, BH, CL, CH, DL, DH Palabra: AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS, ES, FS, GS Palabra doble: EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI Direccionamiento Inmediato Un operando es parte de la instrucción MOV AL, 15H 8 bits, 16 bits, y 32 bits
  • 5.
    Direccionamiento por RegistroABCD 0000 0100 XXXX ABCD 01000 89 MOV AX, BX 01001 D8 01002 XX IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI Dirección Contenido Memoria Instrucción 80386 uP
  • 6.
    Direccionamiento Inmediato 00000100 01000 B0 MOV AL, 15H 01001 15 01002 XX XX 15 IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI Dirección Contenido de Memora Instrucción 80386 MPU
  • 7.
    Direccionamiento Directo Operandosde 16 y 32 bits en memoria Dirección del dato = Segmento : EA (dirección efectiva) Dirección Segmento Base : localidad inicial del segmento EA : desplazamiento (offset)del operando desde el inicio del segmento EA = Base + Index + Desplazamiento Base = BX or BP, Index = SI o DI, desplazamiento = 8-bits o 16-bits
  • 8.
    Direccionamiento Directo EjemploPA = Segmento Base*16 + EA del dato Ejemplo: MOV BX, [1234H] MOV BX, [1234H] IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 8B 0E 34 12 XX 0000 0100 0200 XXXX 03234 ED 03235 BE BEED
  • 9.
    Direccionamiento Indirecto porRegistro Ejemplo Segmento Base : Dirección Indirecta {BX,BP,SI,DI} Ejemplo : MOV AX, [SI] MOV AX,[SI] IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 8B 04 XX XX XX 0000 0100 0200 XXXX 03234 ED 03235 BE BEED 1234
  • 10.
    Direccionamiento Base PA= Segmento*16 + {BX o BP} + {desplazamiento de 8-bit o 16-bit} Registro Base : comienzo de la estructura de datos Example: MOV [BX]+1234H, AL MOV [BX]+1234H, AL Arreglo de datos IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004 88 07 34 12 XX 0000 0100 0200 04234 04235 1234 ED 1000 Desplazamiento Registro Base + Elemento 0 Elemento 1 Elemento n-1
  • 11.
    Direccionamiento Indexado PA= Segmento*16 + {SI, DI} + {desplazamiento 8-bit o 16-bit} Desplazamiento : dirección inicial de un arreglo Indice: selecciona elemento específico en el arreglo Ejemplo: MOV AL, [SI]+1234H 8A 44 34 12 XX 0000 0100 0200 05234 05235 2000 XX 1000 MOV AL, [SI]+1234H BE . . . Indice Desplazamiento + Element 0 Element 1 Arreglo de datos Element n-1 IP CS DS SS ES FS GS AX BX CX DX SP BP SI DI 01000 01001 01002 01003 01004
  • 12.
    Direccionamiento Base+ IndiceCaracterísticas: PA= Segmento*16 +{BX, BP}+{SI,DI}+{desplazamiento 8-bit o 16-bit} Usado para accesar estructuras complejas de datos Ver figura en la página siguiente El desplazamiento (valor fijo) ubica el arreglo en memoria El registro base especifica la coordenada m El registro índice especifica la coordenada n Ejemplo: MOV AH, [BX][SI]+1234H opcode : 8A 44 34 12
  • 13.
    Direccionamiento Base+Indice deun arreglo de dos dimensiones Arreglo de datos de dos dimensiones. Elemento (m, n) Elemento (m, 1) . . . Elemento (m, 0 Elemento (l, n) . . . Elemento (1, 1) Elemento (1, 0) Elemento (0, n) . . . Elemento (0, 1) Elemento (0, 0) Registro índice Registro base Desplazamiento + +
  • 14.
    Ejemplo: MOVAH, [BX][SI]+1234H M0V AH,[BX][SI]+1234H 0200 0100 0000 01000 8A 01001 A0 01002 34 01003 12 01004 xx 02000 xx 02001 xx Dirección Contenido Instrucción . . . . . . . . 06234 BE Operando Fuente xx xx 1000 2000 IP SI CS DS AX BX ANTES
  • 15.
    Ejemplo: MOVAH, [BX][SI]+1234H M0V AH,[BX][SI]+1234H 0200 0100 0004 01000 8A 01001 20 01002 34 01003 12 01004 xx 02000 xx 02001 xx Dirección Contenido Instrucción . . . . . . . . 06234 BE Operando Fuente xx BE 1000 2000 IP SI CS DS AX BX DESPUES
  • 16.
    Direccionamiento Indice EscaladoExclusivo de los microprocesadores 80386 hasta Pentium 4 Factor de escala afecta a la dirección efectiva solamente EA = Registro Base + (Registro Indice x factor de escala) + desplazamiento PA = Segmento Base*16 + EA
  • 17.
    Ejemplos de DireccionamientoInmediato MOV BL,44 MOV AX,44H MOV SI,0 MOV CH,100 MOV AL,’A’ MOV AX,64H MOV CL,11001110B MOV EBX,12340000H MOV ESI,12 MOV EAX,100H
  • 18.
    Ejemplos de direccionamientopor Registro MOV AL, BL MOV CH, CL MOV AX, CX MOV SP, BP MOV DS, AX MOV SI, DI MOV BX, ES MOV ECX, EBX MOV ESP, EDX MOV ES, DS ;?? NO se permite segmento a segmento MOV BL, DX ;?? NO se permite tipos de datos distintos MOV CS, AX ;?? NO se permite CS como destino.
  • 19.
    Ejemplos de DireccionamientoDirecto MOV AL, NUMERO MOV AX, ALGO MOV EAX, AGUA MOV NOTICIAS, AL MOV ALLA, AX MOV CASA, EAX MOV ES:[2000H],AL MOV [2000H], AL MOV AL, [1234H] MOV CX, DATO+5 MOV TABLA1, AX MOV AL, DATO1
  • 20.
    Ejemplos de direccionamientoIndirecto por Registro MOV CX, [BX] MOV [BP], DL MOV [DI], BH MOV AL, [EDX] MOV ECX, [EBX] MOV [DI], [BX] ;?? NO se permite transferencia de memoria a memoria, excepto con instrucciones que manejan cadenas de caracteres.
  • 21.
    Ejemplos de direccionamientoBase +Indice MOV CX, [BX+DI] MOV CH, [BP+SI] MOV [BX+SI], SP MOV [BP+DI], AH MOV CL, [EDX+EDI] MOV [EAX+EBX], ECX
  • 22.
    Ejemplos de direccionamientoBase +Indice Este direccionamiento se usa para accesar los elementos de un arreglo de datos en memoria. Veamos la siguiente secuencia de instrucciones en lenguaje ensamblador. ARREGLO DB 16 DUP(?) ;arreglo de 32 bytes en memoria MOV BX, OFFSET ARREGLO MOV DI, 10H MOV AL, [BX+DI] MOV DI, 2OH MOV [BX+DI], AL Asuma que el dato en la localidad 10H en ARREGLO es 29H.
  • 23.
    Ejemplos de direccionamientorelativo por Registro MOV AX, [DI+100H] MOV ARREGLO [SI], BL MOV LISTA [SI+2], CL MOV DI, TABLA [BX] MOV DI,[EAX+10H] MOV TABLA1 [EBX], EAX ; A continuación tenemos un ejemplo del uso del direccionamiento relativo por registro MOV DI, 10H MOV AL, ARREGLO [DI] MOV DI, 20H MOV ARREGLO [DI], AL
  • 24.
    EJERCICIO 1 Asumaque DS=1512H. Encontrar la direccion fisica y su contenido de la localidad de memoria despues de ejecutar: MOV AL,99H MOV [3518],AL
  • 25.
    EJERCICIO 2 Asumaque DS=1120H, SI=2498H, y AX=17FEH. Muestre graficamente el contenido de las localidades de memoria despues de ejecutar: MOV [SI],AX
  • 26.
    EJERCICIO 3 Asumaque DS=4500, SS=2000, BX=2100, SI=1486, DI=8500, BP=7814, y AX=2512. Muestre las direcciones f í sicas donde se almacena el contenido de AX en cada uno de los casos siguientes: MOV [BX]+20,AX MOV [SI]+10,AX MOV [DI]+4,AX MOV [BP]+12,AX NOTA: Todos los valores son hexadecimales.
  • 27.
    EJERCICIO 4 Delas instrucciones siguientes cuantas no codifican en lenguaje ensamblador, d é la raz ó n por qu é NO. MOV AX,27 MOV AL,97F MOV DS,9BF2 MOV CX,397 MOV SI,9516 MOV CS,3490 MOV DS,BX MOV BX,CS MOV CS,BX MOV CS,BH MOV AX,12345 MOV CS,DS
  • 28.
    Ejemplos de instruccionescon direccionamiento relativo base+ í ndice MOV DH, [BX+DI+20H] MOV AX, ARCHIVO [BX+DI] MOV LISTA [BP+DI], CL MOV LISTA1 [BP+SI+4], DH MOV EAX, ARCHIVO1 [EBX+ECX+] ; Considere el siguiente segmento de programa. Asuma que un archivo de muchos arreglos de datos existe en memoria, y que cada arreglo contiene muchos elementos. MOV BX, OFFSET ARREGLOA MOV DI, 0 MOV AL, ARCHIVO [BX+DI] MOV BX, OFFSET ARREGLOC MOV DI,2 MOV ARCHIVO [BX+DI], AL
  • 29.
    Ejemplos de direccionamiento í ndice escalado MOV EAX, [EBX+4*ECX] MOV [EAX+2*EBX], CX MOV AX, [EBP+2*EDI+100H] MOV LISTA [EAX+2*EBX+10H],DX Considere el ejemplo siguiente: MOV EBX, OFFSET LISTA MOV ECX, 2 MOV AX,[EBX+2*ECX] MOV ECX,4 MOV [EBX+2*ECX], AX MOV ECX,7 MOV [EBX+2*ECX], AX Nota: LISTA es una variable tipo doble palabra.