KR100271503B1 - =분할된 마이크로코드, 동적 일반 마이크로명령 및미리 디 코드된 명령 정보를 갖는 마이크로코드를 이용한마이크로프로세서를 위한 고속 스케일 마이크로코드계명령 디코더 - Google Patents

=분할된 마이크로코드, 동적 일반 마이크로명령 및미리 디 코드된 명령 정보를 갖는 마이크로코드를 이용한마이크로프로세서를 위한 고속 스케일 마이크로코드계명령 디코더 Download PDF

Info

Publication number
KR100271503B1
KR100271503B1 KR1019970044693A KR19970044693A KR100271503B1 KR 100271503 B1 KR100271503 B1 KR 100271503B1 KR 1019970044693 A KR1019970044693 A KR 1019970044693A KR 19970044693 A KR19970044693 A KR 19970044693A KR 100271503 B1 KR100271503 B1 KR 100271503B1
Authority
KR
South Korea
Prior art keywords
instruction
microcode
instructions
rom
byte
Prior art date
Application number
KR1019970044693A
Other languages
English (en)
Other versions
KR19980032351A (ko
Inventor
셰일라자 체누말라
마리오 네미로부스키
Original Assignee
클라크 3세 존 엠.
내셔널 세미콘덕터 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 클라크 3세 존 엠., 내셔널 세미콘덕터 코포레이션 filed Critical 클라크 3세 존 엠.
Publication of KR19980032351A publication Critical patent/KR19980032351A/ko
Application granted granted Critical
Publication of KR100271503B1 publication Critical patent/KR100271503B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format

Abstract

마이크로프로세서를 위한 마이크로코드 기반 디코더 회로는 디코드 명령에 대한 빠른 액세스 표를 이용한다. 명령에 관한 정보 비트는 비용의 첨부 없이 표에 첨부되고 이들은 명령의 더 빠른 디코더를 가능하게 한다. 엔트리 ROM 을 이용하는 명령의 디코드는 디코더 출력을 발생하는데 직접 이용될 수 있는 정보로 간주하는 정보를 포함한다. 또한, 이 정보는 정확한 ROM 엔트리를 선택하는데 이용되고, 따라서, 디코더의 유용성을 향상시키고 일반 마이크로코드 엔트리를 동적으로 하여 마이크로 코드 공간을 절약한다. 공통적으로 이용되는 유사한 매크로명령에 대한 일반 마이크로코드 명령의 이용은 마이크로 코드 명령의 복사를 회피하여 마이크로코드 공간을 절약한다. 엔트리 마이크로코드 표내에 있는 미리 디코드된 정보를 사용함으로서 동적 일반 마이크로명령의 발생은 일반 마이크로명령이 탄력성 있게하여 많은 명령에 대해 효과적으로 이용될 수 있다. 명령의 효과적인 디코드에 대해 이용되는 엔트리 마이크로코드는 디코더 출력 발생 및 정확한 마이크로코드 엔트리 선택에 직접 이용되는 레귤러 마이크로코드명령과 상이한 명령에 대해 미리 디코드된 정보를 포함하고, 또한 일반 마이크로코드 엔트리의 발생을 위해 이용된다. 엔트리 ROM 및 μ코드 ROM 의 병령 처리는 연산 코드 및 모뎀 바이트로부터 발생된 동일한 어드레스를 이용하고 이들중 하나를 선택하여, 효과적으로 ROM 을 이용하고 또한 시간 및 논리를 단축시킨다.

Description

분할된 마이크로코드, 동적 일반 마이크로명령 및 미리 디코드된 명령 정보를 갖는 마이크로코드를 이용한 마이크로프로세서를 위한 고속 스케일 마이크로코드계 명령 디코더 회로
본 발명은 마이크로 프로세서를 위한 명령 디코더회로에 관한 것이다. 특히, 본 발명은 마이크로 코드를 기초로하는 디코더에 관한 것이다. 더욱이, 마이크로 코드는 프리디코드 정보를 포함하고, 디코더는 일반적인 마이크로 명령어를 다이내믹하게 생설항수 있다. 또한, 본 발명은 종래 마이크로 코드-ROM (μROM) 와 병행하여 마이크로 기초 디코더를 이용하는 것에 관한 것이다.
현재 마이크로프로세서는 집합적이고 연속적인 명령을 분리된 단계에서 동시에 프리페치, 디코드 및 실행을 하는 것이 가능한 파이프라인 기술을 이용한다. 따라서, 임의의 부여된 클록 사이클에서, 제 1 명령은 후속하는 (제 2) 명령이 디코드되는 동안 동시에 실행될 수 있고, 다음 명령 (제 3 명령) 은 동시에 페치된다. 사이클당 각 명령을 실행하는 프로세스가 줄기 때문에, 사이클 시간은 단축될 수 있다. 따라서, 프리페치, 디코드 및 실행될 단일 명령에 대해 여러 클록 사이클이 필요하지만, 집합적이고 연속적인 명령은 동시에 여러 단계에 있게 되기 때문에, 매우 단축된 사이클 주기를 갖는 사이클당 하나의 명령을 가능한한 빨리 명령을 완료하는 프로세서가 가능하다.
일시적으로 홀딩된 데이터에 대한 버퍼는 마이크로 프로세서 파이프라인의 연속 단계사이의 경계를 규정하는데 이용된다. 특정 단계에서 처리되는 데이터는 사이클의 종료 이전에 이들 버퍼내에 엔트리된다. 파이프라인은 새로운 사이클의 시작을 진행하는 경우, 데이터는 경계 버퍼가 제거되어 데이터가 후속하는 사이클 동안 더 처리될수 있는 후속 단계에 엔트리된다.
대부분의 파이프라인 마이크로 프로세서 아키텍처는 1) 프리페치 단계, 2) 디코드 단계, 3) 실행 단계 및 4) 라이트 백 (write-back) 단계 (순으로) 를 포함한 4 개의 단계를 갖는다.
프리페치단계에서, 명령은 메모리로부터 판독되어 버퍼에 저장된다. 특정 마이크로 프로세서에 따르면, 부여된 사이클에서, 프리페치 버퍼는 여러 명령에 하나를 수신할 수 있다.
디코드 단계에서, 프리페치 버퍼로부터 명령을 판독하여, 대수 또는 논리 동작과 같은 하나 이상의 명령을 실행하도록 마이크로 프로세서에 의해서 이용될 수 있는 내부 명령 형식으로 변환된다. 실행 단계에서, 실질적인 연산이 실행된다. 최종적으로, 라이트 백 단계에서, 연산 결과는 선정된 레지스터 및/또는 다른 메모리 위에 엔트리된다.
더 복잡한 마이크로 프로세서에서, 하나 이상의 4 개 기본 단계는 각 개별 단계를 단순화 시키도록 더 단축된 단계로 더 분류될 수 있고 심지어 명령 완료 속도를 더 향상시킬수 있다.
통상적으로, 명령 프리페치 단계에서 하드웨어는 일시적으로 명령을 홀드 시킬 수 있는 프리페치 버퍼 또는 프리페치 큐로 이루어진다. 각 사이클에서, 디코드 단계는 그 사이클 동안 디코딩하는 프리페치 단계에서 홀드된 명령의 바이트를 수용할 수 있다.
디코드 단계에서 하드웨어는 적어도 프로그램 카운터 및 실행 단계에서 하드웨어를 제어하기 위한 제어 라인으로 명령를 변환하는 하드웨어로 이루어진다. 선택적으로, 디코드 단계는 마이크로 코드-ROM 을 포함 할 수 있다. 수입하는 명령은 저장된 데이터가 실행 단계 제어 라인을 위해 적절한 조건을 규정하는 마이크로코드-ROM 으로 엔트리 포인트 (어드레스) 를 규정한다. 특정 명령에 대한 실행 단계 제어 데이터는 마이크로코드-ROM 상의 단일 어드레스 가능 저장 위치에 전적으로 존재할 수 있거나 또는 여러개의 연속적인 어드레스가능한 저장 위치를 점유할 수도 있다. 부여된 명령에 대해 처리되어야 하는 마이크로코드-ROM 내에 있는 어드레스 가능 저장 위치의 번호는 명령 자체내에서 인코드될 수 있다. 선택적으로, 마이크로코드-ROM 내의 저장 위치에 있는 하나이상의 데이터는 다른 저장 위치가 액세스되는지의 여부를 지시할수 있다.
마이크로코드-ROM 으로부터 출력한 제어 데이터는 후속하는 사이클 천이에서 실행 단계로 진행하기 위해 버퍼내에 엔트리된다. 또한 디코드 단계는 피연산자가 존재한다면 명령으로부터 또는 레지스터 또는 메모리 위치로부터 피연산자를 추출하는 하드웨어를 포함하고 실행 단계에서 적절한 하드웨어로 피연산자를 제공한다.
일부 마이크로 프로세서 아키텍처는 여러 폭을 갖는 명령 세트로 알려진 것을 이용한다. 이런 아키텍처에서, 명령은 모두가 동일한 폭을 갖지 않는다. 예를들면, 캘리포니아주 산타 클라라의 인텐 회사에 의해서 개발된 마이크로 프로세서의 16/32 비트 클래스 × 86 패밀리로 이루어진 명령 세트에서, 명령은 1 내지 16 바이트 폭중 어느것이 될 수 있다.
일부 마이크로 프로세서 아키텍처는 총 메모리 공간이 다수의 독립적이고 보호된 어드레스 공간으로 분류된 세그먼트 어드레스 공간을 이용한다. 각 세그먼트는 기초 어드레스 및 세그먼트 한계에 의해서 규정된다. 예를 들면, 기초 어드레스는 세그먼트 공간에서 최하위 번호 어드레스가 될 수도 있다. 세그먼트 한계는 세그먼트의 크기를 규정한다. 따라서, 세그먼트의 말단 경계는 기초 어드레스와 세그먼트 한계의 합에 의해서 규정된다. 선택적으로, 기초어드레스는 최상위 어드레스가 될 수도 있고, 세그먼트의 말단 경계는 기초 어드레스와 세그먼트 한계사이의 차가 된다.
x86 아키텍처를 따라 선형 어드레스를 생성하기 위해, 적어도 2 개의 양이 가산된다. 특히, 세그먼트 기술자에 의해서 지시된 것과 같은 특정 세그먼트의 기초 어드레스와, 세그먼트를 기초로 희망하는 데이터 (명령) 의 거리를 지시하는 오프셋은 함께 가산되어야한다. 오프셋 그자체는 3 개의 부분, 즉, 베이스, 인덱스 및 변위로 이루어 질수도 있다. 이렇다면, 이들 양은 오프셋이 세그먼트 베이스에 가산되기 이전에 오프셋을 발생하도록 가산되야 한다. x86 아키텍처의 세그먼트 어드레싱이 이하 더 상세하게 설명되겠지만 완전한 설명은 이하 참조로 첨부된 인텔사에 의해서 1995 년 인텔 485TM마이크로프로세서 페밀리 프로그래머의 참조 매뉴얼에서 찾을 수 있다.
마이크로 프로세에서의 종래 명령 디코드부는 명령 프리페치부로부터 명령을 수신하고 2 단계 프로세스내에 있는 명령들을 로우 레벨 제어 신호 및 마이크로코드 엔트리 포인트로 변경한다. 많지만 전부는 아닌 명령은 클록 사이클당 하나의 명령을 처리하는 속도로 디코드될 수 있다. 디코드 단계 (1) 는 메모리 액세스를 초기화한다. 이것은 2 개의 클록 사이클내에서 데이터를 로드 및 동작하는 2 개의 명령 시퀀스를 실행하는 것이 가능하다. 디코드부는 명력 프리픽스 바이트, 연산 코드, MODR/M 바이트 및 변위를 동시에 처리한다. 출력은 세그먼테이션, 인티저 및 플로팅 포인트부에 대한 하드배선된 마이크로 명령을 포함한다. 명령 프리페치부가 활성화되면 언제나 디코드부가 활성화된다.
도 1 은 종래 마이크로프로세서의 여러 파이프라인 단계를 일반적으로 표시한 블록도이다. 도시한 바와 같이, 마이크로프로세서는 다섯 개의 단계, 즉, 프리페치 단계, 디코드 단계, 실행 단계, 라이트 백 단계 및 제 2 라이트 백 단계로 파이프라인된다. 프리페치 버퍼 (112) 는 디코드 단계가 명령 바이트를 끌어내는 라인 버퍼이다. 이것은 프리페치와 디코드 단계사이에서 데이터만의 인터페이스이다. 또한, 프리페치단계는 1 킬로 바이트 명령 캐시 (116) 및 명령 캐시 (116) 내에 있는 데이터와 관련된 택 데이터를 저장하는 캐시 택 메모리 (118) 를 포함한다. 명령 캐시는 라인 크기가 8 바이트 폭의 크기로 직접 매핑된다. 또한, 양 프리페치 버퍼는, 바이트 위치 7 (최상위 비트) 을 통해 바이트 위치 0 (최하위 비트) 을 포함하는 8 바이드 폭이다. 또한, 프리페치 단계는 명령을 가지고 프리페치 버퍼의 로딩 제어에 관련된 여러 기능을 수행하는 프리페치 논리 (120) 를 포함한다.
도 2 내지 3 을 참조하면, 여기에서, X86 명령 세트내의 모든 명령은 3개의 서브 필드까지로 이루어져 있고, 각 서브 필드는 여러 가능한 바이트폭을 첨부한다. 3 개의 가능한 서브필드는 프리픽스 서브필드, 연산 서브 필드, 및 콘스턴트 서브 필드이다. 각 명령은 적어도 연산 서브 필드로 이루어진다. 연산 서브 필드는 실행 단계가 명령 (즉, 가산, 감산, 승산, XOR, 데이터 이동 등등) 에 대하여 실행할 기능을 규정한다. 연산 코드 서브 필드는 하나, 두 개, 또는 세 개의 바이트 길이가 될 수 있다. 연산코드 서브 필드는 실행될 기능을 규정하는 연산 코드 바이트를 포함한다. 또한 ModR/M 바이트를 포함할 수도 있다. ModR/M 바이트는 어드레싱 모드 규칙자이다. 오퍼랜드가 레지스터 또는 메모리 위치에 있는 지의 여부를 지하고, 메모리에 있다면, 변위, 베이스 레지스터, 색인 레지스터 및/또는 스케일링이 이용되는 지의 여부를 지정한다. ModR/M 바이트는 색인 레지스터가 오퍼랜드의 어드레스를 계산하는데 이용되는 것을 지시하는 경우, 명령은 스캐일 인덱스 바이트 (SIB) 로 칭하는 제 3 바이트로 이루어 질수 있다. SIB 바이트는 베이스 레지스터, 인덱스 레지스터 및 스캐일 펙터를 인코드하기 위한 명령내에 포함된다.
어떤 명령은 하나 또는 두 개의 오퍼랜드가 명령으로 이용되는 것을 지정할 수 있는 일전 데이터 서브필드로 칭하는 제 3 서브 필드를 포함한다. 특히, 일정 데이터 서브 필드는 변위 데이터 오퍼랜드, 즉시 데이터 오퍼랜드, 변위 데이터 오퍼랜드 및 즉시 데이터 오퍼랜드, 또는 두 개의 즉시 오퍼랜드로 이루어질 수 있다. 어드레싱 모드가 하나인 경우, 변위는 일정 서브 필드의 일부로서 변위 데이터 오퍼랜드를 포함하는 오퍼랜드 명령의 어드레스를 계산하는데 이용된다. 변위 데이터 오퍼랜드는 하나, 두 개 또는 네 개의 바이트 길이가 될 수 있다. 당명한 오퍼랜드는 오퍼랜드 값을 즉각 제공한다. 즉시 오퍼랜드는 하나, 두 개 또는 4 개의 바이트 길이일 수도 있다.
따라서, 일정 서브필드가 있다면, 한 개, 두 개, 세 개, 네 개, 다섯 개, 여섯 개 또는 여덟 개의 바이트 길이일수 있다. 명령 바이트로 이용될 세그먼트 레지스터, 어드레스 크기 및 오퍼랜드 크기와 같은 특정 파라메터는 실행 및/또는 디코드 단계에서 조건을 디폴트하도록 설정된다. 그러나, 이들 파라메터는 명령의 프리픽스 서브 필드내의 프리픽스 바이트에 의해서 오버라이드 (override) 될 수 있다. 프리픽스 바이트의 네 개의 기본 형, 즉, 16 또는 32 바이트 어드레스중 하나를 선택하는 어드레스 프리픽스, 16 또는 32 바이트 데이터 크기중 하나를 선택하는 오퍼랜드 크기 프리픽스 바이트, 세그먼트 레지스터 명령이 이용되는 것을 지정하는 세그먼트 오버라이드 바이트, 연산 코드 바이트가 디코드된 표를 결정하는 2 개의 상태중 하나을 토글할 수 있는 명령 프리픽스가 있다.
따라서, 명령 프리픽스의 사용은 가능한 명령 수를 두배로 만든다. 통상적인 프리픽스 바이트 형식, 즉, 어드레스 픽스는 단일 명령에서 한 번 이상 나타낼수 있기 때문에, 명령내의 0 내지 14 프리픽스 바이트 중 어느곳에든 있을수 있다. 디코더는 라인 버퍼 (12) 로부터 사이클당 최대 7 개의 명령 바이트를 꺼낼수 있다. 특히, 종래 디코드 단계는 사이클당, (1) 하나의 프리픽스 바이트, 또는 (2) (3 개의 바이트까지의) 연산 서브 필드 및 (4 개의 바이트까지의) 일정 데이터 서브필드에서의 제 2 오퍼랜드, 존재한다면, 또는 (3) (4 개의 바이트까지의) 일정 데이터 서브 필드에서의 제 2 오퍼랜드를 디코드한다. 따라서, 종래 디코더를 사용하기 때문에, 일정 데이터 서브필드내에 2 개의 오퍼랜드를 갖는 명령은 실행되기 위해서 적어도 2 개 이상의 사이클이 필요하고 명령이 임의의 프리픽스 바이트를 갖는 경우 더 필요할 수 있다. 이에 요구되는 것은 보다 소수의 사이클내에서 디코드될수 있는 디코더이다.
명령내에서 인코드된 정보는 실행될 오퍼랜드의 명세, 조작될 오포랜드의 형태, 및 이들 오퍼랜드의 위치를 포함한다. 오퍼랜드가 메모리내에 위치되는 경우, 또한, 명령은 오퍼랜드를 포함한 세그먼트를 명백하게 또는 절대적으로 선택해야한다.
명령은 다양한 부분과 포맷을 가질수 있다. 명령의 정확한 포맷은 인텔 486TM프로세서 패밀리 프로그래머의 참조 매뉴얼의 부록 A 에 개시되어 있다. 명령의 일부를 이하 설명한다. 이들 부분중에, 연산 코드만은 항상 존재한다. 다른 부분은 수반된 오퍼랜드 및 오퍼랜드의 위치와 유형에 따라 존재할 수도있고 존재하지 않을 수도 있다. 이하, 발생의 순서로, 명령의 부분들을 나열한다.
프리픽스: 명령의 동작을 모디파이하는 하나 이상의 바이트 선행 명령. 후속하는 프리픽스는 응용 프로그램에서 이용될 수 있다.
1. 세그먼트 오버라이드 -- 디폴트 세그먼트를 대신하여 세그먼트 레지스터 명령이 사용되는 것을 명백하게 나타낸다.
2. 어드레스 크기 -- 16 와 32 비트 어드레싱중 하나를 스위치한다. 둘중 하나의 크기가 디폴트될 수 있고, 이 프리픽스는 디폴트되지 않은 크기를 선택한다.
3. 오퍼랜드 크기 -- 16 와 32 비트 데이터 크기중 하나를 스위치한다. 둘중 하나의 크기가 디폴트될 수 있고, 이 프리픽스는 디폴트되지 않은 크기를 선택한다.
4. 반복 -- 스트링의 각 요소에 대하여 명령이 반복되도록 하는 스트링 명령을 가지고 이용된다.
연산 코드: 멸영엥 의해서 실행되는 명령을 지정한다. 일부 명령은 여러개의 다른 연산 코드를 갖고, 각각 오포랜드의 상이한 형태를 지정한다.
레지스터 지정자: 명령은 하나 또는 두 개의 레지스터 오퍼랜드일 수도 있다. 지정자는 연산 코드로서 동이한 바이트 또는 어드레스 모드 지정자로서 동일한 방이트내중 어느 하나에서 발생한다.
어드레싱 모드 지정자: 존재하는 경우, 어퍼랜드가 레지스터 또는 메모리 위치에 있는지의 여부를 지정하고, 멤로리에 있다면, 치완, 베이스 레이스터, 인덱스 레지스터 및 스케일링이 이용될 지의 여부를 지시한다.
SIB (스케일, 인덱스, 베이스) 바이트 : 어드레싱 모드 지시자는 인덱스 레지스터가 오퍼랜드의 어드레스 계산에 이용될 것인지를 지시하는 경우, SIB 바이트는 베이트 레지스터, 인데스 레니스터 및 스케일링 팩터를 인코드하도록 명령내에 포함된다.
변위: 어드레싱 모드 지정자는 변위가 오퍼랜드의 어드레스를 계산하는데 이용되고, 변위는 명령내에서 인코드된다. 변위는 32, 16 또는 8 비트의 부호 정수이다. 8 비트 형태는 변위가 충분히 작은 공통적인 경우에 이용된다. 프로세서는 부호를 고려하여 8 비트 변위를 16 또는 32 비트로 확장한다.
즉시 오퍼랜드: 존재하는 경우, 오퍼랜드 값을 직접 제공한다. 즉시 오퍼랜드는 바이트, 워드 또는 더블 워드가 될 수도 있다. 즉시 오퍼랜드 16 비트 또는 32 비트 오퍼랜드로 이용되는 경우, 프로세서는 8 비트 오퍼랜드를 동일 부호의 정수로 확장하고 터큰 크기로 확대한다. 동일한 방법으로, 16 비트 오퍼랜드는 32 비트로 확장한다.
명령은 제로이상의 오퍼랜드상에서 실행한다. 제로 오퍼랜드 명령의 예는 NOP 명령 (비 동작) 이다. 오퍼랜드는 이들 임의의 장소에, 즉, 명령 그자체 (즉시 오퍼랜드) 내에, 레지스터 (32 비트 오퍼랜드의 경우에, EAX, EBX, ECX, EDX, ESI, EDI, ESP 또는 EBP; 16 비트 오퍼랜드 내의 경우에, AH, AL, BH, BL, CH, CL, DH, 또는 DL; 세그먼트 레지스터; 또는 플래그 연산을 위한 EFLAGS 레지스터) 내에 유지될 수 있다.
16 비트 레지스터 오퍼랜드의 이용은 메모리 내에서 또는 I/O 포트에서 16 비트 오퍼랜드 크기 프리픽스 (명령을 선행하는 값 67H을 갖는 바이트) 의 사용을 요구한다.
오퍼랜드에 대한 액세스는 매우 빠르다. 레지스터 및 즉시 오퍼랜드는 그들이 명령 해석의 일부로서 프리페치되기 때문에 온 칩을 가능하게 한다. 온 칩 캐쉬에 상주하는 메모리 오퍼랜드는 빠르게 액세스될 수 있다.
오퍼랜드를 갖는 명령중에, 일부 지정 오퍼랜드는 암시적이고, 다른 지정 오퍼랜드는 명백하며, 또다른 지정 오퍼랜드는 양측 모두를 조합하여 사용한다. 예를 들면,
암시 오퍼랜드 : AAM
규정에 의해서, AAM (ASCII adjust for multiplication) 은 AX 레지스터의 내용으로 연산한다.
명시 오퍼랜드 : XCGH EAX, EBX
교환될 오퍼랜드는 연산 코드를 갖는 명령내에서 인코드된다.
암시 및 명시 오퍼랜드 : PUSH COUNTER
메모리 가변 COUNTER (명시 오퍼랜드) 는 스택 (암시 오퍼랜드) 의 최상부에 복사된다.
대부분의 명령은 암시 오퍼랜드인 것을 알 수 있다. 예를들어, 모든 알고리즘 명령은 EFLAGS 레지스터를 업데이트시킨다.
명령은 하나 또는 두 개의 오퍼랜드를 명시적으로 참조한다. MOV, ADD 및 XOR 과 같은 두 개의 오퍼랜드 명령은 결과적으로 두 개로 분리된 오퍼랜드중 하나를 오버라이트하는 것이 일반적이다. 이것은 소오스 오퍼랜드 (연산에 의해서 영향을 받지않는 하나) 와 수신지 오퍼랜드 (결과에 의해서 오버라이트된 하나) 사이의 차이이다.
대부분의 명령에 대해, 두 개의 명시적으로 특정 오퍼랜드중 한 개, 즉, 소오스 또는 수신지중 어느하나는 레지스터 또는 메모리 중 어느하나에 존재할 수 있다. 다른 오퍼랜드는 레지스터내에 있거나 또는 즉시 소오스 오퍼랜드가 되어야한다. 이것은 명시하는 두 개의 오퍼랜드 명령을 후속하는 그룹, 즉, 레제스터와 레지스터 사이, 메모리와 레지스터 사이, 레지스터와 메모리 사이, 레지스터에 즉시, 및 메모리에 즉시 입력한다.
그러나, 특정한 스트링 명령 및 스택 조작 명령은 데이터를 메모리로부터 메모리로 전송한다. 일부 스트링 명령의 양 오퍼랜드는 메모리에 있고 암시적으로 지정된다. 푸쉬 및 팝 스택 동작은 메모리 오퍼랜드와 메모리를 기반으로하는 스택사이에 전송하는 것을 가능하게 한다.
여러 3 개의 오퍼랜드 명령은 IMUL, SHRD 및 SHLD 명령과 같은 것을 제공한다. 3 개의 오퍼랜드중 2 개는 2 개의 오퍼랜드 명령에 대한 것으로서 명시적으로 지정되지만, 제 3 오퍼랜드는 ECX 레지스터로부터 취해지거나 또는 즉시로서 공급된다. 반복 프리픽스를 가지고 이용되는 경우 스트링 명령과 같은 3 개의 오퍼랜드 명령은 레지스터로부터 그들의 모든 오퍼랜드를 취한다.
특정 명령은 오퍼랜드중 하나 (및 때로는 두 개) 로서 명령 자체로부터 데이터를 이용한다. 이와 같은 오퍼랜드는 즉시 오퍼랜드로 칭한다. 이것은 바이트, 워드, 또는 더블 워드가 될 수 있다. 예를 들면,
SHR PATTERN, 2
명령중 하나의 바이트는 값 2 및 가변 PATTERN 을 이동하는 비트수를 유지한다.
TEST PATTERN, OFFFFOOFFH
명령의 더블 워드는 가변 PATTERN 을 테스트하는데 이용되는 마스크를 유지한다.
IMUL CX, MEMWORD, 3
메모리에 있는 워드는 즉시 (3) 에 의해서 승산되고 CX 레지스터에 저장된다.
(제산을 제외한) 모든 대수 명령은 소오스 오퍼랜드가 즉치되는 것을 가능하게 한다. 수신지가 EAX 또는 AL 레지스터인 경우, 명령 인코딩은 다른 범용 레지스터보다 더 단축된 하나의 바이트이다.
오퍼랜드는 32 비트 레지스터 (EAX, EBX, ECX, EDX, ESI, EDI, ESP, 또는 EBP) 중 하나에 , 16 비트 범용 레지스터 (AX, BX, CX, DX, SI, DI, SP, 또는 BP) 중 하나에, 또는 8 비트 범용 레지스터 (AH, BH, CH, DH, AL, BL, CL, 또는 DL) 중 하나에 위치될 수도 있다.
프로세서는 세그먼트 레지스터 (CS, DS, ES, SS, FS, 또는 GS) 를 참조하는 명령을 갖는다. 이들 명령은 시스템 설계자가 프로그램 적용에 의해서 세그먼트 메모리 모델을 선택한 경우에만 이용된다.
또한, 프로세서는 EFLAGS 레지스터내에 있는 개별 플래그의 상태를 변경하기 위한 명령을 갖는다. 명령은 액세스에 자주 필요한 설정 및 삭제 플래그를 위해 제공된다. 자주 액세스되지 않는 다른 플래그는 스택상에 EFLAG 레지스터의 내용을 푸시하고, 스택에 있는 동안 내용을 변경하고 및 레지스터로 되돌리기 위해 팝핑 (POPPING) 함으로서 변경될 수 있다.
메모리내에 명시 오퍼랜드를 갖는 명령은 세그먼트의 개시로부터 오퍼랜드까지의 오프셋 및 오퍼랜드를 포함하는 세그먼트를 참조해야 한다. 세그먼트는 명령의 개시에서 위치된 바이트 세그먼드 오버라이드 프리픽스를 이용하여 지정된다. 세그먼트가 지정되지 않으면, 단순한 규칙이 디폴트로 할당된다. 오프셋은 이하 방법중 하나로 지정된다.
메모리를 액세스하는 대부분의 명령은 오퍼랜드의 어드레싱 방법을 지정하는 바이트를 포함한다. 소위 ModR/M 바이트로 불리는 바이트는 연산 코드후에 오며, 오퍼랜드가 레지스터에 있는지 메모리에 있는 지의 여부를 지정한다. 오퍼랜드가 메모리내에 있는 경우, 어드레스는 세그먼트 레지스터로부터 계산되고 및 이하, 즉, 베이스 레지스터, 인데스 레지스터, 스케일링 펙터 및 변위 값중 임의의 값이다. 인덱스 레지스터가 이용되는 경우, 또한 ModR/M 바이트는 인덱스 레지스터 및 스케일링 팩터를 지시하는 다른 바이트에 의해서 후속된다.
어드레싱의 이 형태는 가장 유연성이 있다.
몇 개의 명령은 적용된 어드레스 모드를 이용한다.
소오스 또는 수신지중 어느하나로서 AL 또는 EAX 레지스터를 갖는 MOV 명령은 명령내에 인코드된 더블워드을 갖는 메모리를 어드레스 할 수 있다. MOV 명령의 이런 특정 형태는 베이스 레지스터, 인덱스 레지스터, 또는 스케일링 팩터가 이용되는 것을 가능하게 한다. 이런 형태는 일반적인 목적의 형태보다 더 단축된 하나의 바이트이다.
스트링 연산은 ESI 레지시스터 (MOV, CMPS, OUTS, 및 LOAD 명령) 를 이용하거나 또는 ES 세그먼트 및 EDI 레지스터 (MOV, CMPS, INS, SCAS 및 STOS 명령) 를 사용하는 DS 세그먼트내의 메모리를 어드레스한다.
스택 연산은 ESP 레지스터 (PUSH, POP, PUSHA, PUSHAD, POPA, POPAD, PUSHF, PUSHFD, POPF, POPFD, CALL, LEAVE, RET, IRET, 및 IRETD 명령, 제외, 및 인터럽트) 내의 메모리를 어드레스한다.
ModR/M 바이트는 어드레스의 가장 유연한 형태를 제공한다. 연산 코드 이후에 ModR/M 바이트를 갖는 명령은 명령 세트내에서 가장 공통적이다. ModR/M 바이트에 의해서 지정된 메모리 오퍼렌드를 위해서, 선택된 세그먼트내의 오프셋은 3 개의 요소의 합, 즉, 변위 + 베이스 레지스터 + 인덱스 레지스터 (인덱스 레지스터는 팩터 2, 4, 또는 8 에 의해서 승산될 수도 있다) 이다.
이들 요소를 가산한 결과인 오프셋은 유효 어드레스로 불린다. 이들 요소 각각은 양의 또는 음의 값중 어느하나를 가질 수도 있다. 도 2 내지 10 은 ModR/M 어드레싱에 대한 가능한 모든 세트를 표시한 도면이다.
명령 내에 인코드되어 있기 때문에, 변위 요소는 단순한 스칼라 연산의 위치, 정적(靜的) 으로 할당된 배열의 개시, 및 리코드내의 필드에 대한 오프셋과 같은 고정된 양에 의해서 상대적인 어드레싱에 유용하다.
베이스 및 인덱스 요소는 유사한 기능을 갖는다. 양측 모두는 범용 레지스터의 동일한 세트를 이용한다. 양측 모두는 선행하는 파라메터의 위치 및 스택상의 국부적인 변화 가능한 위치, 동일한 레코드 타입의 또는 레코드의 배열내에 있는 여러 어커런스중 하나의 개시, 다수 크기 배열중 하나의 크기의 개시, 또는 동적으로 할당된 어레이의 개시와 같은 것이 프로그램이 실행되는 동안 변경하는 어드레싱을 위해 이용될 수 있다.
ESP 레지스터가 인덱스 레지스터로서 이용될 수 없는 점에서 베이스 또는 인덱스 요소로서 통상적인 레지스터의 이용이 다르다. ESP 또는 EBP 레지스터가 베이스로서 이용되는 경우, SS 세그먼트는 티폴트 선택이다. 모든 다른 경우에, DS 세그먼트는 디폴트 선택이다.
어레이 요소가 2, 4, 또는 8 바이트인 경우 스케일링 팩터는 어레이로 효과적인 인덱싱 하는 것을 가능하게 한다. 인덱스 레지스터의 스케일링은 어드레스가 평가된 때에 하드웨어에서 실행된다.
베이스, 인덱스 및 변위 요소가 임의의 조합으로 이용될 수도 있고, 임의의 이들 요소는 널이 될 수도 있다. 또한, 스케일 펙터는 인덱스가 이용되는 경우만 이용될 수 있다. 각 가능 조합은 하이 레벨 언어 및 어셈블리 언어로 프로그래머에 의해서 공통적으로 이용되는 데이터의 구조에 유용하다. 어드레스 요소의 일부 조합의 제안된 이용법이 이하 서술된다.
변위만이 오퍼랜드의 오프셋을 지시한다. 어드레싱의 이런 형태는 정적으로 할당된 스칼라 오퍼랜드를 억세스하는데 이용된다. 하나의 바이트, 워드 또는 더블워드 변위가 이용될 수 있다. 오퍼랜드에 대한 오프셋은 "기반" 이되는 가변에 대한 것으로서 범용 레지스터중 하나에서 직접 지정된다.
레지스터 및 변위는 2 개의 다른 목적을 위해서 함께 이용될 수 있다. 첫 번째로, 요소 크기가 2, 4 또는 8 바이트가 아닌 경우 정적 어레이로 인덱스한다. 변위 요소는 어레이의 개시 오프셋을 인코드한다. 레지스터는 어레이 내의 지정 용소에 대한 오프셋을 결정하기 위해 계산의 결과를 유지한다. 두 번째로, 레코드의 필드를 액세스한다. 베이스 레지스터는 레코드의 개시 어드레스를 유지하고, 변위는 필드에 대해 오프셋이다.
이 조합의 주요한 특정한 경우는 선행 활성 레코드는 서브루틴에 인입한 경우 생성된 스택 프레임이다. 이경우에서, 바동적으로 스택 세그먼트를 선택하기 때문에, EBP 레지스터는 베이스 레지스터를 위한 최선의 선택이다.
(INDEX*SCALE)+DISPLACEMENT. 이 조합은 요소 크기가 2, 4, 또는 8 인 경우 정정 어레이로 인덱스하기위한 효과적인 방법이다. 변위는 어레이의 개시를 어드레스하고, 인덱스 레지스터는 희망하는 어레이 요소의 서브스크립트를 유지하고, 프로세서는 스케일링 펙터를 적용함으로서 인텍스로 서브스크립트를 자동적으로 변환시킨다.
BASE + INDEX +DISPLACEMENT. 두 개의 레지스터는 두 개의 크기의 어레이(변위는 어레이의 개시 어드레스를 유지한다.) 또는 레코드 어레이의 여러 사례중 하나 (변위는 레코드내에 있는 필드에 대한 오프셋이다.) 에 관한 것중 어느 하나를 함께 지원한다.
BASE + (INDEX*SCALE) + DISPLACEMENT. 이 조합은 어레이 요소가 2, 4, 및 8 바이트 크기인 경우 2 개의 크기 어레이의 효과적인 인덱싱을 제공한다.
모든 명령 인코딩은 도 2 에 도시한 통상적인 명령 포맷의 서브 세트이다. 명령은 선택적인 명령 프리픽스, 즉, 하나 또는 두 개의 초기 연산 코드 로 이루어지고, 어드레스 지정자가 ModR/M 바이트 및 SIB (스케일 인덱스 베이스) 바이트, 필요하다면, 변위, 및 필요하다면 즉시 데이터 필드로 이루어지는 것을 가능하게 한다.
더 작은 인코딩 필드는 초기 연산코드 또는 연산 코드내에 규정될 수 있다. 이들 필드는 연산의 방향, 변위의 크기, 레지스터 인코딩, 또는 부호 확장을 규정하고, 인코딩 필드는 연산의 클래스에 의존한다.
오퍼랜드에 참조될 수 있는 대부분의 명령은 초기 연산 바이트를 따른 어드레싱 형태의 바이트를 갖는다. ModR/M 바이트로 불리는 이 바이트는 이용될 어드레스 형태를 지정한다. ModR/M 바이트의 특정 인코딩은 제 2 어드레싱 바이트 및 ModR/M 바이트를 따르고 어드레스 형태를 지정하기 위해서 요구되는 SIB (스케일 인덱스 베이스) 바이트를 지시한다.
어드레싱 형태는 ModR/M 또는 SIB 바이트중 어느하나를 즉시 따르는 변위를 포함한다. 변위가 존재한다면, 8 비트, 16 비트 또는 32 비트가 될 수 있다.
명령이 즉시 오퍼랜드를 지정한다면, 할상 즉시 오퍼랜드는 임의의 변위 바이트를 따르고, 지정되면, 즉시 오퍼랜드는 항상 명령의 제일 마지막 필드이다.
이하는 가능한 명령 프리픽스 코드 :
F3H (스트링 명령과만 함께 사용되는) REP 프리픽스
F3H (스트링 명령과만 함께 사용되는) REPE/REPZ 프리픽스
F2H (스트링 명령과만 함께 사용되는) REPNE/REPNZ 프리픽스
F0H LOCK 프리픽스
이하는 세그먼트 오버라이드 프리픽스:
2EH CS 세그먼트 오버라이드 프리픽스
36H SS 세그먼트 오버라이드 프리픽스
3EH DS 세그먼트 오버라이드 프리픽스
26H ES 세그먼트 오버라이드 프리픽스
64H FS 세그먼트 오버라이드 프리픽스
65H GS 세그먼트 오버라이드 프리픽스
66H 오퍼랜드 크기 오버라이드
67H 어드레스 크기 오버라이드
ModR/M 및 SUB 바이트는 프로세서 명령중 많은 명령내에 연산 코드 바이트를 따른다.
-명령에 이용될 인덱싱 타입 또는 레지스터 번호
-이용될 레지스터 번호, 또는 명령을 선택하기 위한 더 많은 정보
-베이스, 인덱스, 및 스케일 정보
-정보의 3 개 필드를 포함한 ModR/M 바이트
-바이트중 2 개의 최상위 비트를 점유하고, 32의 가능한 값을 형성하기 위해 R/M 필드와 조합한 모드 (mod) 필드, 8 개의 레지스터 및 24 개의 인덱싱 모드
-모드 필드를 따르는 다음 3 개의 비트를 점유하고, 레지스터 번호 또는 연산 코드의 더 많은 비트수를 지정하는 레그 (reg) 필드. 레그 필드의 의미는 명령의 제 1 (연산 코드) 바이트에 의해서 결정된다.
-바이트중에 적어도 3 개의 최하위 비트를 점유하고, 오퍼랜드의 위치로서 레지스터를 지정할 수 있거나 또는 상술할 바와같은 모드 필드와 저합하여 인코딩을 지정할 수 있는 R/M 필드.
32 비트 어드레싱의 베이스 인덱스 및 스케일 인덱스 형태는 SIB 바이트를 요구한다. SIB 바이트의 존재는 ModR/M 바이트의 특정 인코딩에 의해서 지시된다.
-바이트의 최상위 2 비트를 점유하고, 스캐일 펙터를 지정하는 ss 필드.
-ss 필드를 따르는 다음 3 개의 비트를 점유하고, 인덱스 레지스터의 레지스터수를 지정하는 인덱스 필드.
-바이트중 최하위 3 개의 비트를 점유하고, 베이스 레지스터의 레지스터 수를 지정하는 베이스 필드.
도 3 은 ModR/M 및 SIB 바이트의 포맷을 도시한 도면이다. ModR/M 및 SIB 바이트의 값 및 대응하는 어드레싱 형태를 인텔 486TM프로세서 페밀리 프로그래머의 참조 매뉴얼의 표 27-2, 27-3 및 27-4 에 나타낸다. ModR/M 바이트에 의해서 지정된 16 비트 어드레싱 형태는 동일 매뉴얼의 표 27-3 에 있다. 동일 매뉴얼의 27-4 는 SIB 바이트에 의해서 지정된 32 비트 어드레싱 형태를 나타낸다.
도 4 는 종래 마이크로 프로세서의 디코드 단계를 도시한 하이 레벨 블록도이다. 라인 버퍼 (12) 는 다이어 그램의 상부에 표시된다. 디코드 단계는 라인 버퍼 (112) 없이 디코딩만을 위해서 명령을 풀한다. 따라서, 라인 버퍼 (112) 는 프리페치 단계 및 디코드 단계사이의 데이터 인터페이스이다. 프리페치 버퍼는 16 바이트 회로 버퍼이다. 디코드 단계는 명령 포인터 발생 회로 (1100) 에의해서 발생된 일연의 명령 포인터에 의해서 지시됨으로서 라인 버퍼 (112) 내에 바이트 위치 없이 명령 바이트를 풀한다.
명령 포인터는 요구 명령 포인터 (DIP), 일시적인 명령 포인터 (TIP), 연산코드 길일 포인터 (TIPOPLEN), 및 시프트 포인터 (TIPSHIFT) 를 포함한다. DIP 는 디코드 단계상에서 현재 연산될 명령의 제 1 바이트 선형 주소를 지시하기 위해 생성된 각 클록 사이클이다. (버퍼 폭이 8 또는 23바이트이기 때문에) DIP 의 최하위 3 개의 바이트는 제 1 명형 바이트가 존재하는 라인 버퍼내에 특정 바이트 위치를 지정한다.
TIP 는 디코드 단계에 의해서 처리되지 않은 명령의 제 1 바이트를 지시하기 위해 생성된 각 사이클이다. TIP 는 아직 처리되지 않은 명령의 제 1 바이트의 라인 버퍼 (112) 내에 있는 바이트 위치를 지시한다. TIP 는 명령 개시에서의 DIP 와 동일하게 된다. TIP OPLEN 포인터는 상수 데이터의 제 1 바이트를 지시하도록 TIP 포인터와 연산코드 길이의 합으로 설정된다. 명령이 존재한다면, DIPOLEN 의 3개 LSB 는 상수 데이터의 제 1 바이트에 대해서 라인 버퍼 (112) 내의 바이트 위치를 지시한다.
디코드 단계가 바이트를 처리하는 경우 TIP 가 업데이트될 것이고 TISPSHIFT 포인터는 이에따른 어드레스를 지시한다. TISPSHIFT 의 3 개 LSB 는 TIP 가 업데이트될 바이트의 라인 버퍼내에 있는 바이트 위치를 지시한다. TIPSHIFT 는 디코드 단계에 의해서 현재 연산되는 명령의 부분에 의존하여 후속하는 명령중 하나에 의해서 제어된다. 특히, TIPSHIFT 는 (1) 1 이 될 것이고, (2) TIP 포인터는 존재한다면, 현재 디코드 단계내에 있는 명령의 제 1 오퍼랜드에 연산 서브필드의 길이를 가산하거나, 또는 (3) TIP 포인터는 현재 디코드 단계에 있는 명령의 제 2 오퍼랜드 길이를 가산한 것이 될 수 있다.
이 명세서 기술에서, 바이트가 디코드되거나 또는 이하 더 상세하게 설명된 섀도 레지스터에 저장되는 연산코드 오셈블리 회로 (1106) 및/또는 상수 데이터 포트 (1108, 1110 및 1112) 로 데이터 명령 회로 (1102 및 1104)를 통해 바이트가 통과 되는 경우 디코드 단계에 의해서 "처리" 된다. 명령이 임의의 프리픽스 바이트를 가지면, 바이트는 사이클당 하나가 처리된다. 모든 연산코드 바이트 뿐만아니라 존재한다면 상수 서브필드내에 있는 제 1 오퍼랜드의 모든 바이트도 가장 마지막 프리픽스 바이트의 디코딩을 따르는 하나의 사이클 내에서 동시에 처리된다. 상수 서브필드내에 제 2 오퍼랜가 있다면, 모든 바이트는 하나의 서브시퀀트 사이클내에서 동시에 처리된다.
종래 디코드 단계는 연산코드 데이터 명령 회로 (1102) 로 이루어진다. 이 단계는 8 바이트 내지 3 바이트 명령 회로 주기이다. 이 단계는 라인 버퍼 (112) 로부터 모두 8 개의 바이트내로 취해지고, TIP 포인터에 의해서 지시된 라인 버퍼내의 바이트 위치와, 회로 Q 형식내에서 후속하는 바이트를 선택한다. 종래 연산코드 명령 회로 (1102) 는 TIP 포인터에 의해서 지시된 제 1 바이트가 연산코드 바이트 도는 프리픽스 바이트이면 결정을 위한 회로를 포함한다. 이것이 프리픽스 바이트이고 태그된 타당한 것이면, 프리픽스 디코딩 논리 회로 (1116) 로 지시되는 연산코드 어셈블리 회로 (1106) 로 진행한다. 제어 디코드 논리 (1116) 는 프리픽스 바이트에 의해서 전송된 정보에 대응하는 프리픽스 레지스터 (1114) 내의 플래그를 설정한다. TIP 에 의해서 지시된 라인 버퍼 (112) 내의 바이트 위치는 태그된 타당한 것이 아니면, 디코드 단계는 연속하는 사이클내에서 태그된 타당한 값이 될 때 까지 단순히 정지한다.
상술한 배경은 마이크로 프로세서를 위한 종래 디코드 회로를 상술한 것이다.
향상된 프로세서 속도에 대한 문제점에서, 본 발명의 목적은 사이클당 명령 디코드되는 수를 더 증가시키는데 있다.
본 발명의 다른 목적은 향상이 탄력적인 모듈 방법으로, 즉, (병렬 또는 파이프라인 디코드 단계를 통해) 동시에 조작 가능한 명령의 수에대한 폭 또는 깊이를 추가함으로서, 디코드 단계의 실행을 향상시키는데 있다. 다시말하면, 본 발명의 다른 목적은 병렬 처리를 통해 실행을 향상시키 위해 다수의 디코더가 첨부될 수 있는 시스템의 스케일링을 가능하게 한다.
본 발명의 다른 목적은 최대 실행, 더빠른 디코더 및 더 효과적인 명령의 디코더를 위해 설정하는 명령내에서 모든 명령의 완료 동작을 미세하게 동조시키는데 있다.
본 발명의 다른 목적은 디코드 단계의 메모리 요구를 현저하게 증가시키지 않고 디코더의 실행을 향상시키는데 있다.
본 발명의 다른 목적은 디크드 단계의 복잡도를 현저하게 증가시키지 않고 시스템에 대한 부가적인 비용을 추가하지 않고 탄력적이고 향상된 방법으로 디코드의 실행을 향상시키는데 있다.
본 발명의 또다른 목적은 레지스터 오퍼랜드 명령에 대해 유사한 동작을 하지 않는 메모리 오퍼랜드 명령의 디코드 실행을 최대화하는 데 있다.
도 1 은 종래 기술의 파이프라인 마이크로프로세서에 관한 하이 레벨을 도시한 도면.
도 2 는 마이크로프로세서에서 이용되는 명령의 가능하고 다양한 서브필드 및 개별 바이트르러 표시한 블록도.
도 3 은 마이크로프로세서에서 이용되는 명령의 ModR/M, SIB 서브필드 및 개별 비트를 표시한 블록도.
도 4 는 종래 기술의 마이크로프로세서의 디코드 단계에 대한 하이 레벨 블록도.
도 5 는 본 발명의 마이크로코드 기반 디코더를 이용한 마이크로프로세서의 하이 레벨 설계도.
도 6 은 본 발명의 마이크로코드 기반 디코더의 하이 레벨 디코더 블록도.
도 7 은 본 발명의 디코더에서 이용되는 어드레스 발생 포로세스를 표시한 블록도.
도 8 은 본 발명의 디코더의 eROM, ModR/M 및 SIB 표를 출력 및 결합하는 것을 표시한 블록도.
도 9 는 본 발명의 디코더내에 이용되는 크기 논리를 표시한 도면.
도 10 은 본 발명의 디코더내에 이용되는 ROM 엔트리 선택을 표시한 도면.
도 11 은 종래 기술 디코더의 기능에 대하여 본 발명에 따른 일반적인 명령을 이용한 마이크로코드 기반 디코더의 기능을 비교한 예시적인 코드 시퀀스를 도시한 도면.
*도면의주요부분에대한부호의설명*
10 : 프리페치 버퍼
12 : 라인버퍼
14 : 디코더
16 : eROM
18 : μROM
19 : μ시퀀서
본 발명은 마이크로프러세서를 위한 마이크로코드 기반 디코터 회로에 관한 것이다. 마이크로코드 기판 디코더는 명령을 디코드하기 위해 빠른 액세스 표를 이용한다. 표에 대한 포인터는 연산코드, 그룹 비트 및 두 개의 바이트의 연산 코드 비트에 의해서 부여된다. 엔트리 ROM (eROM) 표라는 빠른 액세스 표는 제 1 마이크로 명령과 떨어져 있는 연산 코드에 관한 일부 정보 비트로 구성된다. 이들 비트는 추가 비용 없이 표에 추가되고 명령의 더 빠른 디코드를 가능하게 한다. 또한, 이들 비트는 연산 코드가 ModR/M 바이트를 갖는지의 여부를 지시한다. 이런 경우에, 바이트 추출기로부터 추출된 ModR/M 바이트는 유효하게 되고 ModR/M 표로 불리는 다른 룩업 표에 엔트리를 부여한다. ModR/M 표는 어드레싱 모드 정보를 포함하고 특정 명령이 메모리 액세스를 필요로하는 지를 지시한다. 또한, ModR/M 표는 명령이 어드레스 모드의 스케일된 인덱스 형태를 포함하는지를 지시한다 이를 실행하는 경우에, 바이트 추출기로부터 SIB 바이트를 유효화시킨다. SIB 바이트는 SIB 표라는 제 3 룩업 표에 엔트리를 부여한다. 프리페치 버퍼, 3 개의 표, eROM, ModR/M 및 SIB 로부터 명령이 추출되자마자 함께 동시에 명령 길이, 어드레싱 모드, 소오스와 목적 레지스터 및 다른 직접적인 정보를 동시에 함께 제공한다.
메모리 오퍼랜드를 이용하는 명령의 동작과 레지스터 오퍼랜드를 이용하는 명령의 동작은 다르다. 이 차이점은 메모리 오퍼랜드를 갖는 대부분의 명령에 대해 유사하며, 실행될 제 1 마이크로명령에 있다. 본 발명의 디코더의 하나의 단일 형태는 "일반 마이크로명령" 의 이용에 의해서 마이크로명령을 분할하는 것이 가능하다. 일반 마이크로명령은 단일 마이크로명령이다. 메모리 오퍼랜드를 갖는 명령의 동장에서 유사성을 효과적으로 이용한다. 이것은 메모리 오퍼랜드를 갖는 모든 명령에 의해서 마이크로명령을 분할 하는 것을 가능하게 한다. 그 이용 및 동작은 eROM 표내의 정보에 의해서 제어된다. 특히, eROM 표에 의해서 생성된 "use_generic" 비트에 의해서 제어된다. 이것은 과잉을 회피하고 마이크로코드 공간을 절약한다.
비록 많은 메모리 기반 명령이 유사하게 동작하더라도, 그들주 일부는 그렇지 않다. 명령의 더 넓은 범위를 커버하기 위해서, eROM 및 μROM 양측 모두를 동시에 액세스 함으로서 유연성이 제공된다. eROM 표 없이 생성된 정보비트에 근거하여, eROM 또는 μROM 중 하나만 선택된다. 또한, eROM 표내의 정보 비트는 일반 마이크로명령이 이용될 수 있는 지의 여부를 지시한다. 이 형태는 메모리 오퍼랜드의경우에 유사 동작을 하지 않는 잔여 명령을 커버한다. 따라서, 명령 세트의 모든 정보에 대한 전 동작은 최대 실행을 위해 미세 동조를 할 수 있고 더 빠르며 효과적으로 명령을 디코드 할 수 있다. 더 빠르고 더 효과적인 명령 디코드는 eROM 및 μROM 표내의 미리 디코드된 정보 및 일반 마이크로 명령을 이용함으로서 가능하다.
일반 마이크로 명령은 메모리 오퍼랜드를 이용하는 명령 사이의 마이크로명령을 분할 하는 것이 가능하다. 마이크로프로세서 명령내의 모든 명령 처리를 가능하게 하기 위해서, 여러 일반 명령이 요구된다. 여러 마이크로명령을 이용하기 위한 것은 일부 일반 마이크로 명령마을 이용하는 이점을 제거한다. 게다가, 다수의 일반 마이크로명령이 이용되면 이들은 하나의 필드에 의해서만이 달라진다. 단지 하나에 대해서 일반 ROM 내의 엔트리 수를 감소시키는 것은 더빠른 액세스를 가능하게 하고, eROM 표내의 "generic_memop" 라는 일부 정보 비트는 정확한 필드를 지시하는데 이용된다. 따라서, 일반 마이크로명령은 엔트리 ROM 으올부터 정보를 동적으로 이용하여 발생된다. 명령의 연산코드는 eROM 의 엔트리 포인트를 지시한다. 이 eROM 은 실행될 제 1 마이크로명령 뿐만아니라 연산코드에 대해 미리 디코드된 정보로 이루어진다. 즉, eROM 표는 연산코드에 대해 미리 디코드된 정보를 모든 가능한 제 1 마이크로명령에 첨부한 리스트로 이루어진다. 일반 μROM 의 이용 및 그의 동적 발생을 제어하는 "use_generic" 이 미리 디코드된 정보 내에 포함된다. 이에 더하여, eROM 표는 2 개의 ROM 중 하나를 선택하는데 이용되는 "use_μROM " 라는 다른 비트 신호를 생성할 수 있다. 이들 비트는 시스템에 대한 추가 비용 없이 추가되고 더 효과적이고 빠른 디코드를 가능하게 한다.
비록 일부 메모리 오퍼랜드 명령이 레지스터 오퍼랜드 명령에 유사하더라도, 일부는 그렇지 않다. 이들 명령 형태에 대한 디코드의 실행을 최대화 하기 위해서, 분할된 μROM 액세스가 이용된다. 분할된 μROM 액세스는 ROM, μROM 및 eROM 인 양측 모두가 동일 어드레스에 의해서 동시에 액세스된다. 관련 엔트리는 eROM 으로부터 정보 비트를 이용함으로서 선택된다. 이 형태는 다수의 μROM 및 eROM 쌍이 병렬 처리를 통해 실행을 향상시키기 위해 추가될 수 있는 시스템의 스케일링을 가능하게 한다.
도 5 에 따르면, 본 발명의 바람직한 실시예는 마이크로프로세서를 위한 마이크로코드 기반 디코더를 포함한다. 마이크로코드 기반 디코더 회로 단계 (8) 는 연산 코드 바이트 추출기 (12) 에 의해서 처리가능한 16 개의 바이트 회로 프리페치버퍼 (10) 를 포함한다. 바이트 추출기 (12) 는 3 개의 데이터 경로를 통해 레지스터 단계에 접속된다. 제 1 의 두 개 데이터 경로는 32 비트 폭이고 변위 및 즉시 오퍼랜드를 각각 레지스터 단계로 전송한다. 제 3 데이터 경로는 16 비트폭이고, 즉시 2 오퍼랜드를 전송한다. 연산코드 바이트 추출기 (12) 는 24 비트폭 데이터 경로에 의해서 디코더 (14) 에 접속된다. 또한, 디코더 회로 단계 (8) 는 엔트리 ROM (eROM) (16) 으로 칭하는 명령을 디코드하기 위한 빠른 액세스 표를 포함한다. eROM (16) 은 프리페치 버퍼 (10) 으로부터 11 비트를 이용하여 액세스된다. 디코더 회로 단계 (8) 는 프로세서의 여러 부분을 제어하기 위해 마이크로시퀀서 (μ시퀀서) 를 구동하는데 MicroROM(μROM) 을 이용한다.
도 6 은 본 발명의 디코더의 바람직한 실시예를 더욱 상세하게 도시한 도면이다. 연산 코드 추출기 (22) 는 명령의 제 1 의 3 개 바이트를 액세스하기 위해 16 개 바이트 회로 프리페치 버퍼 (20) 내에 며령의 개시에 대한 포인터를 이용한다. 따라서, 디코드될 명령의 제 1 의 24 비트는 eROM 표 (24), ModR/M 표 (26), SIB 표 (28), 및 μROM 표 (30) 에 대해 즉시 이용가능하다. 도 5 에 도시한 디코더 (14) 는 ModR/M 표 (26), SIB 표 (28), 선택 논리 (34), 크기 논리 (36), 대수 논리부 (ALU)(38), 및 일반 마이크로 명령 발생기 (32) 로 이루어진다.
사용 포인터가 명령 규정의 제 1 의 3 개 바이트로부터 직접발생되고, 동시에 룩업 (lookup) 은 명령의 기능을 실행하고 명령의 오퍼랜드를 액세스하는에 알 필요가 있는 명령 프로세서에 관한 모든 것을 빠르게 결정하기 위해 eROM 표 (24), ModR/M 표 (26) 및 SIB 표 (28) 내에서 실행된다. 선택 논리 (34) 및 크기 논리 (36) 을 통해서, 정보 비트 (infobit) 형식내의 정보는 ROM 개시 (40) 에 대한 마이크로명령을 컴파일하는데 이용되고, 프로세서가 마이크로코드를 실행하는데 필요한 포인터 및 길이 파라메터를 계산한다.
또한, 모든 가능한 명령에 대해 마이크로명령을 포함하는 μROM (30) 은 명령의 제 1 의 3 개 바이트에 대해 동시에 액세스한다. 또한, eROM 표 (24) 는 디코드되고 infobit use_μROM 이 로우인 경우 ROM 개시 (40) 에 대한 마이크로명령을 발생시킬수 있는 가능한 명령을 위한 제 1 마이크로명령을 포함한다. 일반적인 ROM (32) 은 다수 연산 코드에 공통인 비트를 어셈블링하한 저장소로서 언제든지 사용이 가능한 단일 명령 범용 메모리이다. 연산코드의 넓은 범위를 커버하기 위해서, eROM 표 (24) 에 의해서 생성된 일부 정보 비트는 일반 ROM 의 명령을 다이나이나믹하게 생성하는데 이용된다.
도 7 에서, eROM 표 (24) 에 대한 포인터는 연산 코드 (42), 그룹 비트 (46) 및 "2 개의 바이트 연산코드" 비트 (60) 에 의해서 부여된다. 특히, (연산코드 바이트 (42) 로 칭하는) 명령의 제 1 바이트, (명령의 다음 바이트(ModR/M 바이트 50) 중 제 5, 제 4 및 제 3 비트인) 3 개의 "레지스터 또는 연산 비트"(Reg/Op 비트) (46), 및 "2 개의 바이트 연산코드" 비트 (60) 은 eROM 표 (24) 내에서 어드레스로서 이용된다. 이것은 표의 빠른 액세스를 가능하게 한다. "2 바이트 연산코드" 신호 (60) 는 디코드가 실행되는 사이클에 즉시 선행하는 클록 사이클 동안 프리페치 버퍼 (10) 로부터 직접 프리픽스 바이트를 판독함으로서 발생된다. 프리픽스 바이트가 0FH 이면, 그후, "2 바이트 연산 코드" 는 "1" 로 세트되고, 2 바이트 연산코드 맵 (map) 이 하나의 바이트 연산코드 맵에 반대하여 eROM 에서 이용된다. 배경부에서 상술한바와 같이, 이 비트의 이용은 프로세서가 지지할 수 있는 연산코드의 수를 근본적으로 2 배한다.
eROM 표 (24) 는 제 1 마이크로명령에 첩부하여 연산코드 (42) 에 관한 정보비트의 서브세트로 이루어진다. 이들 정보 비트는 추가비용 없이 표 (24) 에 부가되고, 이들은 명령의 디코드를 더욱 빠르게 하는 것을 가능하게 한다. 또한, 이들 정보 비트는 연산코드 (42) 가 ModR/M 바이트 (50) 를 갖는 지의 여부를 지시한다. ModR/M 바이트가 존재하는 경우, 바이트 추출기 (22) 로부터 추출된 ModR/M 바이트 (50) 는 유효하고, ModR/M 표 어드레스 (80) 는 상술한 도 6 의 ModR/M 표 (26) 로 칭하는 제 2 의 표내에 개입을 제공한다. ModR/M 표 어드레스 (80) 은 2 개의 Mod 비트 (44) (ModR/M 내의 제 7 및 제 6 비트), 3 개의 R/M 비트 (48) (ModR/M 내의 제 2, 제 1 및 제로 비트) 및 "a32 오버라이트" 비트로 XOR 된 "a32" 비트 (72) 로 칭하는 신호로부터 형성된다. 디코더 (14) 는 "머신 상태 상태비트" 로칭하고, 또한 "a32" 비트로 칭하는 신호를 입력한다. 이 신호는 프로세서의 구성을 규정한다. 특히, 이비트는 머신이 16 또는 32 비트 모드에서 실행하기 위해 프로그램되었는 지의 여부를 지시한다. 명령은 희망된 모드에 대해 일시적으로 변경될 머신 구성을 가능하게 하는 프리픽스를 포함할 수 있다. 즉, 예를 들어, 프리픽스는 32 비트 머신으로서 구성된 프로세서가 16 비트 명령으로서 구성된 명령을 실행하는 것을 가능하게하여 이용될 수 있다. "머신 상태 상태비트" (72) 는 미리 프로그램된 상수이지만 디코드가 실행되는 사이클에 즉시 우선하는 클록 사이클 동안 프리페치 버퍼 (10) 로부터 직접 판독한 프리픽스 바이트 (도 3 에 도시함) 내에 포함된 "a32 오버라이트" 비트를 가지고 XOR 함으로서 변경될 수 있다. ModR/M 표 (26) 은 언제든지 가능한 마이크로명령을 포함한다. 따라서, ROM (32) 내에 저장된 단일의 일반 마이크로명령은 메모리 오퍼랜드를 사요하는 명령의 동작 (또는 비트 패턴) 의 유사성을 효과적으로 이용한다. 즉, ROM 개시 레지스터 (40) 에 마이크로명령을 제공하기 위한 이 ROM (32) 의 이용은 메모리 오퍼랜드를 이용하는 모든 명령에 의해서 마이크로 명령의 분배를 가능하게 한다.
일반 ROM (32) 의 내용은 eROM 표 (24) 및 선택 논리 (34) 의 출력에 의해서 즉시 선택된다. 특히, 일반 ROM (32) 의 사용은 eROM 표 (24) 내의 "use_generic" 에 의해서 제어된다. 이것은 과잉을 회피하고 마이크로코드 공간을 절양한다.
살술한 바와 마찬가지로, 많은 메모리 기반 명령은 유사하게 동작한다. 그렇지 않은 명령들을 위해서 제공하는 것은, 양 eROM (24) 및 μROM (30) 이 동시에 액세스된다. eROM 표 (24) 에 없는 생성된 정보 비트에 근거하여, ROM 엔트리 (40) 을 위해 마이크로명령만 eROM 표 (24) 에 의해서 출력하거나 또는 μROM (30) 의 출력이 선택된다. 또한, eROM 표 (24) 에 없는 로우 정보 "use_generic" 신호는 일반 마이크로명령이 이용될 수 있는 지의 여부를 지시한다. 이 형태는 메모리 오퍼랜드의 경우에 유사 동작을 하지 않는 명령의 리세트를 커버한다. 따라서, 명령중 모든 명에 대한 완료 동작은 최대 실행을 위해 미세하게 동조될 수 있고 명령의 빠르고 효과적인 디코드를 할 수 있다. 명령의 더 빠르고 더 효과적인 디코드는 개발한 유사점과 관련하여 eROM (24) 및 ModR/M (26) 표내에 있는 미리 디코드된 정보 또는 명령 세트의 비트 패턴내에 있는 여분을 이용하고, 일반 ROM (32) 내에 저장되는 일반 마이크로명령을 생성하는 것으로서만 가능한 것을 알 수 있다.
상술한 바와 같이, 일반 ROM (32) 내에 저장되는 일반 마이크로명령은 메모리 오퍼랜드를 이용하는 명령 사이에서 마이크로명령을 분할 하는 것이 가능하게 한다. 메모리 오퍼랜드를 사용하는 것에는 적합하지 않지만, 이 개념을 엔트리 명령 세트에 적용하는 것은 일반 마이크로명령의 여러 상이한 버전 및 현재 명령 형식에 대해 적절한 특정 버전을 선택하기 위한 추가 하드웨어를 요구하게 된다. 이런 해결 방법은 일반 마이크로명령의 목적을 회손하고 단일의 일반적인 마이크로명령만을 사용하는 이득을 제거하게 된다. 더욱이, 일반적인 마이크로 명령의 여러 버전이 수단이 되는 경우, 이들은 하나만의 필드에 의해서 상이해진다. 바람직한 실시예의 하나의 해결 방법은 "동적" 한 일반 마이크로명령을 이용하는 것이다.
"동적" 한 마이크로명령은 하나의 상이한 필드에 대해 정확한 비트 패턴결정하기 위해서 eROM 표 (24) 에 없는 "generic_memop" 라는 정보 비트를 이용함으로서 설정되는 마이크로프로세서 명령 내의 거의 대부분의 모든 명령을 처리하는 것이 가능하다. 더욱 빠른 액세스는 일반적인 ROM 내에 하나만을 엔트리함으로서 가능해진다. 따라서, 일반 마이크로명령은 엔트리 ROM (24) 로부터 정보를 동적으로 이용하여 생성된다.
상술한 바와 같이, 명령의 연산 코드는 eROM (24) 내에 있는 엔트리 포인트를 지시한다. 이 eROM 표 (24) 는 실행될 제 1 마이크로명령 뿐만아니라 연산코드에 대해 미리 디코드된 정보로 이루어진다. 즉, eROM 표 (24) 는 모든 가능한 제 1 마이크로명령의 리스트를 포함하고 각 연산코드에 관해서 미리 디코드한다. 일반 μROM (32) 의 사용 및 ROM 엔트리 (40) 에 대한 마이크로명령의 동적 생성을 제어하는 "use_generic" 비트는 미리 디코드된 정보내에 포함된다. 상술한 바와 같이, use_generic 비트 신호는 일반 ROM (32) 이 선택되는 경우 지정하여 그곳에 어셈블된 일반 명령이 이용된다. 이 신호는 레지스터 또는 RAM 중 어느하나에 오퍼랜드가 존재할 수 있는 대분분의 연산 코드에 대해 활성화된다. 예를들면, BTC, BTR, INC 및 LLDT 와 같은 연산코드는 레지스터 또는 메모리 오퍼랜드 중 어느하나를 사용할 수 있다.
비록, 일부 메모리 오퍼랜드 명령이 레지스터 오퍼랜드 명령에 유사하게 동작하더라도, 일부는 그렇지 않다. 명령의 이런 형식에 대한 디코드의 실행을 최소화하기 위해서, 분할된 μROM 액세스가 이용된다. 분할된 μROM 액세스는 ROM, μROM (30) 및 eROM (24) 인 양측 모두는 동일한 어드레스에 의해서 동시에 액세스된다. 관련 엔트리는 eROM (24) 로부터 정보 비트를 이용하여 선택된다. 특히, eROM 표 (24) 는 μROM 또는 eROM (24) 및 ROM 엔트리 (40) 중 어느하나를 선택하는데 이용되는 "use_μROM" 라는 비트 신호를 생성할 수 있다. 이형태는 병렬 처리를 통해 실행을 향상시키기 위해 μROM (30) 및 eROM (24) 의 다수 쌍내에 시스템 스케일링이 추가될 수 있게한다. 정보 비트는 추가 비용 없이 시스템내에 첨부되고, 결과적으로 더 효과적이고 더 빠른 디코드를 가능하게 한다.
도 9 를 참조하면, 전체 명령 길이를 계산하기 위해 도 6 에 크기 논리 (36) 블록에 의해서 표시된 논리를 상세하게 설명한다. disp 길이는 디코드된 명령내에 존재 및 형태에 근거하여 선택된 eROM disp, ModR/M disp, SIB disp, 또는 제로중 어느하나와 동일한
Figure 1019970044693_B1_M0001
(erom.elength, modrm.sib, displength, erom.imm1len, erom.imm2len) 에 의해서 명령 길이가 부여된다. 따라서, 가산기 (95) 는 eROM (88) 로부터 elength, immllen, 및 imm21en 신호, MosR/M 표 (90) 으로부터 sib 신호, 및 적절한 변위의 길이인 먹스 (94) 의 출력과 이들과의 합을 받아들인다. 적절한 변위는 표준 방법으로 실행될 수 있는 이하 논리식에 근거하여 선택된다.
If(erom.modrm && modrm.sib) then mux_sel=1;
If(erom.modrm && !modrm.sib) then mux_sel=2;
If(erom.disp) then mux_sel=3; and
Else mux_sel=0
이 논리의 출력, mux_sel 은 가산기 (95) 에 인가하기 위해 적절한 disp 신호를 선택하는데 이용된다.
도 10 에 있어서, 이하, ROM 엔트리 (40) 에 대해 적절한 마이크로명령을 선택하는 도 6 의 선택 논리 (34) 블록을 설명한다. 선택 논리는 표준 방식으로 실행될 수 있는 이하 논리 규칙에 의해서 구동된 먹스 (96) 를 포함한다.
If(modrm.memaccess && erom.use_generic) then mux_sel2=0, use_lrom=1;
If(use_lrom)then mux_sel2=1;
If(use_erom)then mux_sel2=2; and
Else mux_sel2=3
상술한 mux_sel2 식은 μROM (30), eROM (24), 래치 ROM (98), 및 일반 ROM (32) 의 출력중에서 선택하는데 이용된다. !use_urom 과 동일한 use_erom 은 IROM (98) 에 인가하기 위해 μROM (30) 과 eROM (24) 의 출력중에서 하나를 선택하는데 이용된다. mux_sel2 식으로부터 알수 있는 바와 같이, 일반 ROM (32) 가 선택된다면, irom (98) 은 바로 다음 사이클에서 이용된다. 따라서, μROM (30) 또는 eROM (24) 출력의 래치는 일반 마이크로명령이 이용된 후에 제 1 마이크로명령이 이용되는 것이 가능하다. 래치가 없다면, 다음 명령의 제 1 마이크로명령이 이용되고 디코더는 동조를 벗어난다.
도 11 에 따르면, ROM 엔트리 (40) 이 종래 디코더에서 발생되는 방법의 예가 일반 명령의 이점과는 완전히 다른 일반 명령을 사용한 본 발명의 디코더에서의 동일한 기능과 대조된다. 종래 디코더는 단순한 가산 명령네 대해서 2 개의 상이한 마이크로코드, 레지스터 오퍼랜드를 포함한 명령에 대해서는 하나의 마이크로코드, 및 메모리 오퍼랜드를 갖는 명령에 대해서는 하나의 마이크로코드를 요구한다.
본 발며의 디코드에서, 동일한 가산 명령이 메모리를 포함한다면, 새로운 디코더는 우선 로드를 하고 그후 가산을 한다. 디코더는 로드를 위해서 use_generic 신호로 일반 마이크로명령을 사용하도록 eROM 표 (24) 에 의해서 표시된다. 이 것은 일반 명령 사용중 하나의 예이고, 메모리 로드를 하고 그후 가산한다. 종래 마이크로프로세서로 실행된 가산과 새로운 머신으로 실행된 가산사이의 차이점은 오퍼랜드를 유지하기 위해 레지스터 1 및 레지스터 2 사용을 대신하여, 레지스터 1 및 레지스터 2/temp 가 ModR/M 표 (90) 으로부터 mem_access 신호에 의존하여 이용된다. 실질적으로 동일한 마이크로명령이다. 일반 마이크로명령을 가지고, 동일한 마이크로명령이 두 경우에 대해서 이용될 수 있다.
이상에서 설명한 바와 같이, 본 발명은 사이클당 명령 디코드되는 수를 더 증가시킬 수 있고, 향상이 탄력적인 모듈 방법으로, 즉, (병렬 또는 파이프라인 디코드 단계를 통해) 동시에 조작 가능한 명령의 수에대한 폭 또는 깊이를 추가함으로서, 디코드 단계의 실행을 향상시킬 수 있고, 병렬 처리를 통해 실행을 향상시키 위해 다수의 디코더가 첨부될 수 있는 시스템의 스케일링을 가능하게 하고, 최대 실행, 더빠른 디코더 및 더 효과적인 명령의 디코더를 위해 설정하는 명령내에서 모든 명령의 완료 동작을 미세하게 동조시킬 수 있고, 디코드 단계의 메모리 요구를 현저하게 증가시키지 않고 디코더의 실행을 향상시킬 수 있고, 디크드 단계의 복잡도를 현저하게 증가시키지 않고 시스템에 대한 부가적인 비용을 추가하지 않고 탄력적이고 향상된 방법으로 디코드의 실행을 향상시킬 수 있고, 레지스터 오퍼랜드 명령에 대해 유사한 동작을 하지 않는 메모리 오퍼랜드 명령의 디코드 실행을 최대화할 수 있다.

