That's called the
flat memory model. Basically, a program is 'told' it has memory locations 0x00000000 <-> 0xFFFFFFFF (Edit: or would it be 0x00000000 <-> 0xXXXXXXXX where XXXXXXXX is the last memory location it could access? Can someone clarify, please?) in it's address space when really it might only have 0xFF7C00BB <-> 0xFFAC00BB. The MMU (
Memory Management Unit) on the CPU translates each memory access into it's real one.
Mandatory Wikipedia Link:
http://en.wikipedia.org/wiki/Flat_memory_model
The purpose of it is so that programs don't have to compute offsets themselves. They can just pretend their memory starts at 0.
Edit 2: I have a feeling you're going to ask "But what did they do before that was invented?"
They didn't have multitasking then; only one program could be in RAM at a time (with the OS in ROM) so they actually did get to trample the entire address space.
I believe Intel processors have used it (through
segmentation) since at least the 8086, although I'm sure it predates the x86.
Edit 3: Of course, the above hexadecimal integers assume 32-bit addressing...