Computer Science

8086CPU의 20bit물리 주소 지정 방법

닉네임못짓는사람 2020. 9. 18. 05:50
반응형

옛날 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와 같이 표현할 수 있습니다.

반응형