마이크로 프로세서의 최대 opcode 수


13

여기에 이미지 설명을 입력하십시오

질문에 대한 최대 opcode 수는 얼마이며, 대답은 c 옵션이지만 각 주소는 각 메모리 위치를 지정하고 16 개의 주소 줄이 있으므로 2 ^ 16 주소 즉 2 ^ 16 개의 메모리 위치.

따라서 각 위치에 하나의 opcode가 포함 된 경우 총 2 ^ 16 개의 위치에 2 ^ 16 개의 opcode가 포함되며 최대 opcode 수이지만 대답은 c (2 ^ 12)입니다. 이것이 어떻게 가능한지?


7
문제는 가능한 가장 큰 프로그램을 구성 할 수있는 명령 수가 아니라 ISA에 몇 개의 다른 opcode가 있는지 묻는 것입니다.
브라이언 드럼 몬드

5
@BrianDrummond-그러나 이러한 해석으로 인해 보편적이지 않은 ISA의 작동 방식에 대한 가정을하는 경우에만 의문이 있습니다. 예를 들어, Z80에는 8 비트 데이터 버스가 있지만 800 개의 다른 유효한 opcode가있을 수 있습니다. 접두사 바이트를 사용하여 사용 가능한 작업을 확장하고 변경하기 때문입니다.
Jules

15
이 책에 나오는 질문은 의미가 없습니다. 버스 크기와 opcode 크기 사이에는 고유 한 직접 통신이 없습니다. JVM은 32 비트 데이터 모델을 기반으로하지만 8 비트 opcode가 있습니다.
chrylis

10
질문에 제공된 것 이상의 많은 정보가 없다면이 질문은 일관성이 없습니다. 우리는 프로세스의 특성에 대해 많은 가정을 세워야합니다. 대부분의 실제 프로세서에는 해당되지 않는 가정입니다!
David Schwartz

14
문제는 헛소리입니다. 필요한 경우 명령 opcode는 여러 메모리 단어에 걸쳐있을 수 있습니다. 고유 한 제한이 없습니다.
핫 릭

답변:


31

모든 옵션이 잘못되었습니다 . 프로세서가 실행할 수있는 최대 (고유 한) opcode 수는 버스 너비에 의해 제한되지 않습니다.


일반적으로 12+ 비트 CPU는 대부분의 명령어를 한 번에 읽을 수 있도록 데이터 워드 당 하나의 명령을 갖도록 설계되었습니다. 따라서 일반 CPU는 2 ^ 12 opcode의 한계로 엔지니어링됩니다.

2 ^ 12 = 4096 개가 넘는 opcode를 가진 기존 CPU 아키텍처는 배우기가 너무 많고, 실제로는 유용하고, 너무 많은 비용이 소요되는 실리콘 공간을 너무 많이 필요로하지 않기 때문에 매우 드 rare니다.

업데이트 : 의견에서 지적했듯이 x86 명령어 세트의 모든 가능한 변형은 실제로 계산 방법에 따라 6000 개가 넘을 수 있습니다! 그러나 이것은 예외입니다.

그러나 4 비트 CPU의 경우 2 ^ 4 = 16 명령어로는 종종 충분하지 않으므로 이러한 프로세서는 더 많습니다.

CPU가 다음을 포함하여 데이터 버스에 적합한 것보다 더 많은 opcode를 통합 할 수있는 여러 가지 방법과 이유가있을 수 있습니다.

단어 스패닝 지침

프로세서는 단일 데이터주기에서 명령을 읽을 필요가 없습니다. 여러 개의 순차적주기를 사용할 수 있습니다. 실제로 대부분의 CPU는 그렇지 않습니다-비록 opcode 공간을 확장하기보다는 명령 인수에 더 일반적으로 사용됩니다.

예 : 인텔 4004에는 데이터 / 주소 라인, 4 비트 데이터 워드, 8 비트 명령어에서 40 개가 넘는 opcode로 멀티플렉싱 된 4 개의 라인 만 있습니다.

접두사 및 접미사

(CISC) 프로세서는 필요한만큼 많은 명령 접두사와 접미사를 가질 수 있습니다.

이것들은 실제 명령 앞에 접두사를 붙여서 조금씩 또는 완전히 변경합니다.

"고유 opcode"의 정의에 따라 다릅니다. 데이터가 아닌 명령어의 일부가 opcode의 일부라고 가정하면 총 수에는 가능한 모든 변형이 포함됩니다. 그러나 어떤 사람들은 그러한 접사가 교육의 별개의 부분이라고 생각합니다.

예 : Intel x86 CPU에는 실제로 4M opcode가 없습니다. 그러나 모든 접두사를 opcode의 일부로 계산하면 최신 CPU는 15bY만큼 긴 명령을 허용합니다. 이는 가능한 많은 opcode입니다. 많은 사람들이 똑같은 일을 할 것이지만 이것은 "고유 한"이라는 정의에 달려 있습니다.

모드

프로세서는 완전히 다른 연산 코드 세트를 가질 수있는 다중 동작 모드를 가질 수있다.

