En este tema veremos algunos modos de direccionamiento en la memoria, cuando hablamos de esto nos referimos a como podemos identificar una localizacion de memoria, en la memoria de la computadora tenemos mucha informacion almacenada, cuando un programa Software necesita recuperar esta informacion necesita localizar su ubicacion tambien cuando necesita almacenar informacion debe almacenarla en una direccion de memoria, asi mismo, cuando un dispositivo fisico Hardware necesita utilizar informacion o almacenarla necesita recuperar la direccion de memoria.
Cada celda de memoria esta identificada por un numero o direccion de memoria, estos espacios ocupan un byte = 1 conjunto de 8 bits, este es el tamaño minimo que se utiliza para almacenar datos o instrucciones
(https://i.ibb.co/rHB6YY8/01.jpg)
En este tema aprenderemos a:
- Como trabaja cada modo de direccionamiento de datos en la memoria,
- Aprenderemos a formar instrucciones en lenguaje de ensamblador para utilizar los modos de direccionamiento,
- Utilizar el direccionamiento que sea mas apropiado para cada caso que necesitemos
Formato de una instrucción: existe una sintaxis general para una instrucción
INSTRUCCION DESTINO,ORIGEN
El Destino es donde se deja el resultado de la operacion, en este caso se deja lo que esta almacenado en ORIGEN o su dirección
Existen algunas pocas instrucciones que solo funcionan con un operador y otros con ningun operador
INSTRUCCION DESTINO
INSTRUCCION
Clases de Instrucciones: las instrucciones por su comportamiento se clasifican en:
- Instrucciones de Procesamiento: se realiza un proceso aritmetico o logico
- Instrucciones de Acceso a Memoria: se encargan de trasnferir informacion a la memoria o desde la memoria
- Instrucciones de Transferencia de Datos: nos ayuda a enviar y recibir informacion utilizando los dispositivos de entrada y salida
- Instrucciones de Control: alteran el flujo de control cuando un programa esta en ejecucion
Para el mejor entendimiento del tema se necesita que tengan conocimiento de la arquitectura del microprocesador 8086 u 8088 aunque en general utilizaremos toda la programacion orientada al 8086, en el siguiente link encontraran toda la informacion necesaria https://www.alpertron.com.ar/8088.HTM (https://www.alpertron.com.ar/8088.HTM)
(https://www.alpertron.com.ar/8088.PNG)
Modos De Direccionamiento de Memoria: existen varios modos de direccionamiento, nosotros veremos los 7 mas importantes, para los ejemplos de cada modo de direccionamiento utilizaremos un ejemplo en
emu8086Direccionamiento Inmediato: En la instruccion esta incluida directamente el operando, es muy util cuando queremos inicializar los registros con un valor constante
Ejemplo:
MOV BX,15
; movemos el valor 15 y lo almacenamos en el registro BX
(https://i.ibb.co/XFq5XrZ/direccionamientoinmediato.jpg)
ahi podemos ver un ejemplo del direccionamiento inmediato; movemos 105hexadecimal al registro AX, 10octal al registro BL y un numero binario equivalente a 132hexadecimal en binario
Ejemplo 2:
(https://i.ibb.co/YT1QLRY/direccionamientoinmediato2.jpg)
En este ejemplo almacenamos b800h en AX y luego almacenamos lo contenido en AX en ES
En el ultimo ejemplo inicializamos una variable y luego la almacenamos en un registro
(https://i.ibb.co/5F8GS1n/direccionamientoinmediato3.jpg)
Direccionamiento de Registros: Para mover el contenido de un registro AMBOS deben ser del mismo tamaño
MOV BX,AX
MOV AL,BL
Ejemplo: movemos 1133h a AX, el valor contenido en AX en BX 1133h, la parte de AH = 33 a DH y la parte AL=11 a DL
(https://i.ibb.co/Stkbc6x/direccionamientoderegistros01.jpg)
Direccionamiento Directo: para explicar esto utilizamos algo como MOV OPERANDO1, [direccion_de_memoria] almacenamos en OPERANDO1 lo que este contenido en la direccion de memoria, tambien funciona con MOV [direccion_de_memoria],OPERANDO2 movemos lo que esta contenido en OPERANDO2 y lo almacenamos en la direccion de memoria especificada
(https://i.ibb.co/CH9Zs5B/direccionamientodirecto01.jpg)
Direccionamiento Indirecto de Registro: utilizamos los registros de segmento mas un registro base bx/bp o indice SI/DI para apuntar a una direccion de memoria, ampliamos nuestro rango de direccionamiento de memoria apuntada normalmente se usa para algunas funciones especiales en assembler
(https://i.ibb.co/VjyjB4G/direccionamientoindirectoderegistro01.jpg)
Direccionamiento Relativo de Base: la direccion del operando se obtiene de la suma del numero y el contenido de un registro base BX/BP, este direccionamiento es el mas usado para acceder a estructuras de datos complejas
(https://i.ibb.co/Wfn4Fjk/direccionamientorelativodebase.jpg)
Direccionamiento Indexado Directo: El operando se encuentra en una direccion dada por la suma de un registro de segemento*16, un registro indice SI o DI y un desplazamiento de 8 o 16 bits
(https://i.ibb.co/6NLLV3Y/Direccionamientoindexadodirecto.jpg)
Direccionamiento Indexado a Base: el operando se encuentra en una direccion especificada por la suma de un registro de segmento*16, uno Base, uno de indice y opcionalmente un desplazamiento de 8 a 16 bits
MOV AX,ES:[BX+DI+DESP] ó MOV AX,ES:desp[BX][DI]
MOV CS:[BX+SI+DESP],CX ó MOV CS:desp[BX][SI],CX
No todos los registros pueden combinarse entre si
Combinaciones de registros de segmento y desplazamiento En la siguiente tabla podemos ver todas las posibles combinaciones de registros de segmento y registros de desplazamiento
(https://i.ibb.co/rZSTzkY/talba-de-combinaciones-de-registros.jpg)
Con esto ya podremos utilizar los modos de direccionamiento de memoria en ensamblador, existen ciertas direcciones de memorias que no podemos utilizar ya que estan asignadas a funciones especiales
Mapa de Memoria de un 8086/8088(https://i.ibb.co/c8fWBTQ/mapa-de-memoria.jpg)