Está en la página 1de 14

UNIVERSIDAD DE ALCAL

Departamento de Automtica

MODOS DE DIRECCIONAMIENTO
La segmentacin en el 8086
Definicin de segmentos simplificada Constantes predefinidas Inicializacin de los registros de segmentos

Modos de direccionamiento
Inmediato Registro Memoria

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

La segmentacin en el 8086
Se basan en la arquitectura segmentada usada por Intel

Un segmento es una coleccin de instrucciones o datos cuyas direcciones son todas ellas relativas a un mismo registro de segmento.

Se pueden definir usando directivas de segmento simplificadas o definiciones de segmentos completas

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Definicin de segmentos simplificada


Slo es posible a partir de la versin 5.0 Es necesario declarar un modelo de memoria a utilizar, para especificar el tamao por defecto de datos y cdigo a usar (Directiva .MODEL) El uso de la directiva DOSSEG permite ordenar los segmentos de forma consistente independientemente del orden utilizado en el cdigo Los segmentos se definen utilizando directivas propias La directiva de segmento indica el comienzo del segmento El uso de una directiva de segmento indica el final de la anterior
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 3

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Directivas de definicin de segmentos


.STACK [tamao]: Define el tamao que tendr la pila (Defecto: 1K) .CODE [nombre]: Segmento para el cdigo. (1 para Tiny y Small) .DATA: Segmento de datos tipo near inicializados .DATA?: Segmento de datos tipo near no inicializados .FARDATA [nombre]: Segmento de datos tipo far inicializados .FARDATA? [nombre]: Segmento de datos tipo far no inicializados .CONST: Segmento para constantes

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Constantes predefinidas
Existen un conjunto de constantes predefinidas, que se pueden utilizar en cualquier parte del cdigo
@curseg: Indica el nombre del segmento activo @filename: Contiene el nombre (sin extensin pero con el punto) del fichero fuente @codesize: Indica un valor segn el modelo de cdigo empleado.
0 para small y compact; 1 para medium, large y huge.

@datasize: Indica un valor segn el modelo de cdigo empleado.


0 para small y medium; 1 para compact y large; 2 para huge
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 5

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Constantes predefinidas (II)


Existe una constante por cada segmento definido en el cdigo utilizando una directiva

La constante tiene el mismo nombre que la directiva, pero con @ en vez del punto

La constante indica el comienzo en memoria del segmento al que representa (en direcciones mltiplo de 16)
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 6

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Inicializacin de los registros de segmentos


Los programas en cdigo ensamblador deben inicializar los registros de segmentos antes de que las instrucciones que acceden a dichos segmentos sean ejecutadas dentro del cdigo

La inicializacin de cada segmento se realiza de forma diferente

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Inicializacin de CS e IP
Los registros CS e IP se inicializan indicando una direccin de inicio en la directiva END
END [direccin de inicio]

direccin de inicio identifica la direccin de comienzo cuando el programa se carga. Normalmente se utiliza una etiqueta en la direccin de la primera instruccin del cdigo El registro CS se inicializa a dicho valor. El registro IP normalmente a 0 Slo un END debe tener direccin de inicio
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 8

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Inicializacin de DS
DS se debe inicializar con la direccin del segmento que se usar para datos

Se debe realizar en 2 pasos, porque un valor de memoria no se puede cargar directamente en un registro de segmento

La inicializacin suele aparecer al comienzo de la parte de cdigo


MOV ax, @data MOV ds, ax
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 9

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Inicializacin de SS y SP
El registro de segmento SS se inicia automticamente con el valor del ltimo segmento de tipo STACK El registro SP se inicializa automticamente al tamao del segmento de pila As SS:SP apunta inicialmente al final de la pila. La pila se puede reinicializar a mano
MOV ax, @data MOV ss, ax MOV sp, OFFSET STACK
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 10

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Inicializacin de ES
El registro de segmento ES no se inicializa automticamente Hay que indicar, primero al ensamblador y luego al procesador que las variables de tipo FAR se van a acceder utilizando, por defecto, el registro ES. Si no se indica nada, el procesador utiliza el registro DS
ASSUME es:@fardata MOV ax, @fardata MOV es, ax

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

