반응형
옛날 8086CPU에서는 주소 버스가 20bit였기 때문에 최대 1MB의 메모리를 사용할 수 있었습니다.
하지만 CPU내부의 레지스터는 16bit방식이였기 때문에 최대 64kb의 메모리만 사용할 수 있었습니다.
때문에 인텔에서 세그먼트와 오프셋을 중첩시켜서 20bit짜리 물리 주소를 구해내는 방법을 고안해냅니다.
이때 세그먼트가 물리 주소의 상위 16bit를 정하고, 여기에 하위 16bit의 오프셋을 더해서 실제 물리 주소를 구해냅니다.
예를 들어 세그먼트 = 0x0200h, 오프셋 = 0x0114h라고 가정해봅시다. (16진수표기)
먼저 세그먼트는 상위 16bit를 정하기 때문에 왼쪽으로 4bit 시프트 시켜주어야 합니다.
16진수이기 떄문에 맨 뒤에 0을 하나 붙여서 세그먼트 = 0x02000h이고, 여기에 오프셋을 더해서 물리 주소를 구할 수 있습니다.
둘을 더하면 결과는 0x02000h + 0x0114h = 0x02114h가 됩니다.
이것을 0200h:0x0114h라고 표현할 수 있습니다.
또한 세그먼트 레지스터와 오프셋 레지스터는 서로 연관되서 사용되는 짝이 있습니다. 세그먼트:오프셋의 형태로 봅시다.
1. CS:IP
2. DS:SI, DI, BX
3. SS:SP, BP
4. ES:SI, DI, BX
예를 들어 CS레지스터를 사용한다면 오프셋은 IP레지스터를 사용하며, 이때 위의 예에서 말한 표기를
[CS]:0114h와 같이 표현할 수 있습니다.
반응형
'Computer Science' 카테고리의 다른 글
URL과 URI의 차이 (0) | 2021.01.05 |
---|---|
하드 링크와 심볼릭 링크 (0) | 2020.11.07 |
Memory의 종류와 역사 (0) | 2020.09.12 |
Virtual Machine(VM, 가상 머신) (0) | 2020.09.12 |
Hardware Abstraction Layer(HAL, 하드웨어 추상화 계층) (0) | 2020.09.12 |