2016-10-10 1 views
2

Intel Developer Manual은 보호 모드로 전환 한 후 MOV CR0 명령이 실행 흐름을 변경하고 프로세서를 직렬화 한 직후 JMP 또는 CALL 명령을 즉시 수행 할 것을 제안합니다. 9 장에서 코드 예제에 의해 제안 목적은, 프리 페치 큐를 무효화 절 9.10.2, START.ASM Listing, 라인 174-186입니다 :보호 모드로 들어가도 프리 페치 큐를 무효화해야하는 이유는 무엇입니까?

174 ; enter protected mode 
175 MOV EBX,CR0 
176 OR EBX,PE_BIT 
177 MOV CR0,EBX 
178 
179 ; clear prefetch queue 
180 JMP CLEAR_LABEL 
181 CLEAR_LABEL: 
182 
183 ; make DS and ES address 4G of linear memory 
184 MOV CX,LINEAR_SEL 
185 MOV DS,CX 
186 MOV ES,CX 

왜 우리는 이러한 작업을 수행해야 하는가? 같은 코드를 다시 점프하기 위해 프리 페치 대기열의 현재 데이터를 무효화하는 것을 제외하고는 그와 같은 짧은 점프가 플래그 또는 세그먼트를 전혀 변경하지 않기 때문에 코드가 대기열에서 동일하게 유지되지 않습니까?

+1

점프해야하며 주 목적은 'CS'를로드하는 것입니다. 매뉴얼이 가까운 점프를 사용한다는 것이 이상합니다. 표 9-4는 이렇게 말합니다 :'실제 모드 명령 대기열에 가깝게 뛰기 ' – Jester

+0

예 멀리 점프가 나중에 수행됩니다. 그러나 보호 모드로 전환 한 직후 가까운 점프를 먼저 사용하는 것이 좋습니다. – Amumu

+0

프리 페치 대기열에서 보호 모드 코드를 다시로드하기위한 것 같습니다. 그러나 나는 왜 같은 코드를 다시로드해야하는지 이해하지 못하고있다. – Amumu

답변

0

그래서, 목적을 발견 근처

점프 효과적으로 리얼 모드 명령 큐

을 취소 : STARTUP.ASM의 주요 초기화 단계를 설명 표 9-5에 따르면 명령 큐를 다시로드하기 위해서만 사용되므로 이전의 리얼 모드 명령어는 보호 모드 명령어로 대체됩니다.

관련 문제