Claims (1)

  1. 디코드될 명령으로 채워지고 보충되는 프리페치 버퍼,
    상기 프리페치 버퍼로부터 명령 바이트를 추출하기 위해 상기 프리페치 버퍼에 접속된 연산코드 추출기,
    명령에 대해 마이크로코드 엔트리를 가지며, 상기 명령의 다수의 제 1 바이트 및 마이크로명령, 디코드되는 상기 명령에 관한 정보 비트, 및 상기 명령내에 ModR/M 바이트의 존재을 지시하는 다수의 출력 신호를 수신하기 위해 연산 추출기에 접속된 엔트리 ROM,
    상기 명령의 다수 제 1 바이트를 수신하기 위해 상기연산 코드에 접속되고 상기 명령에 관한 정보 비트 및 상기 명령내에 SIB 바이트의 존재를 지시하는 다수의 출력 신호를 갖는 modrm ROM,
    상기 명령의 다수의 제 1 바이트를 수신하기 위해 상기 연산 코드 추출기에 접속되고 상기 명령에 관한 정보를 지시하는 다수의 출력 신호를 갖는 sib ROM,
    출력을 가지며 입력 사이에 마리크로명령을 선택하기 위해 동작하는 엔트리 ROM 의 마이크로명령 출력에 접속된 입력을 가진 선택 논리 회로,
    상기 선택 논리 회로에 접속된 일반 ROM,
    상기 선택 논리 회로의 입력에 접속된 마이크로코드 ROM,
    상기 선택 논리 회로의 입력에 접속된 래치 레지스터,
    상기 선택 논리 회로의 입력에 접속된 ROM 엔트리 레지스터, 및
    상기 엔트리 ROM, modrm ROM 및 sib ROM 의 정보 비트 신호 출력에 접속된 상기 명령의 길이를 계산하는 크기 논리 회로로 이루어지는 것을 특징으로 하는 마이크로프로세서의 명령을 디코딩하는 디코더.
