2012-03-19 3 views
4

특히이 질문은 리얼 모드의 플랫 및 세그먼트 모델에 대한 것입니다. 나는 DOS에서 COM 파일이 플랫 메모리 모델을 사용하고 EXE 파일이 세그먼트 화 된 메모리 모델을 사용한다고 언급 한 어셈블리에 관한 책을 읽었습니다. 그러나 나는 DOS가 어떤 메모리 모델을 사용해야 하는지를 이해하지 못하고있다. 내가 부트 로더에 대해 읽고 있기 때문에 나는이 질문을하고있다.메모리 모델을 결정하는 요소는 무엇입니까?

답변

4

COM 파일은 프로그램이 동일한 세그먼트를 가리 키도록로드 될 때 세그먼트 레지스터가 DOS로 alll 설정된다는 의미에서 "플랫 메모리 모델"을 사용했으며 모든 코드와 포인터는 관례에 따라 상대적으로 그 세그먼트의 한 값이 등록됩니다.

반면 EXE 파일 형식은 세그먼트를 다른 오프셋으로로드 할 수 있습니다. DOS는 세그먼트 레지스터를 기본값으로 설정하지 않습니다. 그것은 코드 자체에 달렸습니다. 코드가 세그먼트 레지스터를 관리해야하기 때문에 16 비트 EXE 코드가 훨씬 더 복잡합니다.

요즘 많은 EXE 코드가 세그먼트 레지스터를 다소 무시합니다. 32 또는 64 비트 레지스터는 사용 가능한 주소를 생성하기 위해 세그먼트 레지스터에 추가 될 필요가 없습니다.

+0

도스가 COM 파일의 경우 세그먼트 레지스터를 설정하고 EXE 파일의 경우이를 남겨 두었습니까? – vjain27

+0

DOS로 만든 것은 무엇입니까? DOS 코드가 그랬습니다. 나는 당신의 질문에 대답하는 방법을 모르겠다. DOS를 프로그래밍 한 프로그래머는 그렇게하도록 말했다. –

+0

DOS EXE 형식에는 CS : IP 및 SS : SP 이외의 레지스터 설정을위한 규정이 없습니다. 그렇다면 프로그래머는 DS와 ES의 세그먼트를 특별한 방법으로 표시해야하고 어셈블러, 컴파일러 및 링커는 특수하게 표시된 세그먼트를 특수한 방법으로 지원해야합니다. 아마도, 그럴만 한 가치가 없다고 결정되었을 것입니다. 결국 공식적으로 세그먼트 화 된 프로그램에는 데이터 세그먼트가있을 필요가 없습니다. 최소값은 코드 및 스택 세그먼트입니다. –

1

COM 및 EXE 실행 파일의 메모리 요구 사항은 파일 헤더에 EXE headerCOM (MS-DOS) header입니다. 프로그램에 < 64KB가 필요한 경우> 64KB 인 경우 플랫 공간을 사용하고 세그먼트 화 된 메모리를 사용하십시오.

1

DOS에는 세그먼트 화 된 메모리 모델 사용을 중지시킬 수있는 DOS가 없습니다. DOS에는 응용 프로그램에 메모리 관리 정책이 적용되지 않았기 때문에 COM 파일을 사용할 수 없습니다.

COM files에 대한 위키 백과 항목을 읽을 수 있습니다.이 내용은 이러한 오래된 문제에 대한 통찰력을 제공합니다.