Vous êtes sur la page 1sur 11

Trabajo 1

Unidad 4.- Generacin de cdigo


objeto

Instituto Tecnolgico de Lzaro


Crdenas
Profesor:
Ing. Marcelo Alonso
Mondragn
Materia:
Lenguajes y autmatas II
Integrantes del proyecto:
Marco Antonio Villanueva
Guzmn

Modos de direccionamiento
Los llamados modos de direccionamiento son las diferentes maneras de
especificar en informtica un operando dentro de una instruccin (lenguaje
ensamblador). Cmo se especifican e interpretan las direcciones de memoria
segn las instrucciones.
Un modo de direccionamiento especifica la forma de calcular la direccin de
memoria efectiva de un operando mediante el uso de la informacin contenida en
registros y / o constantes, contenida dentro de una instruccin de la mquina o en
otra parte.
El trmino "modo de direccionamiento" est sujeta a interpretaciones diferentes: o
bien "direccin de memoria de modo de clculo" o "modo de acceso operando".
Bajo las instrucciones de la primera interpretacin, que no puede leer o escribir de
la memoria a la memoria (como "aadir literal de registro"), se considerar que no
tienen un "modo de direccionamiento". La segunda interpretacin permite para las
mquinas tales como VAX, que utilizan bits de modo operando para permitir un
operando literal. Slo la primera interpretacin se aplica a las instrucciones tales
como "carga efectiva de direccin".

Tipos de direccionamiento
Todo modo de direccionamiento cuenta con el direccionamiento implcito,
direccionamiento inmediato, direccionamiento directo, direccionamiento indirecto y
el direccionamiento relativo donde cada uno tiene una funcin a registros o pilas.
El propio cdigo de operacin indica la direccin del operando.

