11.1.3.1 Computed GOTO
A computed GOTO
is accomplished by adding an offset
to the Program Counter. An example is shown in the following code example.
A look-up table can be formed with an ADDWF PCL
instruction and a group of RETLW
nn instructions. The W register is loaded
with an offset into the table before executing a call to that table. The first instruction
of the called routine is the ADDWF PCL
instruction. The next instruction
executed will be one of the RETLW nn
instructions that returns the
value ‘nn
’ to the calling function.
The offset value (in WREG) specifies the number of bytes that the
Program Counter should advance and must be multiples of two (LSb = 0
).
In this method, only one data byte may be stored in each instruction location and room on the return address stack is required.
Computed GOTO
Using
an Offset Value
RLNCF OFFSET, W ; W must be an even number, Max OFFSET = 127
CALL TABLE
ORG nn00h ; 00 in LSByte ensures no addition overflow
TABLE:
ADDWF PCL ; Add OFFSET to program counter
RETLW A ; Value @ OFFSET=0
RETLW B ; Value @ OFFSET=1
RETLW C ; Value @ OFFSET=2
.
.
.