에 대해 16 비트 프로그램을, 당신은 그것에 대해 알 수 있습니다. 인텔이 16 비트에서 32 비트로 갈 때 새로운 32 비트 레지스터를 처리하도록 명령 세트를 확장해야하지만 16 비트 프로그램과 이진 호환성을 유지해야했습니다.
16 비트 레지스터를 사용하는 명령어에 적용 할 때 32 비트 레지스터를 사용하도록 지시하는 접두사 66h가 추가되었습니다. 예를 들어
는 66H로 시작 MOV의 AX, BX, 같은 16 비트 명령어, MOV의 EAX, EBX
로 변신하지만 그들은에서 필요로하기 때문에이 후, 새로운 32 개 비트 명령어에 벌금을 부과 실행을위한 최소 메모리 페치 사이클. 그런 다음 인텔은 소위 32 비트 세그먼트와 16 비트 세그먼트를 만들었습니다.
기본적으로 코드 조각은 코드 세그먼트에 있어야합니다. 80386 이전에는 모든 세그먼트가 16 비트 명령어를 사용했으며 모든 명령어는 16 비트 레지스터를 사용한다고 가정합니다.
Intel의 32 세그먼트에도 코드가 있지만 이번에는 모든 명령어가 32 비트 레지스터를 사용한다고 가정하므로 32 비트 세그먼트에서 MOV EAX, EBX의 opcode는 MOV AX의 opcode와 같습니다. , BX (16 비트 세그먼트).
이렇게하면 프로그램에서 모든 32 비트 명령어에 66h 프리픽스를 사용할 필요가 없습니다. 더 이상 벌칙이 없습니다.
하지만 32 비트 세그먼트로 결합 된 프로그램 내에서 16 비트 레지스터를 사용해야한다면 어떻게해야합니까?16 비트 레지스터를 사용하는 명령어는 접두사 66h를 사용해야합니다.
그래서 : 16 비트 레지스터를 사용하는 명령어는 16 비트 세그먼트로 접두어가 붙지 않고 32 비트 semgnt로 시작됩니다. 32 비트 레지스터를 사용하는 명령어는 32 비트 세그먼트로 접두어가 붙지 않고 16 비트 세그먼트로 시작됩니다.
이외에도 : 우리는 펜티엄 프로세서에서 시작하여 병렬로 명령을 실행하기위한 두 개의 파이프 라인을 가지고 있습니다. 이러한 파이프 라인을 사용하려면 명령어를 입력하는 명령어가 인텔 이름 인 "RISC 뉴 클루 스"에 속해야합니다. CPU 내부의 마이크로 프로그램으로는 더 이상 실행되지 않지만 유선 논리를 사용하는 명령어의 하위 집합입니다. 맞춰봐? 16 비트 레지스터를 사용하는 16 비트 세그먼트에서 실행되는 접두어가 붙은 명령어 및 코드는이 그룹에 속하지 않으므로 다른 그룹과 병렬로 실행할 수 없습니다. 접두사가 붙은 명령이 파이프 라인 중 하나에 들어가면 그 중 하나는 CPU의 성능에 영향을 미치게됩니다.
짧은 대답 : CPU가 최근 작성된 코드의 이점을 위해 최적화 되었기 때문에 이전의 레거시 코드를 희생해야합니다. –