Introduccion a Ensamblador - Modos de Direccionamiento

Iniciado por ErielSinh, Diciembre 17, 2020, 02:32:40 AM

Tema anterior - Siguiente tema

0 Miembros y 5 Visitantes están viendo este tema.

Diciembre 17, 2020, 02:32:40 AM Ultima modificación: Diciembre 17, 2020, 02:40:43 AM por ErielSinh
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
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  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 emu8086

Direccionamiento 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


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:


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



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


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


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


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


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


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


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


Gran aporte compañero! Había leído de este tema el año pasado en unos apuntes, pero este post está más claro.

Gracias por compartir.
-Kirari