KR1019970044693A 1996-10-18 1997-08-30 =분할된 마이크로코드, 동적 일반 마이크로명령 및미리 디 코드된 명령 정보를 갖는 마이크로코드를 이용한마이크로프로세서를 위한 고속 스케일 마이크로코드계명령 디코더 KR100271503B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US2829196P 1996-10-18 1996-10-18
US60/028291 1996-10-18

Publications (2)

Publication Number Publication Date
KR19980032351A KR19980032351A (ko) 1998-07-25
KR100271503B1 true KR100271503B1 (ko) 2000-11-15

Family

ID=21842628

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970044693A KR100271503B1 (ko) 1996-10-18 1997-08-30 =분할된 마이크로코드, 동적 일반 마이크로명령 및미리 디 코드된 명령 정보를 갖는 마이크로코드를 이용한마이크로프로세서를 위한 고속 스케일 마이크로코드계명령 디코더

Country Status (2)

Country Link
KR (1) KR100271503B1 (ko)
DE (1) DE19737658C2 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6385496B1 (en) * 1999-03-12 2002-05-07 Fisher-Rosemount Systems, Inc. Indirect referencing in process control routines
KR20030083978A (ko) * 2002-04-24 2003-11-01 삼성전자주식회사 마이크로코드 관리 장치 및 그 방법
EP3627764B1 (en) * 2012-03-30 2021-07-28 Intel Corporation Method and apparatus to process sha-2 secure hashing algorithm

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630082A (en) * 1993-10-29 1997-05-13 Advanced Micro Devices, Inc. Apparatus and method for instruction queue scanning

