Para empezar con el tema del direccionamiento indirecto, vamos a explicar una serie de conceptos básicos y luego nos pondremos con la formas más básicas de direccionamientos indirectos.
Los tipos de direccionamientos son tres:- Direccionamiento Inmediato
- Direccionamiento Directo
- Direccionamiento Indirecto
- El direccionamiento inmediato es cargar directamente el valor del operando (de cualquier tipo), por ejemplo L 32.
- El direccionamiento directo será del tipo L MW10 (donde el valor de MW10 sea el 32 anterior) es decir, en la carga se apunta directamente al sitio de la memoria donde reside el valor que queremos cargar.
Nada nuevo bajo el sol. Ahora bien, ¿qué pasa cuando queremos recorrer áreas de memoria de forma recursiva o leer un área dinámicamente?
Direccionamiento indirecto
Como decimos, podemos acceder a los valores de la memoria de una forma indirecta.. vamos a querer saber el contenido de una variable (o área de memoria) usando otra variable que se referirá a está área de la que queremos saber su valor.
Parece un poco enrevesado pero es bastante fácil de entender mediante un ejemplo: podemos abrir el DB10 con AUF de dos formas:
AUF DB10
o bien:
AUF DB[MW20], teniendo la marca MW20 el valor 10.
Esta última forma de cargar el valor de la marca MW10 es uno de los tipos de direccionamiento indirecto, pero hay varios:
- Direccionamiento Indirecto por Memoria con Número
- Direccionamiento Indirecto por Memoria con Puntero de Área
- Direccionamiento Indirecto por Registro e Intraárea (área interna)
- Direccionamiento Indirecto por Registro e Interárea (área cruzada)
El caso anterior, el usado es el primero, mediante número.
Direccionamiento Indirecto por Memoria
Dentro de los direccionamientos indirectos por memoria con número a su vez, podemos usar MW (o DW de un DB) o MD (o DD de un DB) para acceder:
- Usando formato palabra: accederemos a temporizadores, contadores , abriremos DB y accederemos a FB y FC.
- Usando formato doble palabra: accederemos a datos de tipo bit, byte, palabra y doble palabra.
Formato palabra - número (indexados)
Es el más fácil de entender: en un número entero (palabra) introducimos el valor de DB, FB , temporizador etc que queramos leer. Así podemos hacer un L 10 T MW 10 U T[MW10] con lo que estaremos leyendo el estado del temporizador T10. Digamos que nos sirve para valores operandos que están indexados mediante un número como son los DB , los contadores etc. Para hacer referencia a ellos, nos servimos de un número ya que existe una lista de estos elementos.Direccionamiento Indirecto con formato doble palabra - Punteros a área
Aquí ya se introduce el concepto estrella del direccionamiento indirecto... el puntero. Hagamos un pequeño paréntesis para ver este concepto. Un puntero no es más que una dirección. Nada más. No tiene un valor, sólo apunta con el dedo como un niño pequeño dónde mirar, pero no dice qué está viendo. Los punteros pueden ser:- Interárea (Área cruzada) : Por ejemplo P#M10.0, o P#E10.0 o P#DBX10.0
- Intraárea (Área interna): Por ejempo P#10.0
¿Se puede cargar los punteros de otra forma?
Pues sí. Resumiendo diremos que le damos la dirección bien mediante el puntero (P#10.0) o contando con los dedos cuántos bits tiene la dirección. Es decir: Podemos hacer, al igual que en el caso de arriba: L 80 (porque la dirección 10.0 son 80 bits) T MD10 U E[MD10] = A [MD10] ¿Es lo mismo? Extrictamente lo mismo. Hemos creado el puntero de la misma forma. Por tanto, de forma numérica, un puntero se verá como el número de bits de ese puntero. Para terminar, y como siempre, os dejo un pequeño video en el cual se explica todo lo anterior. Espero que os sea de utilidad. Recordarte finalmente que si estás interesado en formarte en Step 7, puede que te interese adquirir el libro "Cómo programar en Step 7 y no morir en el intento" donde puedes encontrar no sólamente el curso completo gratuito, sino muchas más entradas del blog que como sabes se irán actualizando para los que lo adquieran de forma gratuita. Si estás interesado, puedes echarle un vistazo a este enlace donde se explica qué es lo que contiene el libro, el precio y los métodos de pago.Referencias:



