This is an old trick, but some may not know about it. The problems: 1. Swap W and a file register without using any additional registers 2. Cyclically permute 2 registers and W i.e. A=W,B=A,W=B 3. Swap 2 file regs without changing W or any other registers. A bit of cheating is allowed i.e. we don't count the status register as having been 'used'. XORWF instructions modify the status.Z bit. But then again, so does MOVF. The answers (at least some of the possible ones). Let A and B represent the file registers to swap: 1. xorwf a,w xorwf a xorwf a,w 2. xorwf a,w xorwf a xorwf a,w xorwf b,w xorwf b xorwf b,w 3. xorwf b xorwf a xorwf b,w xorwf a,w xorwf b xorwf a xorwf b,w xorwf a,w Remember that you save _two_ file registers over the straightforward way of using temporary registers and move instructions. E.g. unless I am mistaken, the straightforward way of implementing (3) is movwf temp1 movf a,w movwf temp2 movf b,w movwf a movf temp2,w movwf b movf temp1,w Regards, SJH Canberra, Australia