대답 1:

이는 8086에서 프로그램에 사용 된 주소 (이를 호출 할 때 논리 또는 가상 주소)는 16 비트이지만 8086이 RAM으로 보내는 실제 주소는 20 비트임을 의미합니다.

왜? 16 비트 = 64KB의 주소 공간 (여기서 20 비트의 주소 = 1MB의 메모리) 따라서 일반 16 비트 주소 지정 (이 경우 16 배 더 많은 메모리)으로 가능한 것보다 더 많은 메모리를 지정할 수 있습니다.

어떻게? 리얼 모드 세그먼트 주소 지정 체계를 상기하십시오. 8086에서 RAM으로 전송 된 주소 = 세그먼트 레지스터 * 16 + 오프셋 (css : ip, ds : si, es : di 등으로 세그먼트 레지스터 및 오프셋 대체)

따라서 세그먼트 레지스터와 오프셋은 16 비트이지만 실제 주소는 20 비트입니다.

(알다시피, 16을 곱하면 왼쪽으로 4를 쉬프트하는 것과 같습니다. 4를 왼쪽으로 왼쪽으로 16 비트 주소는 20 비트 주소가됩니다 (오프셋은 아직 추가되지 않았습니다))


대답 2:

전기 엔지니어가 무언가를 설계 할 때주의를 기울여야하는 가장 중요한 목표 중 하나는 설계 및 판매시 비용이 얼마나 들지입니다. 때로는 비용을 절약하기 위해 컴퓨터의 데이터 및 주소 버스가 다중화되는 경우도 있습니다. 일반적으로 20 비트 주소 버스는 각각 주소 버스에서 1 비트의 데이터를 전달하는 20 개의 개별 와이어를 갖는 것으로 생각합니다. 상위 4 비트가 세그먼트 레지스터에 의해 제어 될 때 16 개의 와이어가 어드레스 버스와 통신 할 수 있습니다. 이로 인해 1KB의 메모리 아키텍처가 64KB의 16 개 뱅크로 처리됩니다. 16 비트 주소 버스는 0-64k에서 주소를 선택하며 뱅크 선택 레지스터의 내용을 변경하여 64K 메모리의 성공적인 그룹과 1 메가 경계까지 연결해야합니다. 지원되는 메모리 크기보다 주소 라인이 적은 CPU에는 일반적으로 세그먼트 레지스터가 있으므로 커널 또는 운영 체제 코드가 필요에 따라 뱅크 선택 레지스터를 추적하고 전환 할 수 있습니다.

이것은 궁극적으로 주어진 물리적 메모리 주소가 4 비트 세그먼트 레지스터 + 16 비트 주소 버스 = 20 비트 물리적 주소에 의해 발견되어 1 메가 바이트 메모리와 통신하는 상황을 만듭니다. 다행스럽게도 칩 설계자들이 칩을 40 핀 이상의 패키지에 넣는 것을 주저하던 1970 년대를 지났기 때문에 주소 버스 멀티플렉싱이 자주 필요하지 않습니다.