Direccionamiento implcito
En este modo de direccionamiento no es necesario poner ninguna direccin de
forma explcita, ya que en el propio cdigo de operacin se conoce la direccin del
(de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere
operar.
1

Supongamos una arquitectura de pila, las operaciones aritmticas no requieren


direccionamiento explcito por lo que se ponen como:
- add
- sub
...
Por qu? Porque cuando se opera con dos datos en esta arquitectura se sabe
que son los dos elementos del tope de la pila:
Ejemplo de una pila
1 2 3 4 5 6 <- pila
top() es 1
ntop() es 2
donde top() representa el tope de la pila y ntop() el siguiente al tope de la pila y
son estos argumentos con los que se opera al llamar a una orden en concreto.
Otro ejemplo de este tipo de direccionamiento lo podemos encontrar en la
arquitectura de acumulador (AC) donde siempre hay un parmetro implcito y este
es el AC.
Para finalizar y dejar este modo de direccionamiento generalizado para las
arquitecturas ms usuales, remarcamos que tambin podemos encontrarlo en la
arquitectura con registros de propsito general, por ejemplo con rdenes como
setc, que pone a 1 el registro c (acarreo).

Direccionamiento inmediato
En este modo el operando es especificado en la instruccin misma. En otras
palabras, una instruccin de modo inmediato tiene un campo de operando en vez
de un campo de direccin. El campo del operando contiene el operando actual que
se debe utilizar en conjunto con la operacin especificada en la instruccin. Las
2

instrucciones de modo inmediato son tiles para inicializar los registros en un valor
constante.
Ejemplo:
El operando es una constante situada detrs del cdigo de la instruccin. Sin
embargo, como registro destino no se puede indicar uno de segmento (habr que
utilizar uno de datos como paso intermedio).
ADD AX,0fffh
El nmero hexadecimal 0fffh es la constante numrica que en el direccionamiento
inmediato se le sumar al registro AX.
Al trabajar con ensambladores, se pueden definir smbolos constantes (ojo, no
variables) y es ms intuitivo:
Dato EQU 0fffh;

smbolo constante

MOV AX, Dato


Si se referencia a la direccin de memoria de una variable de la siguiente forma,
tambin se trata de un caso de direccionamiento inmediato:
Dato

DW
MOV

0fffh;

ahora es una variable

AX,OFFSET dato ; AX = "direccin de memoria" de dato

Porque hay que tener en cuenta que cuando traduzcamos a nmeros el smbolo
podra quedar:
17F3:0A11 DW

FFF

MOV AX,0A11

Direccionamiento Directo
El campo de operando en la instruccin contiene la direccin en memoria donde
se encuentra el operando.
En este modo la direccin efectiva es igual a la parte de direccin de la
instruccin. El operando reside en la memoria y su direccin es dada directamente
por el campo de direccin de la instruccin. En una instruccin de tipo ramificacin
el campo de direccin especifica la direccin de la rama actual.
Con este tipo de direccionamiento, la direccin efectiva es contenida en la misma
instruccin, tal como los valores de datos inmediatos que son contenidos en la
instruccin. Un procesador de 16 bits suma la direccin efectiva al contenido del
segmento de datos previamente desplazado en 4 bits para producir la direccin
fsica del operando.
Ejemplo:
El operando est situado en la direccin indicada en la instruccin, relativa al
segmento que se trate:
MOV AX,[57D1h]
MOV AX,ES:[429Ch]

Esta sintaxis (quitando la 'h' de hexadecimal) sera la que admite el programa


DEBUG (realmente habra que poner, en el segundo caso, ES: en una lnea y el
MOV en otra). Al trabajar con ensambladores, las variables en memoria se pueden
referenciar con etiquetas simblicas:
MOV AX,dato
MOV AX,ES:dato
dato

DW

1234h

; variable del programa

En el primer ejemplo se transfiere a AX el valor contenido en la direccin apuntada


por la etiqueta dato sobre el segmento de datos (DS) que se asume por defecto;
en el segundo ejemplo se indica de forma explcita el segmento tratndose del
segmento ES. La direccin efectiva se calcula de la forma ya vista con
anterioridad: Registro de 8segmento * 16 + desplazamiento_de_dato (este
desplazamiento depende de la posicin al ensamblar el programa).
Direccionamiento registro
Es el modo de direccionamiento utilizado para obtener operandos almacenados en
uno de los ocho registros de propsito general. La instruccin contiene un
campoinstc1 de 3 bits que codifica los ocho posibles registros. La expresin de la
direccin efectiva y el valor del operando se muestran en el siguiente apartado.
La direccin efectiva del operando, en este caso, no es una direccin de memoria,
sino la de uno de los registros de propsito general. La siguiente figura muestra el
funcionamiento de este modo de direccionamiento y un ejemplo.
Ejemplo:

En la figura, el cdigo de operacin


0x89
No slo indica que se realiza una operacin de mover, sino que el primer operando
es de tipo registro. El nombre del registro est codificado en el segundo byte.
Tambin en este byte, se codifica el tipo del segundo operando, que es igualmente
de tipo registro. Para ello se utiliza el campo R/M del byte ModR/M.
Direccionamiento absoluto
El campo de operando contiene una direccin en memoria, en la que se encuentra
la instruccin. Y no se cancela.
Ejemplo:

Como muestra la figura, la direccin de memoria ocupa 4 de los bytes que


codifican la instruccin. En el ejemplo que se muestra, la direccin es
6

0x0000059A
Pues los datos se almacenan en little endian. La representacin en ensamblador
de este modo de direccionamiento es mediante una etiqueta. El ensamblador
asigna a cada una de ellas un valor, y cuando se utiliza en una instruccin se
reemplaza el smbolo por el valor de su direccin de memoria.

Direccionamiento indirecto
Atreves de registro
En este modo el campo de la direccin de la instruccin da la direccin en donde
la direccin efectiva se almacena en la memoria. El control localiza la instruccin
de la memoria y utiliza su parte de direccin para acceder a la memoria de nuevo
para leer una direccin efectiva. Unos pocos modos de direccionamiento requieren
que el campo de direccin de la instruccin sea sumado al control de un registro
especificado en el procesador. La direccin efectiva en este modo se obtiene del
siguiente clculo:
Dir. efectiva = Dir. de la parte de la instruccin + Contenido del registro del
procesador...

Ejemplo:

mov AX,[DI]
Establece que el contenido de la palabra de memoria cuya direccin est indicada
por el contenido del registro DI, sea copiado en el registro AX.

Direccionamiento relativo
Relativo a un registro base
Consiste, al igual que el indirecto a travs de registro, en calcular la direccin
efectiva (EA, effective address) como la suma del contenido del registro base y un
cierto desplazamiento (offset) que siempre ser positivo. Esta tcnica permite
cdigos reentrantes y acceder de forma fcil y rpida a posiciones cercanas de
memoria. Este modo de direccionamiento es muy usado por los ensambladores
cuando se llaman a las funciones (para acceder a los parmetros almacenados en
la pila).
La direccin de un operando se obtiene de la suma del nmero y el contenido de
un registro base (el BX o el BP), relativo al segmento seleccionado. El modo
relativo a base es ms usado frecuentemente para acceder a estructuras de datos
complejas.

Ejemplo:
MOV CL,[BP]+DESP
8

Copia el contenido de la posicin de memoria cuya direccin est determinada por


la suma del contenido de BP y DESP, en el registro CL.
Relativo a un registro ndice
Es similar al anterior, excepto que es el contenido del registro ndice el que indica
el desplazamiento que se produce a partir de una direccin de memoria que se
pasa tambin como argumento a la orden que utiliza este modo de
direccionamiento. Aunque en esencia son dos modos equivalentes. La EA se
calcula como la suma del contenido del registro ndice y una direccin de
memoria.
Indexado respecto a una base
Resulta de la combinacin de los modos de direccionamiento Relativo a Base e
Indexado Directo.
Ejemplo:
mov DH,VECTOR[BX][DI]
Seala que el contenido de la posicin de memoria cuya direccin viene indicada
por la suma de los contenidos de los registros BX y DX y del desplazamiento
establecido por el identificador VECTOR, sea copiado en DH.
Relativo al contador del programa
Consiste en direccin una posicin de memoria usando como registro base al
contador de programa (PC), el funcionamiento es anlogo al direccionamiento
respecto a registro base con la salvedad de que, en este caso, el offset puede ser
tambin negativo.
De pila
Se utiliza cuando el operando est en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila (tipo LIFO),
las cuales estn marcados por el fondo de la pila y el puntero de pila (*SP), El
puntero de pila apunta a la ltima posicin ocupada. As, como puntero de
9

direccionamiento usaremos el SP. El desplazamiento ms el valor del SP nos dar


la direccin del objeto al que queramos hacer referencia. En ocasiones, si no
existe C. de desplazamiento solo se trabajara con la cima de la pila. Este tipo de
direccionamiento nos aporta flexibilidad pero por el contrario, es mucho ms
complejo que otros tipos estudiados ms arriba.

10

Vous aimerez peut-être aussi