There is another, special, register called the Working Register. This is used by many of the PIC microcontroller assembler instructions, for example it is possible to add the contents of the working register to one of the file registers. (but we cannot add one file register to another)
This means that if I am writing assembler and I want to add two numbers in two registers together I have to move one of them into the working register, add the other to it, and then store the result. The BoostC compiler produces this code for us automatically when we perform an addition. The working register is not held in an addressable location, but is used directly by the assembler instructions.
On the right you can see the PIC microcontroller assembler code which will add two numbers together and store the result in a third location. Above it I have placed the equivalent C. Note how we move values in and out of the working register. We have to do this, because it is the only place which can do calculations.
C Source
k = i + j ;
Assembler
movf i, W ; get i into W addwf j, W ; add j to W movwf k ; store W in k