11

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Modos de direccionamiento
Indican al procesador cmo calcular el valor actual de un operando en tiempo de ejecucin

El mismo cdigo mnemnico se codifica de forma diferente en funcin del tipo de operando

La misma instruccin tiene diferente tamao y temporizacin en funcin del tipo de operando
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 12

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Modos de direccionamiento (II)


En funcin del lugar: En funcin de cundo se calcula el operando:
Inmediato: Se especifica el dato Registro: El dato est en un registro Memoria: El dato se encuentra en memoria Inmediato: Al ensamblar Directo de memoria: Al cargar el programa en memoria Registro e indirecto de memoria: En tiempo de ejecucin

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

13

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento inmediato
Consisten en constantes numricas que son conocidas o calculadas al ensamblar el cdigo Los valores inmediatos se codifican directamente en el programa Las instrucciones tienen de lmite 8, 16 o 32 bits para los operandos inmediatos Las cadenas de caracteres de ms de 2 no pueden ser operandos inmediatos Los operandos inmediatos pueden ser fuente de la instruccin, pero nunca destino Algunas instrucciones usan un nico operando que es inmediato
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 14

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento inmediato (II)


.DATA cinco nueve DB EQU .CODE .... ; Operando fuente es inmediato MOV bx, nueve + 3 ADD cinco, 3 OR bx, 00100100b IN al, 43h CMP cx, 200 ;Un nico operando que es inmediato RET 6 INT 21h 5 9 ; dato de memoria ; dato constante

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

15

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo de registro


Se utiliza el valor actual que hay dentro del registro en el momento en que se usa la instruccin. Slo se conoce el valor en tiempo de ejecucin Algunas instrucciones slo permiten ser utilizadas con determinados registros La mayora de las instrucciones son ms rpidas y ocupan menos si utilizan el acumulador (AX o AL) El uso de registros de segmento est permitido en pocas instrucciones

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

16

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo de registro (II)


Los registros que se pueden utilizar son:
Tipo de operando
Registros de 8 bits altos Registros de 8 bits bajos Registros de 16 bits de propsito general Punteros e ndices de 16 bits Registros de segmentos
2004 - 2005

Nombre del registro AH AL AX SP CS BH BL BX BP DS CH CL CX SI SS DH DL DX DI ES


17

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo de registro (III)


; Operandos fuente y destino son directo de registro ADD ax, bx MOV ds, ax XOR ah, bh ; El operando fuente es un registro AND stuff, dx SUB array[bx][si], ax ; El operando destino es un registro SHL ax, 1 CMP cx, contador ; El nico operando es un registro MUL bx POP cx INC ah

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

18

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento de memoria
Muchas instrucciones utilizan datos de memoria El procesador debe calcular la direccin del dato a procesar La direccin del dato se denomina direccin efectiva El clculo de la direccin depende del tipo de acceso a memoria
Acceso directo a memoria Acceso indirecto a memoria

No est permitido operaciones memoria-memoria

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

19

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo a memoria


Es un smbolo o constante que representa la direccin (segmento y offset) de una instruccin o un dato El offset es calculado al ensamblar el cdigo La direccin de cada operando, relativa al comienzo del programa, es calculada al enlazar el cdigo La direccin efectiva es calculada al cargar en memoria el programa La direccin efectiva es relativa a un registro de segmento. El registro por defecto es DS, pero puede ser otro si se especifica
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 20

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo a memoria (II)


Un operando de acceso directo a memoria se puede especificar como una expresin constante usando el operador de ndice ([]) Tabla[4] se refiere al byte que se encuentra con un offset de 4 a partir de la direccin de tabla. Es equivalente a tabla + 4 Si la etiqueta se omite en un acceso directo a memoria usando un ndice constante, se debe indicar el segmento
MOV ax, ds:[100h] o MOV ax, ds:100h

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

