Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modos de Direccionamiento
Modos de Direccionamiento
SUPERIOR DE MISANTLA
Lenguajes de interfaz
Unidad 1: Introducción al lenguaje
ensamblador
INGENIERIA EN SISTEMAS
COMPUTACIONALES
P R E S E N T A
Valentina García Luna
Bibliografía........................................................................................................ 12
2
Índice de tablas
3
Índice de imágenes
4
Modos de direccionamiento a memoria en ensamblador
Direccionamiento indirecto
Se trata de un direccionamiento similar al anterior, dado que de lo que se trata es de
transferir un dato desde o hacia la memoria, pero en este caso la dirección no se facilita
en la propia sentencia, de ahí que cuando el microprocesador vaya a ejecutar la
5
instrucción no pueda realizar directamente esa transferencia. En su lugar la dirección está
almacenada en un registro que, desde el punto de vista del programa, actuaría como un
puntero. Por ejemplo:
MOV AL, [RX]
Como en el direccionamiento directo, el tamaño de uno de los operandos marca el
número de bytes a transferir. La dirección de memoria puede ser el destino o el origen,
también como en el direccionamiento directo. Para ejecutar una instrucción como la
anterior el microprocesador tiene que obtener el código de operación y descodificarlo. En
ese momento sabe que uno de los operandos, en el caso anterior el registro BX, contiene
una dirección que debe colocar en el bus de direcciones, llevando a cabo la lectura o
escritura.
Una variante de este tipo de direccionamiento es la que incluye un desplazamiento sobre
la dirección base contenida en el registro. La forma de expresar el desplazamiento sería la
siguiente:
MOV AL, [BX+4]
Asumiendo que el registro BX contuviese la dirección donde está alojada una cierta
estructura de datos que el programa necesita utilizar, el desplazamiento adicional sería
útil para acceder a campos de dicha estructura.
Direccionamiento directo
En este tercer modo de direccionamiento uno de los operandos, puede ser el destino o
bien el origen, es una dirección de memoria. Esta, al igual que ocurre con el dato
inmediato del modo de direccionamiento previo, es recuperada durante la descodificación
de la instrucción, por lo que el procesador la tiene a su disposición cuando va a ejecutar la
operación. En ese momento la coloca en el bus de direcciones e indica a la memoria si
tiene que leerla, y poner su contenido en el bus de datos, o bien si debe recuperar la
información enviada por el bus de datos y escribirla en esa dirección.
Para diferenciar un dato de 16 bits, como puede ser 12 8 0 h, de la dirección de memoria
12 8 Oh, ya que el ensamblador no puede saber ante una instrucción como MOV AX, 12 8
Oh si el segundo operando es un dato inmediato o bien una dirección de memoria, existen
dos posibilidades:
• Colocar la dirección entre corchetes, de manera que la instrucción quedaría como
MOVAX, [1280h].
• Declarar la dirección como una etiqueta, una capacidad que ofrecen todos los
ensambladores, de forma que la instrucción sería del tipo MOV AX, Valor, siendo Valor la
etiqueta previamente definida.
6
Al acceder a memoria la dirección efectiva (real) se obtiene a partir de un registro de
segmento y la dirección indicada en la instrucción, que sería el desplazamiento. Cada
instrucción asume un registro de segmento por defecto, registro que puede ser cambiando
por otro indicado explícitamente en la propia instrucción. En capítulos posteriores
conocerá con exactitud la forma en que se generan estas direcciones y la función que
tienen los registros de segmento, tanto en modo real (16 bits) como en modo protegido
(32 bits).
El número de bytes transferidos desde o hacia la memoria, cuando se utiliza este
direccionamiento directo o cualquier otro que opere sobre memoria, será deducido por el
propio ensamblador siempre que sea posible, observando el tamaño del otro operando.
En una instrucción como MOV AX, [ 12 8 Oh], por ejemplo, se recuperaría el contenido de
la posición de memoria indicada y la siguiente, 16 bits en total, ya que el registro AX es de
16 bits. En caso de que no sea posible deducir el tamaño, éste puede especificar
explícitamente con las palabras BYTE, WORD, DWORD, etc., que reconocen la mayoría
de los ensambladores.
Direccionamiento indexado
7
Direccionamiento inmediato
8
Tabla 1.1 Tabla de direccionamiento
9
Ejemplo Direccionamiento indirecto:
.model small
.stack
.data
var1 db 0Ah
arreglo1 db 1,5,10,15,0Bh,0Ch,0Dh
.code
inicio:
mov ax,@data
mov ds,ax
mov al,[3]
end inicio
10
Imagen 1.2 Ejecución del código en turbo Assembler
11
Imagen 1.4 Resultados del código
12
Bibliografía
13