Also Published As

Publication number Publication date
DE19737658A1 (de) 1998-07-23
DE19737658C2 (de) 1999-10-14
KR19980032351A (ko) 1998-07-25

Similar Documents

Publication Publication Date Title
KR100513358B1 (ko) Risc형명령세트및슈퍼스칼라마이크로프로세서
EP2018609B1 (en) Pre-decoding variable length instructions
US8447958B2 (en) Substituting portion of template instruction parameter with selected virtual instruction parameter
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US7051189B2 (en) Method and apparatus for processor code optimization using code compression
US6275927B2 (en) Compressing variable-length instruction prefix bytes
US8793470B2 (en) Length determination of instruction code with address form field and escape opcode value by evaluating portions other than instruction specific opcode
US6105125A (en) High speed, scalable microcode based instruction decoder for processors using split microROM access, dynamic generic microinstructions, and microcode with predecoded instruction information
US7865699B2 (en) Method and apparatus to extend the number of instruction bits in processors with fixed length instructions, in a manner compatible with existing code
WO2009137108A1 (en) Microprocessor with compact instruction set architecture
US5918031A (en) Computer utilizing special micro-operations for encoding of multiple variant code flows
KR100971626B1 (ko) 다수의 명령어 세트를 갖는 데이터 처리 장치 내에서의명령어 부호화
US6460116B1 (en) Using separate caches for variable and generated fixed-length instructions
US20220308763A1 (en) Method and apparatus for a dictionary compression accelerator
KR100308512B1 (ko) 편집 기능을 위한 전문 밀리코드 지시
KR100317769B1 (ko) 압축 기억된 십진수 나눗셈에 대한 전문 밀리코드 명령
KR100322726B1 (ko) 번역 및 테스트를 위한 전문 밀리코드 명령
KR20010040298A (ko) 다중 데이터형 결과를 발생하는 컴퓨터 명령
KR100271503B1 (ko) =분할된 마이크로코드, 동적 일반 마이크로명령 및미리 디 코드된 명령 정보를 갖는 마이크로코드를 이용한마이크로프로세서를 위한 고속 스케일 마이크로코드계명령 디코더
US6253309B1 (en) Forcing regularity into a CISC instruction set by padding instructions
KR100322725B1 (ko) 전문 갱신 및 분기 명령을 이용하는 밀리코드 플래그
WO2022074355A1 (en) Masked-vector-comparison instruction
US20040128479A1 (en) Method and apparatus for variable length instruction parallel decoding
EP0853782B1 (en) Instruction decoder including emulation using indirect specifiers
WO2023170373A1 (en) Sub-vector-supporting instruction for scalable vector instruction set architecture

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120727

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20130729

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20140730

Year of fee payment: 15

FPAY Annual fee payment

Payment date: 20150630

Year of fee payment: 16

LAPS Lapse due to unpaid annual fee