When I tested this it was good some help....
sometimes is enough to save W register.
-- interrupt settings
var byte w_temp
var byte status_temp
procedure push is
assembler
movwf w_temp
swapf status, w
movwf status_temp
end assembler
end procedure
procedure pop is
assembler
swapf status_temp, w
movwf status
swapf w_temp, f
swapf w_temp, w
end assembler
end procedure
procedure interrupt is
pragma interrupt
-- disable all interrupts
intcon_gie = low
-- save w register and status
push
-- check sources of interrupt port_b on change
if intcon_rbif then
-- do your job
-- restore status and w
pop
-- asm retfie
-- prepare for next interrupt port_b on change
intcon_rbif = low
end procedure