4.6.3 Location Counter
The current location within the active program section is accessible via
the symbol $
. This symbol expands to the address of the currently
executing instruction (which is different than the address contained in the program counter
(PC) register when executing this instruction). Thus:
goto $ ;endless loop
will represent code that will jump to itself and form an endless loop. By using this symbol and an offset, a relative jump destination can be specified.
Any address offset added to $
has the native
addressability of the target device. So, for baseline and mid-range devices, the offset is
the number of instructions away from the current location, as these devices have
word-addressable program memory. For PIC18 instructions, which use byte addressable program
memory, the offset to this symbol represents the number of bytes from the current location.
As PIC18 instructions must be word aligned, the offset to the location counter should be a
multiple of 2. All offsets are rounded down to the nearest multiple of 2.
For example:
goto $+2 ;skip...
movlw 8 ;to here for PIC18 devices, or
movwf _foo ;to here for baseline and mid-range devices
will skip the movlw
instruction on baseline or mid-range
devices. On PIC18 devices, goto $+2
will jump to the following
instruction; i.e., act like a nop
instruction.