예 : 인텔 x86_64에는 32 비트 (real / v86 / protected) 및 64 비트 모드가 있으며 고유 한 opcode가 있습니다. ARM CPU는 ARM 32 비트 및 Thumb 16 비트 모드를 가질 수 있습니다.

버스 비트 멀티플렉싱

질문에는 "데이터 라인"과 "주소 라인"이 표시되지만 내부 데이터 버스와 내부 주소 버스는 실제 버스 라인의 양보다 더 클 수 있습니다.

멀티플렉싱 된 버스 데이터는 순차적으로, 즉 전반과 후반에 전송된다. CPU는이를 전체 크기의 내부 레지스터에 저장하고 해당 레지스터에서 작동합니다.

이것은 종종 비용 및 / 또는 칩 물리적 풋 프린트 크기를 줄이기 위해 수행됩니다.

예로는 인텔 4004 (LPC 데이터 버스에있는 모든 것)와 32 라인 데이터 버스 만있는 Nintendo64의 CPU 인 NEC VR4300이 있습니다.

병렬 버스 없음

이전 지점의 연속으로 CPU는 병렬 버스를 전혀 노출 할 필요조차 없습니다.

CPU는 I2C, SPI 등과 같은 순차 버스 만 쉽게 노출 할 수 있습니다.

이러한 전용 CPU를 생산하는 것은 비용 효율적이지는 않지만 CPU와 메모리를 포함하여 많은 핀 수가 적은 마이크로 컨트롤러가 유용한 핀을 절약 할 수 있도록 만들어졌습니다. 예를 들어, atmel ATTINY4 / 5 / 6 / 10 칩에는 총 6 개의 핀, 2 개의 전원, 1 개의 재설정, 3 개의 범용이 있습니다. 명령은 독점적 인 3 라인 인터페이스를 통해 순차적으로 전송됩니다.

마이크로 컨트롤러의 정의에 따라 마이크로 프로세서로 간주되거나 하나를 작동하도록 프로그래밍 할 수 있습니다 (예 : 순차 버스 또는 버스로 전용 CPU를 시뮬레이션).

이 질문은 어떤 종류의 데이터 버스가 노출되었지만 병렬 버스가 아니라는 것을 분명히 나타냅니다 . 이론적으로 12- 라인 데이터 버스 는 하나의 직렬 데이터 라인 과 11 개의 보조 / 접지 / 상태 라인으로 구성 될 수 있지만, 이는 제정신이 아닌 아이디어 일 것입니다.

전용 교육 버스

실제로 프로세서는 데이터와 동일한 버스 라인에서 명령을 받아 들일 필요조차 없습니다.

이것은 ALU가 마이크로 프로세서의 일부가 아닌 개별 칩 이었지만 현재 대부분의 경우 경제적으로 실행 가능하지 않은 경우에 해당됩니다.

그러나 지침을 위해 전용 회선이있는 CPU를 구현하는 것을 막을 수있는 것은 없습니다. 이러한 CPU는 SIMD (데이터 배열)에서 단일 작업을 수행해야 할 때 유용 할 수 있습니다.

명령 버스 너비는 완전히 임의적이므로 가능한 최대 opcode 수입니다.


4
관심의 대상으로, x86-64에는 요청한 사람 ( 1 , 2 , 3 )에 따라 1000에서 6000 사이의 opcode가 있습니다 .
LMS

절대로 세어 보려고 시도하지 않았지만 모든 변형이 의미가 있습니다.
잭 화이트

13

최대 opcode 수는 실제로 몇 가지 방법으로 생각할 수 있습니다.

  • 가능한 최대 고유 opcode 수입니다.

이것은 데이터 버스 너비가 아닌 명령어 너비에서 수집 할 수 있습니다. 일반적으로 opcode는 단일 메모리 액세스에 적합하며 2 ^ 12입니다. 그러나 프로세서는 다중 사이클 opcode 디코딩 프로세스를 구현하여 가능한 opcode 수를 2 ^ 12 이상으로 확장 할 수 있습니다.

  • 프로세서가 직접 처리 할 수있는 최대 명령 수 (opcode 포함)입니다.

프로세서가 직접 처리 할 수있는 최대 명령어 수 (opcode 포함)는 주소 버스 너비 (2 ^ 16)에 의해 제한됩니다. 그러나 간접적으로 프로세서는 더 많은 메모리를 처리 할 수 ​​있습니다. 예를 들어 opcode는 다른 소스에서 명령어를 가져 오기 위해 페이지 스왑 또는 유사한 작업을 용이하게 할 수 있습니다.


2
문제는 그렇게 모호하지 않습니다. 두 번째 포인트로 해석되어야한다면 " 저장 / 주소 지정 / ... 가능한 최대 명령어 수"로 공식화되었을 것 입니다. "opcode"라는 단어는 어 드레서 블 범위가 아니라 명령어 세트에 관한 것임을 명확히합니다.
SE에 대한 희미한 믿음 상실

11
다중 단어 op 코드가 가능하다는 언급에 +1하므로 질문은 그리 좋지 않습니다.
Spehro Pefhany

