%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20.png)
왜 세그먼트 레지스터용으로 16비트, "0" 비트 4개를 포함하는 20비트의 여유 공간이 있는 메모리 주소를 찾아야 합니까?
마찬가지로 CS 레지스터가 346AH라면 메인 메모리의 코드 세그먼트는 20비트인 346A0H가 됩니다. 우리가 왜 그러는 걸까요?
메모리 세그먼트는 64KB(?)인데, 그 20비트를 제외한 나머지 공간은 어떻게 될까요?
죄송합니다. 저는 컴퓨터 아키텍처에 능숙하지 않습니다!
답변1
마찬가지로 CS 레지스터가 346AH라면 메인 메모리의 코드 세그먼트는 20비트인 346A0H가 됩니다. 우리가 왜 그러는 걸까요?
분명히 당신이 언급하고있는 것 같습니다x86 분할, 원래 Intel 8086/88 CPU에서 사용된 것과 같습니다. 이런 종류의 "세그먼트"는 보편적이지 않습니다. 기억에 대한 다른 정의가 있습니다 "세그먼트".
역사적 맥락에서 실리콘과 (페라이트) 메모리는 매우 비쌌다는 사실을 깨달아야 합니다. 고가의 메인프레임 컴퓨터에 대응하기 위해,미니컴퓨터1970년대에 저가형 컴퓨터를 제공하기 위해 등장했습니다. 이러한 저비용에 대한 초점은 일반적으로 16비트 주소 버스(예: DEC PDP, Data General Nova, HP 21xx)와 최대 64KB의 메모리를 의미합니다. 그러나 시스템 요구 사항이 증가함에 따라 더 많은 메모리가 필요한 경우가 많았습니다.
기존 16비트 주소를 계속 사용하면서도 더 많은 메모리에 액세스할 수 있는 메모리 체계가 고안되었습니다.
16비트 주소로 64KB 메모리 용량을 확장하는 가장 일반적인 기술은 메모리 뱅크를 사용하는 것이었습니다. 즉, 유효 메모리 주소의 실제 상위 비트는 뱅크 레지스터에 의해 지정됩니다. 메모리 뱅크 사용의 주요 이점은 메모리 하위 시스템(즉, CPU 외부)에서 구현될 수 있으므로 모든 CPU에 장착할 수 있다는 것입니다.
마이크로프로세서의 출현으로 16비트 주소 지정을 사용하는 시스템(예: Intel 8051, Zilog Z80)은 유사한 방식으로 발전하는 경향이 있었습니다. 즉, 뱅크 메모리를 통합했습니다.
Intel x86(그리고 내가 알고 있는 적어도 하나의 다른 시스템)에서 사용되는 세그먼트 주소 지정은 프로세서와 통합되어 더욱 다양해졌습니다.
메모리 뱅크는 원래 메모리 공간에서 고정된 영역만 차지할 수 있는 반면, x86 세그먼트는 세그먼트 레지스터 사양과 결합된 16비트 오프셋을 사용하여 확장된 20비트 주소 공간에 대한 액세스를 제공합니다.
x86 세그먼트 주소는 실제로 16개의 주소 비트로만 잘린 20비트 주소입니다.
해당 세그먼트는 모든 단락에서 시작할 수 있습니다(주소 모듈로 16은 0입니다).
따라서 20비트 메모리 공간에서 x86 세그먼트의 실제 시작을 얻으려면 잘린 0비트 4개를 추가해야 합니다.
에 따라x86 메모리 모델, x86 소프트웨어는 주로 16비트 "주소"(이전 소프트웨어와 마찬가지로)를 사용할 수 있지만 이전 16비트 주소 소프트웨어보다 더 효과적인 메모리에 액세스할 수 있습니다.
IOW x86 세그먼트는 하드웨어를 20비트 주소 버스로 확장하는 방법이었지만 소프트웨어가 대부분 16비트 "주소"를 사용하도록 허용하고 20비트 산술(즉, 20비트 폭 레지스터 및 데이터)이 필요하지 않았습니다.