21

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento directo a memoria (III)


.DATA stuff DW .CODE ... MOV ax, stuff ; Carga el valor de la direccin stuff (direcc. de etiq) en AX etiq

MOV bx, OFFSET stuff ; Carga la direccin de stuff en BX JMP stuff JMP etiq JMP ax JMP [bx] ... etiq: 2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 22 ; Salta al valor de stuff (que es la direccin de etiq) ; Salta a la direccin de etiq ; Salta a AX, que es el valor de stuff ; Salta a [BX] (valor en la direccin de stuff)

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento indirecto a memoria


Permite el uso de registros para apuntar a valores en memoria Se utiliza este mtodo para operar con datos dinmicamente Slo se pueden utilizar 4 registros
BX y BP: registros base SI y DI: registros ndice

Se pueden utilizar separadamente o en parejas, con o sin desplazamiento El desplazamiento puede ser una constante y/o un acceso directo a memoria

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

23

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento indirecto a memoria (II)


Modos de acceso indirecto
Modo
Indirecto de registro [BX] [BP] [DI] Desplazamiento[BX] Desplazamiento[BP] Desplazamiento[DI] Desplazamiento[SI] [BX][DI] [BP][DI] [BX][SI] [BP][SI] Desplazamiento[BX][DI] Desplazamiento[BP][DI] Desplazamiento[BP][SI]

Sintaxis

Descripcin
La direccin efectiva est contenida en el registro La direccin efectiva es la suma del contenido del registro y el desplazamiento

Base o indexado

Base indexado

La direccin efectiva es la suma del contenido del registro base y del contenido del registro ndice La direccin efectiva es la suma del contenido del registro base, del contenido del registro ndice y el desplazamiento 24

Base indexado con desplazamiento

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento indirecto a memoria (III)


El indirecto de registro se utiliza para acceder a direcciones de memoria dentro de un segmento El base o ndice se utiliza para acceder a posiciones de memoria relativas a una tabla, un array unidimensional o una estructura El base indexado con o sin desplazamiento se utiliza para acceder a estructuras de datos complejas, como arrays multidimensionales Los registros base e ndice son intercambiables

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

25

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento indirecto a memoria (IV)


El registro de segmento a utilizar, para calcular la direccin efectiva es, por defecto, el registro DS Si en algn lugar de la expresin aparece el registro BP se utiliza el registro de segmento SS Los registros deben aparecer entre corchetes No se pueden usar dos registros base o dos registros ndice en el mismo acceso Para pasar de un elemento a otro de un array debe incrementarse el ndice en el nmero de bytes que ocupa cada elemento
2004 - 2005 TEMA 3: MODOS DE DIRECCIONAMIENTO 26

UNIVERSIDAD DE ALCAL
Departamento de Automtica

Direccionamiento indirecto a memoria


ADD dx, [bx] MOV dl, [bp + 6] SUB dx, 12[bx] XOR red[bx], dx ; Suma a dx la palabra situada en la posicin de memoria indicada por DS:BX ; Mueve a dl el byte de memoria situado en SS:BP+6 ; Resta a dx la palabra situada en DS:BX+12 ; Hace la XOR entre dx y la posicin de memoria DS:red + BX

AND dx, red[si]+3 ;Hace la AND entre dx y la palabra indicada por DS:red + SI + 3 DEC BYTE PTR [bx][si] CMP cx, here[bp][si] PUSH place[bx][di]+2 CALL cs:table[bx] ; Decrementa el byte apuntado por DS:BX + SI ; Compara cx con la palabra indicada por SS:here + BP + SI ; Guarda en la pila el contenido de la posicin DS:place + BX + DI + 2 ; Llama a la rutina que se encuentra en la posicin CS:table + BX

2004 - 2005

TEMA 3: MODOS DE DIRECCIONAMIENTO

27

También podría gustarte