2
영어를 모국어로 사용하는 사람들은 종종 사용하는 단어의 의미를 이해하기 어려운 편견을 가지고 있습니다. 국제 영어 사용자가 읽거나들을 때 두 번째 (의도 된) 의미를 얻지 못할 수 있습니다. 학생이 새로운 표현을 배울 때도 마찬가지입니다. 공식이 모호한 경우 오해하기 쉽습니다. 그래서 나는 학생이 각 명령에 그 안에 opcode 부분이 포함되어 있음을 알게되었다고 생각합니다. 그렇습니다, 나는 그것이 사실이라고 말할 것입니다. 실제로, 질문 01의 문구는 모호합니다.
HKOB

4
@SpehroPefhany 그렇습니다.이 질문은 더 이상의 맥락이 없다면 모호합니다. OP가 명령 길이에 관계없이 opcode가 첫 번째 메모리 액세스에서 페치됨을 알면 응답은 (c)이고 그렇지 않으면 응답 할 수 없습니다. 요점은, 인 영업 이익은 충분한 상황을 주셨 는가 그의 EE.SE 질문, 또는 자신의 교사 (들)을주고 뭔가 부여 모호한 질문을 공식화 했습니까?
Lorenzo Donati-Codidact.org

1
@SpehroPefhany True :) 그러나 영어-아마도 약간의 성가심-아마도 영어 영어 또한 국제 영어 세계의 일부입니다 ( bbc.com/capital/story/… )
HKOB

4

당신은이 질문에 혼란 스러울 수 있습니다-그것은 매우 심하게 쓰여졌습니다.

그러나이 질문 의 의도 는 기계의 명령 단어 크기를 결정하는 것입니다. 제공된 데이터가 매우 불완전한 경우 데이터 버스 의 너비와 일치해야합니다 . 주소 버스 의 너비 는 주 메모리의 최대 크기를 결정합니다.

실제로, 주어진 기계 명령어의 "opcode"필드는 종종 명령어 자체보다 상당히 작지만, 명령어는 데이터 버스보다 넓을 수 있습니다.

모토로라 68008은 8 비트 데이터 버스를 갖춘 68000의 비용을 절감 한 버전이지만 일반적으로 7 비트가 opcode (나머지 코드)를 결정하는 동일한 16 비트 명령어를 사용했습니다. 소스 및 대상 레지스터와 주소 지정 모드를 식별합니다 (모두 opcode가 아닌 피연산자 로 간주되어야 함 ). 일부와 마찬가지로 opcode에 주소 지정 모드 비트를 포함 시키면 총 10 비트 opcode 필드가 만들어집니다. 일부 주소 지정 모드에서는 실제 명령어가 상당히 길어질 수 있습니다.


"나머지는 소스 및 대상 레지스터와 주소 지정 모드를 식별합니다.이 모드는 모두 opcode가 아닌 피연산자로 간주되어야합니다." RISC 아키텍처의 경우에는 분명히 사실이지만 많은 경우 CISC 아키텍처는 각 조합을 별도의 opcode로 계산하는 것이 합리적 일 수있는 임시 방식으로 정의됩니다. Z80은 그 예이다-많은 명령어들은 opcode의 비트로 인코딩 된 하나 또는 두 개의 레지스터 선택을 가지고 있지만, 어드레싱 모드는 전적으로 ad-hoc이고 접두사는 해석을 변경한다.
Jules

... 어드레싱 모드와 많은 경우에 레지스터 모두 비트 필드에서 레지스터를 해석하는 것이 약간 간단합니다. 대부분의 설명서와 어셈블러는 이해에 도움이되는 것으로 보이므로 명령과 레지스터의 각 조합은 별도의 opcode이며 즉시 값과 간접 주소 오프셋 값만 피연산자입니다. 이 세계관은 이전의 인텔 8080과 공유되는데, 표준 어셈블리 언어 형식은 인수로 제공되지 않고 니모닉의 일부로 인코딩 된 명령에 의해 작동되는 레지스터를 가지고있었습니다.
Jules

사실-Z80은 일반적인 8 비트 마이크로 코드 CPU입니다. 6502에는 더 논리적 인 opcode 매핑이있어 디코딩 회로를 최적화 할 수있었습니다. 그러나 특히 68K에 대해 이야기하고 있는데, 명령에 매우 독특한 주소 지정 모드와 대상 레지스터 필드가 있습니다. 이들을 빼면 opcode 필드는 여전히 68008의 데이터 버스보다 넓을 수 있습니다.
Chromatix

1

Edson DeCastro는 15 개의 주소와 12 개의 데이터 라인을 가진 PDP-8과 거의 같은 컴퓨터를 설계했습니다.

따라서 PDP-8에는 284 개의 op 코드가 있고 Ed는 절반에 불과하기 때문에 게시 된 질문에 대한 답변은 574 개의 op 코드입니다.


2
다운 보트가 왜 그런지 확실하지 않습니다. 질문이 본질적으로 무의미하다는 점을 감안할 때 이는 어느 것보다 좋은 대답입니다. :)
Jules

다운 보트가 574가 아니라 284 * 2 = 568이기 때문이라고 생각합니다.
Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.