2016-12-11 2 views
-5

8086의 세그먼트의 최소 및 최대 크기는 얼마입니까? 그리고 최소한으로 인해 우리가 가질 수있는 개별 세그먼트의 최대 수는 얼마입니까? 모든 것이 한 번에 활성화 될 필요는 없습니다. (겹침 허용 가능)8086에서 세그먼트의 최대 및 최소 크기는 무엇입니까?

+4

이 질문의 전체 텍스트를 복사하여 붙여 넣기 만하면 [찾은 것만 봐라] (http://www.eazynotes.com/notes/microprocessor/slides/memory-segmentation-of-8086.pdf) Google *. 귀하의 질문에 대한 정확한 답변을 포함하고 있습니다. –

+0

좋은 질문입니다, 내 대답을 참조하십시오. 나는 왜 사람들이 질문을 왜곡 한 이유에 대해 모른다. –

답변

0

최대 크기는 64K입니다. 최소값은 없지만 첫 번째 바이트 만 사용할 수는 있지만 세그먼트는 항상 64K입니다. 가장 최근의 세그먼트 (0xFFFF)는 최신 바이트 인 32, 48, 64 바이트 전에는 16 바이트입니다. 일반적으로 8086 세그먼트는 16 비트 주소 레지스터로 64K 이상을 주소 지정하는 방법입니다.

+4

0x8000 이상의 세그먼트는 8086에서 0으로 랩 어라운드합니다 (80286+에서는 0x1000000 이상의 바이트에 액세스합니다. 호환성을 위해 PC는 A20을 비활성화하여 8086 호환 랩을 사용할 수 있습니다). – rcgldr

1

8086 마이크로 프로세서에서 전체 메모리 주소 지정 기능은 1MB입니다. 1MB를 나타내는 데 필요한 최소 4 자리 16 진수, 즉 20 비트가 있습니다. 8086 마이크로 프로세서는 14 개의 16 비트 레지스터를 갖는다 (즉, 20 비트 어드레스를 나타내는 레지스터가 없다). 따라서 총 메모리는 16 개의 개별 논리 세그먼트로 나눌 수 있으며 각 세그먼트 용량은 64KB (즉, 16 * 64 KB = 1MB)입니다.

+0

"... 16 개의 논리적 세그먼트로 나누어 짐"메모리는 크게 중복되는 65536 개의 세그먼트로 나뉩니다. –

1

8086 세그먼트 레지스터는 16 비트이므로 65536 개의 세그먼트가있을 수 있지만 중복됩니다. 20 비트의 물리적 주소는 세그먼트 레지스터를 4 비트 왼쪽으로 시프트하고 주소 오프셋을 추가하여 얻습니다. 이는 세그먼트가 16 바이트 정렬로 시작될 수 있음을 의미합니다. 중복으로 인해 하나의 메모리 위치를 추가하는 많은 방법이 있습니다 (예 : 0000:00100001:0000). 동일한 위치를 처리합니다.

주소 오프셋도 16 비트이기 때문에 세그먼트의 주소 지정 가능 크기는 65536 바이트입니다. 따라서 세그먼트의 최대 크기는 65536 바이트이고 가장 작은 크기는 16 바이트입니다.하지만 8086에서는 전체 세그먼트가 보호없이 읽기/쓰기 될 수 있습니다.

마지막 질문 인 "최대 개별 세그먼트 수"는 16 별도 세그먼트입니다. 더 이상 그들은 겹칠 것입니다.

+0

"... 최소 16 바이트"이것은 하드웨어와 관련하여 의미가 없습니다. 프로그램의 섹션 (세그먼트라고도 함)을 다룰 때 사실입니다. –

+0

@SepRoland, 그냥 질문에 답하려고합니다. 가능한 가장 작은 세그먼트는 세그먼트 레지스터의 해상도이기 때문에 16 바이트입니다.디자이너가 16 개의 겹치지 않는 세그먼트 (다른 ​​대답에 암시되어 있음)를 의도했다면 세그먼트 등록시 16이 아닌 4 비트 만 부여했을 것입니다. –

+0

@niloofarlatifian 이제 질문을 변경했습니다. 우리 발 아래 모래. 최대 세그먼트 수는 65536입니다. 8086에서는 "활성 세그먼트"와 같은 것이 없습니다. 세그먼트 레지스터는 1MB의 메모리를 주소 지정하는 방법을 제공합니다. –

0

리얼 모드에서 세그먼트에는 "크기"가 없습니다. 메모리는 real mode의 세그먼트로 분할되지 않습니다. 세그먼트는 더 큰 개체의 일부인 segment+offset - 둘 다 유효 주소를 계산하는 데 사용됩니다. 이들은 CPU가 메모리 바이트의 주소를 계산할 수있게 해주는 세그먼트와 오프셋이며, 바이트는 Intel 플랫폼에서 처리 할 수있는 최소 단위입니다. 프로그래머는 "세그먼트 + 오프셋"에 대해서도 “far pointer”을 포함한다고 말합니다. 반대로, “near pointer”은 다른 포인터와 비교하는 상대 포인터이며, 둘 다 동일한 세그먼트를가집니다. 따라서 "먼"포인터는 16 비트 세그먼트 선택기와 16 비트 (또는 모드에 따라 32 비트) 오프셋으로 구성된 포인터이므로 총 원거리 포인터 크기는 16 비트에서 32 비트였습니다 32 비트 모드에서 48 비트를 지원합니다. 세그먼트 선택기는 "멀리"포인터에서 메모리에 액세스하기 전에 특수 세그먼트 레지스터에로드됩니다. 한 번에 멀리 포인터를로드하는 특별한 지침이 있습니다. Intel 8086에서 가장 인기있는 명령어는 메모리에서 레지스터 (DS 또는 ES)와 일반 (오프셋) 레지스터 하나의 레지스터에 "far"포인터를로드하는 LDSLES입니다. LFS, LGSLSSFS에 대한, GS 각각 (Intel 80386에 도입) SS 세그먼트 레지스터 : 다른 레지스터 버전도 있습니다. 세그먼트는 16 비트 리얼 모드 또는 16 비트 보호 모드 일 때 16 비트 모드에서 매우 유용합니다. 16 비트 리얼 모드에서는 세그먼트 레지스터의 값에 16을 곱한 다음 오프셋을 추가했습니다. 이는 실제 주소가 계산 된 방법입니다. 그러나 실제 모드의 메모리는 "세그먼트 화"되지 않았으므로 세그먼트의 최소 또는 최대 크기는 없었습니다.16 비트 리얼 모드에서 DS와 SI 레지스터 모두에 FFFF를로드하면 이론적으로 (16 * 0xFFFF) + FFFF = 번째 바이트의 메모리에 액세스 할 수 있습니다 (실제 적용되는 제한 사항은 A20-line 등으로 적용됩니다) - 또는 약 1 메가 바이트.

32-bit mode에서는 모든 세그먼트 레지스터가 본질적으로 동일한 위치를 가리 키므로 세그먼트 레지스터가 필요하지 않으므로 세그먼트 레지스터를로드 할 필요가 없습니다.

에서 이러한 지침이 구현되지 않았고 해당 opcode에서 액세스 위반이 발생했습니다. 인텔의 VEX - "벡터 확장 - (SSE2) 구현 이후 인텔은 LDSLES의 연산 코드를 사용하여 VEX 접두어로 사용하기 시작했습니다. 결과적으로 256 비트의 AVX (YMM) 레지스터는 64 비트 모드에서만 사용할 수 있습니다 protected mode에서.

은이 최소 크기가 없거나 최소 크기 16-bit mode 또는 의 구조의 최소 할당 단위, 예 16 바이트이고, 또,이 세그먼트 크기와 같은 개념이지만 4 킬로바이트32-bit mode 보호 모드에서 세그먼트 레지스터는 16 비트 리얼 에서처럼 16을 곱한 값을 보유하지 않습니다 알 모드이지만 선택자 테이블의 색인입니다. Intel 80286's protected mode이 출시 된 이래로 프로세서의 주소 공간은 약 1MB에서 224 바이트 (16MB)까지 확장되었지만 더 큰 오프셋은 사용하지 않았습니다. 대신, 16 비트 세그먼트 레지스터는 이제 오프셋이 추가 된 24 비트 기본 주소를 포함하는 세그먼트 설명 자의 테이블에 대한 인덱스를 포함합니다. 최대 세그먼트 크기는 64 킬로바이트였습니다. Intel 80386 및 이후 프로세서에서 보호 모드는 80286 보호 모드의 분할 메커니즘을 유지하지만 분할 장치와 실제 버스간에 주소 변환의 두 번째 계층으로 페이징 장치가 추가되었습니다. 또한 주소 오프셋은 (16 비트 대신) 32 비트이고 각 세그먼트 설명 자의 세그먼트 기본도 (24 비트 대신) 32 비트입니다. 결과적으로 최대 세그먼트 크기가 이론상 최대 값 인 4GB으로 증가되었습니다. 흥미롭게도 32 비트 운영 체제에는 4GB의 물리적 제한이 없다는 신념과는 달리. 예를 들어 Microsoft Windows Server 2008 32 비트와 같은 32 비트 서버 운영 체제는 PAE (Physical Address Extension)를 통해 64GB (Windows Server 2008 Enterprise 및 Datacenter 에디션)까지 액세스 할 수 있습니다. 펜티엄 프로에서 인텔, 나중에 Athlon 프로세서에서 AMD로 - 32 비트 대신 각각 64 비트의 테이블 엔트리를 갖는 3 레벨의 페이지 테이블 계층 구조를 정의하여이 CPU가 4 기가 바이트보다 큰 실제 주소 공간에 직접 액세스 할 수 있도록합니다 이론적으로 32 비트 OS는 이론적으로 2^64 바이트 또는 17,179,869,184GB에 액세스 할 수 있지만 세그먼트는 4GB으로 제한됩니다.