세그먼트 레지스터 주소 접근

세그먼트 레지스터 설명 부분에서, 과거 IA-16에서는 세그먼트 레지스터를 이용하여 사용 가능한 물리 메모리의 크기를 키우려고 했다고 하며 그 예를 들어주고 있는데 그 예가 이해가 잘 안 갑니다. 그 예는 다음과 같습니다.

예를 들어 IA-16에서는, 어떤 주소를 cs:offset이라고 한다면, 실제로는 cs<<4+offset의 주소를 사용하여 16비트 범위에서 접근할 수 없는 주소에 접근할 수 있었습니다.

여기서 cs<<4+offset이 왜 16비트 범위에서 접근할 수 없는 주소인지, 그리고 이런 방법으로는 접근할 수 있는 이유가 무엇인지 궁금합니다.

#시스템_해킹 #배경지식
작성자 정보
답변 2
avatar
wyv3rn
무플 방지 위원회장

https://ko.m.wikipedia.org/wiki/X86
에 잘 설명되어있어 공유 드립니다.

주요 부분은 아래와 같습니다

`인텔 80286부터는 실제 모드(real mode)라는 프로세서 모드가 부팅시 기본으로 활성화되었다. 실제 모드는 20비트의 주소를 사용할 수 있으며, 따라서 1MiB의 메모리를 접근할 수 있다. 또한 바이오스 루틴과 주변 장치를 소프트웨어적으로 직접 접근할 수 있으나, 멀티태스킹과 같은 개념을 하드웨어적으로 지원하지는 않는다.

실제 모드에서는 메모리를 접근할 때 해당하는 16비트 세그먼트와 실제로 사용되는 16비트 주소를 합쳐서 20비트 주소를 만드는데, 예를 들어 DS가 A000h이고 SI가 5677h이면 DS:SI는 DS × 16 + SI = A5677h라는 주소를 가리키게 된다. 메모리 접근에 사용할 수 있는 세그먼트는 네 개(CS, DS, ES, SS) 있으며, 그중 CS와 SS는 프로그램 실행에 밀접한 연관이 있기 때문에 실제로는 DS와 ES만을 사용했다.`

2023.05.10. 09:25
avatar
wyv3rn
무플 방지 위원회장

여기서 ds x 16이 4 shift와 동일합니다

2023.05.10. 21:57
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기