1. An instruction set for a microcontroller comprising a data memory divided into a plurality of memory banks wherein said data memory comprises more than one memory bank of said plurality of memory banks that form a block of linear data memory to which no special function registers are mapped, a bank select register which is not mapped to said data memory for selecting a memory bank, and an indirect access register mapped to at least one memory bank, the instruction set comprising: a plurality of instructions operable to directly address all memory locations within a selected bank; at least one instruction that provides access to said bank select register; at least one instruction performing an indirect address to said data memory using said indirect access register.