메모리에 액세스할 때 bp 주소 지정을 사용하는 경우 기본 세그먼트 레지스터는 스택 세그먼트인 "SS"입니다. SS 스택 세그먼트는 일반적으로 프로그램 메모리 할당을 위해 세그먼트화된 메모리 관리를 사용하는 아키텍처에서 스택 모드에서 작동하는 메모리 영역을 나타내며, 스택 세그먼트는 로컬 변수 및 함수 반환 주소를 저장하는 데 사용됩니다.
세그먼트 레지스터는 메모리의 세그먼트 관리를 위해 설정됩니다. 컴퓨터는 메모리를 다른 프로그램에 할당하기 위해 메모리를 분할해야 합니다(하드 디스크 페이징과 유사). 메모리 분할을 설명할 때 다음 세그먼트 정보가 필요합니다. 1. 세그먼트의 크기 2. 세그먼트의 시작 주소 3. 세그먼트의 관리 속성(쓰기 금지/실행 금지/시스템 독점 등) 이 정보를 저장하려면 8바이트(64비트)를 사용해야 하는데 세그먼트 레지스터에는 16비트만 있으므로 세그먼트 번호(세그먼트 셀렉터, "세그먼트 셀렉터"라고도 번역됨)만 세그먼트 레지스터에 저장할 수 있으며, 그런 다음 세그먼트 번호를 메모리에 존재하는 GDT(글로벌(세그먼트) 디스크립터 테이블, 글로벌 세그먼트 번호 레코드 테이블)에 매핑하여 세그먼트 정보를 읽습니다.
8086CPU에는 20개의 주소 라인이 있으며 주소를 지정할 수 있는 최대 메모리 공간은 1MB입니다. 8086 레지스터는 16비트에 불과하고 명령어 포인터(IP)와 인덱스 레지스터(SI, DI)도 16비트이다. 16비트 주소로 1MB의 공간을 주소 지정하는 것은 불가능합니다. 따라서 메모리를 분할해야 합니다. 즉, 1MB 공간을 2^4, 즉 16개 세그먼트로 나누고 각 세그먼트는 64KB를 초과하지 않습니다(2^16, 16비트 데이터 라인을 처리할 수 있음). 4개의 16비트 세그먼트 레지스터는 4가지 유형의 세그먼트를 관리하기 위해 8086에 설정됩니다. CS는 코드 세그먼트, DS는 데이터 세그먼트, SS는 스택 세그먼트, ES는 추가 세그먼트입니다. 메모리가 분할된 후 각 세그먼트에는 세그먼트 기본 주소가 있습니다. 세그먼트 레지스터는 세그먼트 기본 주소의 상위 16비트를 저장합니다. 이 16비트 주소는 16비트 주소를 왼쪽으로 4만큼 이동하여 형성할 수 있습니다. 비트(그 뒤에 4개의 0을 추가). 20비트 세그먼트 기본 주소.
세그먼트 레지스터 CS는 프로그램이 저장되는 메모리 세그먼트를 가리킵니다. IP는 세그먼트에서 실행될 다음 명령어의 오프셋을 저장하는 데 사용됩니다. 이를 함께 사용하면 다음에 실행될 명령어를 메모리에서 가져올 수 있습니다. 세그먼트.
세그먼트 레지스터 SS는 스택에 사용되는 메모리 세그먼트를 가리키고 SP는 스택의 상단을 가리키는 데 사용됩니다. 이를 함께 사용하면 스택의 최상위 장치에 액세스할 수 있습니다. 또한 오프셋이 포인터 레지스터 BP를 사용하는 경우 기본 세그먼트 레지스터도 SS이며 BP는 스택 상단뿐만 아니라 전체 스택에 액세스하는 데 사용할 수 있습니다.
세그먼트 레지스터 DS는 데이터 세그먼트를 가리키고, ES는 피연산자에 액세스할 때 둘 중 하나가 오프셋과 결합되어 저장 장치의 물리적 주소를 얻습니다. 오프셋은 특정 숫자 값, 기호 주소, 포인터 레지스터 값 등 중 하나일 수 있습니다. 특정 상황은 명령어의 주소 지정 모드에 따라 결정됩니다.
일반적으로 기본 데이터 세그먼트 레지스터는 DS이지만 한 가지 예외는 문자열 연산을 수행할 때 대상 주소의 세그먼트 레지스터가 ES로 지정된다는 것입니다. 물론 일반 명령어에서는 접두어의 "세그먼트 교체" 필드를 변경하여 피연산자의 세그먼트 레지스터를 변경할 수도 있습니다.
"선택적 세그먼트 레지스터"는 이러한 세그먼트 레지스터의 값을 피연산자 주소로 강제하는 데 사용할 수 있는 세그먼트 주소입니다.
위 내용은 메모리에 액세스할 때 bp 주소 지정이 사용되는 경우 기본 세그먼트 레지스터는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!