I've read the processor docs and programmed x86 assembly in both real and protected mode, so I know a thing or two about segments. People eventually decided segments are no good, and compilers and OS's universally use paging instead to give each process its own address space.
But the "memory model" concept used by DOS and early Windows compilers was incredibly confusing. Did anyone here ever understand it?