Intel’s 8086 and 8088 took an interesting (but seemingly infuriating) approach to solving the problem, combining aspects of bank switching and the approach of splitting addresses into chunks capable of being stored in registers. Despite being a 16bit CPU architecture, this scheme allowed these processors to access a 20bit (1MiB) address space. When wanting to access memory, a programmer would first write to a 16bit segment register, loading the address of the base of a so-called segment. When multiplied by 16 (a 4 position left shift), the contents of this segment register would give the base address of a 64KiB window of sorts within the 20bit address space, which could be accessed conventionally by the 16 bit Instruction pointer/PC. It’s a lot like the bank switching scheme discussed previously except that the beginning and end addresses of a bank are not fixed and can be relocated. This is called a segmented address space.