Next are the functions of moving an immediate value out to memory (Flash or SRAM). In this case the compiler has many forms to chose from in terms of instruction length and address mode to do just what is needed, and nothing more, for the most optimum performance and memory footprint. For example, if just one byte of immediate data needs to be moved to a register, why waste a longer instruction when a 3-byte form will do it? And finally, here are the remaining forms of MOV, all very compact at only two bytes each, and very powerful. Take the last one for example, moving a 32-bit data item from one memory location to another memory location, with the 32-bit addresses of each of these locations stored in general registers as shown. This powerful memory-to-memory move occupies only two bytes of code space.