2016-08-09 9 views
1

저는 인텔 매뉴얼에서 컴퓨터 아키텍처를 공부하고 있습니다. 내가 이해하는 것은 세그먼트 선택기와 오프셋으로 구성된 논리 주소라는 것입니다. 기본적으로 CS register<<4 + offset입니다. Segment Selector은 세그먼트 선택기의 TI 비트에 지정된대로 GDT 또는 LDT에 매핑됩니다. GDT는 BASE, LIMITRPL이고 출력은 기본 주소 인 Segment Descriptors으로 구성됩니다. 이 base address + offsetlogical address을 제공합니다.기본적으로 어떤 세그먼트 레지스터가 사용됩니까?

어떤 세그먼트 레지스터 (SS, DS 등)가 다른 메모리 연산에 적용되는지 결정하는 규칙은 무엇입니까? 예 : 어떤 세그먼트가 mov eax, [edi]에 사용되는지 결정하는 것은 무엇입니까?

+0

귀하의 질문에 분명하지 않습니다. t me, 조금 설명 할 수 있습니까? – Rupsingh

+0

기본적으로 그 데이터 세그먼트, 스택 세그먼트가 프로 시저에 할당되는 방법을 알고 싶습니다. – ashish

+0

이것은 도움이 될 수 있습니다 http://stackoverflow.com/questions/29785991/can-someone-help-me-with-segmentation-and-8086-intels- 마이크로 프로세서 – Rupsingh

답변

2

세그먼트 오버라이드 접두사를 사용하여 명령어의 메모리 피연산자에 적용 할 세그먼트를 선택할 수 있습니다.

코드 가져 오기는 항상 CS을 사용합니다.

대부분의 시간의 기본값은 DS입니다 (예 : mov eax, [edi]). 일부 디스어셈블러는 기본값 인 경우에도 세그먼트를 명시 적으로 처리하므로, DS:은 디스 어셈블리 출력을 어수선하게 표시합니다.

[DS:ESI]에서 읽고 [ES:EDI]에 쓰므로 세그먼트 재 지정 접두사없이 세그먼트간에 쉽게 복사 할 수 있습니다. 다른 문자열 명령도 ES을 사용합니다. 그래서 esp 또는 SS에 기준 레지스터가 기본값으로 ebp 등을 사용하여

메모리 피연산자는 push/pop/call/ret 같은 스택 지침은 암시 적 접근을한다.

FSGS은 절대로 기본값이 아니므로 최신 32 및 64 비트 OS와 같은 플랫 메모리 모델 시스템에서 특수 목적 (스레드 로컬 저장소와 같은)으로 사용할 수 있습니다.

wikipedia explains the same thing here.


이것은 또한 Intel's ISA manuals에 공식적으로 설명되어 있습니다. 예 : 제 2 권 (명령 세트 참조), 표 2-1.

기본 세그먼트 레지스터는 다른 효과 주소에 대한 BP 지수, DS를 포함하는 유효 주소 SS 경우 : ModR/M 바이트과 양식을 주소 16 비트는 말을 각주 있습니다.

이 어드레싱 모드 32 또는 64 비트에 대한 등가 각주 없다. (즉 SP 16 비트 어드레싱 모드에 대한 유효한 기본 주소가 아닌 주)이므로 상세 다른 볼륨에 있어야 매뉴얼의.

자세한 링크는 태그 위키를 참조하십시오.

+0

이러한 세그먼트는 메모리에 어디에 있습니까? 선형 주소? 물리적 주소? – ashish

+1

@ashish : 현재의 32 비트 OS에서 모든 세그먼트 (FS와 GS 제외)는 기본 = 0, 제한 = 4GiB이며 'CS', 'DS', 'SS'및 'ES' '모두 동등합니다. 세그먼트 변환은 가상 대 실제 주소 변환 전에 발생합니다. 실제 모드에서 세그먼트 레지스터는 디스크립터를 인덱싱하지 않고 단지 16을 곱하고 주소의 오프셋 부분에 추가됩니다. –

+0

그리고 긴 모드, 즉 x86_64 모드에서? – ashish