Universidad Antonio Nariño

Aplicación Industrial de Micros
Código: 444405

CAPITULO 2
Programación en lenguaje ensamblador

2.2 Modos de direccionamiento

Direccionamiento de la memoria de datos (RAM)
La memoria interna se direcciona en forma directa por medio de los 5 bits “f” contenidos en las instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posición desde la 00 a la 1F. Como se vió en el capítulo correspondiente a los mapas de memoria, las direcciones 10 a 1F corresponden a los bancos de registros, por lo tanto, en los microcontroladores que tengan más de un banco, antes de acceder a alguna variable que se encuentre en esta zona, el programador deberá asegurarse de haber programado los bits de selección de banco en el registro FSR.

 
Los registros especiales y de uso general de la posición 00 a la 0f están presentes en todos los PIC16C5X, al igual que el banco 0 de registros. Los bancos 1, 2 y 3 de registros están presentes solo en el 16C57.
El registro FSR, además de servir para seleccionar el banco activo, sirve como puntero para direccionamiento indirecto. La posición 00 del mapa de RAM es la llamada dirección indirecta. Sí en cualquier instrucción se opera con la dirección 00, en realidad se estará operando con la dirección a donde apunte el contenido del FSR. Por ejemplo si el FSR contiene el valor 14, una instrucción que opere sobre la dirección 0, operara en realidad sobre la dirección 14. Se puede decir en este ejemplo que la posición 14 de memoria fue direccionada en forma indirecta a través del puntero FSR.

Ejemplo :

; Esta porción de programa borra 5 posiciones de memoria a partir de la dirección 12

FSR  equ  04                      ;(definición al comienzo del programa)
 .....................................
 .....................................

            movlw  5                ;prepara para repetir 5 veces
            movwf  08              ;(el registro 08 es el contador del loop)
            movlw  12h            ;apunta a la dirección 12h
            movwf  FSR  ;
loop:
            clrf  0                    ;borra una posición de memoria
            incf  FSR              ;apunta a la siguiente
            decfsz  08             ;si todavía no borra todas
            goto  loop             ;sige borrando
 .....................................
 .....................................
El direccionamiento indirecto es muy útil para el procesamiento de posiciones consecutivas de memoria, como en el ejemplo, o para el direccionamiento de datos en subrutinas.

Direccionamiento de la memoria de programa (EPROM, OTP)
La instrucción GOTO dispone solo de 9 bits en el código de operación para especificar la dirección de destino del salto. Al ejecutar una instrucción GOTO el microprocesador toma los dos bits que restan para completar la dirección de 11 bits, de los bits 5 y 6 de la palabra de estado. Estos últimos son llamados bits de selección de página (PA0 y PA1). El programador deberá asegurarse de que estos dos bits tengan el valor correcto antes de toda instrucción GOTO. Ver figura 2.2.1
 

FIG 2.2.1 Direccionamiento directo con instrucción GOTO

Deberá tenerse en cuenta además que es posible avanzar de una página a otra en forma automática cuando el PC se incrementa. Esto ocurre si el programa empieza en una página y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la última posición de una página a la primera de la siguiente, los bits PA0 y PA1 no se modifican, y por lo tanto sí se ejecuta una instrucción GOTO, CALL o alguna que actúe sobre el PC, esta producirá un salto a la página anterior, a menos que el programador tenga la precaución de actualizar el valor de dichos bits. Por este motivo es conveniente dividir el programa en módulos o rutinas que estén confinados a una página.

En el caso de la instrucción CALL, el direccionamiento se complica un poco más, ya que la misma solo dispone de 8 bits para especificar la dirección de destino salto. En este caso también se utilizan los mismos bits de selección de página para completar los bits décimo y decimoprimero de la dirección, pero falta el noveno bit. En estas instrucciones este bit se carga siempre con 0, lo que implica que solo se pueden realizar saltos a subrutina a las mitades inferiores de cada página. En este caso también el programador deberá asegurarse que el estado de los bits PA0 y PA1 sea el correcto al momento de ejecutarse la instrucción. Ver figura 2.2.2
 

FIG. 2.2.2 Direccionamiento directo con instrucción CALL

  Las instrucciones que operan sobre el PC como registro y alteran su contenido provocando un salto, responden a un mecanismo muy similar al de las instrucciones CALL para la formación de la dirección de destino. En este caso los bits 0 a 7 son el resultado de la instrucción, el bit 8 es 0 y los bits restantes se toman de PA0 y PA1.

Este mecanismo se llama paginado, y a pesar de que representa una complicación bastante molesta para el programador, resulta muy útil ya que permite ampliar la capacidad de direccionamiento de memoria de programa para las instrucciones de salto.


  índice de capítulo