인텔 8086의 경우 16비트 단위로 동작한다.
즉, 16비트 => 64KB의 메모리만 사용가능.
하지만, 실제 물리 메모리인 1MB(20비트)까지 지원하기 위해서 세그먼트 레지스터를 사용하기 시작.
세그먼트 레지스터?
이런식으로 20비트까지 표현할 수 있게 되었다.
하지만 offset을 16비트 레지스터로 표현하기 때문에 한 segment의 최대 크기는 64KB에 해당한다.
virtual memory기법이 적용되었는지는 잘 모르겠음. 애초에 base address + offset 형식이니까 충분히 사용하기 좋은 형태이긴 하다.
내 생각에는 사용되었을듯. 개별 프로그램마다 세그먼트 별로 0부터 시작해서 메모리를 사용하고, 실제 물리 메모리에 매핑될 때에는 segment register로 매핑되서 사용하면 공유 메모리도 충분히 구현하기 쉽고 여러모로 장점이 많다.
어셈블리어에서의 사용
지금도 세그먼트 레지스터는 16비트이다. 이전 아키텍쳐와의 호환성 때문이라는듯.
현대의 아키텍쳐는 flat address space model을 사용하므로 segmentation은 사용하지 않는다. 그러므로 ds:0x...이라고 해도 사실상 그냥 0 + 0x...이라고 생각하면 될 듯.