Số lượng opcodes tối đa cho bộ vi xử lý


13

nhập mô tả hình ảnh ở đây

Số opcodes tối đa cho câu hỏi là bao nhiêu, câu trả lời là tùy chọn c, nhưng tôi nghĩ đó là tùy chọn d, bởi vì, mỗi địa chỉ chỉ định mỗi vị trí bộ nhớ, có 16 dòng địa chỉ, nghĩa là 2 ^ 16 địa chỉ tức là 2 ^ 16 vị trí bộ nhớ.

Vì vậy, nếu mỗi vị trí chứa một opcode, tổng số 2 ^ 16 vị trí chứa 2 ^ 16 opcode và đó là số lượng opcode tối đa, nhưng câu trả lời được đưa ra là c, là 2 ^ 12. Sao có thể như thế được?


7
Câu hỏi đặt ra là có bao nhiêu opcode KHÁC trong ISA, chứ không phải có bao nhiêu lệnh có thể tạo nên chương trình lớn nhất có thể.
Brian Drumond

5
@BrianDrummond - tuy nhiên, với cách giải thích đó, tuy nhiên, câu hỏi chỉ có ý nghĩa nếu bạn đưa ra các giả định về cách thức hoạt động của ISA không phổ biến. Ví dụ, Z80 có bus dữ liệu 8 bit, nhưng ở đâu đó trong vùng 800 mã opc hợp lệ khác nhau - bởi vì nó sử dụng byte tiền tố để mở rộng và thay đổi các hoạt động có sẵn.
Jules

15
Câu hỏi như phrased trong cuốn sách không có ý nghĩa. Không có sự tương ứng trực tiếp vốn có giữa kích thước bus và kích thước opcode. JVM dựa trên mô hình dữ liệu 32 bit nhưng có opcodes 8 bit.
chrylis -on đình công-

10
Câu hỏi này không mạch lạc trừ khi chúng ta có nhiều thông tin ngoài những gì được đưa ra trong câu hỏi. Chúng ta phải đưa ra rất nhiều giả định về các đặc điểm của quy trình để có câu trả lời - các giả định không đúng với đại đa số các bộ xử lý trong thế giới thực!
David Schwartz

14
Câu hỏi thật nhảm nhí. Nếu cần thiết, một mã lệnh có thể mở rộng nhiều từ bộ nhớ. Không có giới hạn vốn có.
Licks nóng

Câu trả lời:


31

Tất cả các lựa chọn đều sai . Số lượng opcodes (duy nhất) tối đa mà bộ xử lý có thể thực thi không bị giới hạn bởi độ rộng của bus.


Thông thường, CPU 12+ bit được thiết kế để có một lệnh cho mỗi từ dữ liệu để nó có thể đọc hầu hết các hướng dẫn trong một lần. Vì vậy, một CPU bình thường được thiết kế đến giới hạn 2 ^ 12 opcodes.

Các kiến ​​trúc CPU hiện có có hơn 2 ^ 12 = 4096 opcodes là rất hiếm chỉ đơn giản vì người ta hầu như không cần nhiều - quá nhiều để tìm hiểu, quá nhiều để thực sự hữu ích, quá nhiều lãng phí không gian silicon tốn kém.

Cập nhật : Như đã được chỉ ra trong các nhận xét, tất cả các biến thể có thể có của tập lệnh x86 thực sự có thể thêm tới hơn 6000 tùy thuộc vào cách bạn đếm! Đây là nhiều hơn một ngoại lệ mặc dù.

Tuy nhiên, đối với CPU 4 bit 2 ^ 4 = 16 hướng dẫn thường không đủ, vì vậy rất nhiều bộ xử lý như vậy có nhiều hơn.

Có thể có nhiều cách và lý do CPU có thể kết hợp nhiều opcode hơn những gì phù hợp với bus dữ liệu, bao gồm:

Hướng dẫn kéo dài

Một bộ xử lý không cần phải đọc lệnh trong một chu kỳ dữ liệu - nó có thể sử dụng nhiều chu kỳ hệ quả. Trong thực tế, hầu hết các CPU không - mặc dù nó thường được sử dụng cho các đối số lệnh hơn là để mở rộng không gian opcode.

Ví dụ: intel 4004 chỉ có 4 dòng được ghép thành dòng dữ liệu / địa chỉ, từ dữ liệu 4 bit, nhưng hơn 40 opcode trong hướng dẫn 8 bit.

Tiền tố và hậu tố

Bộ xử lý (CISC) có thể có nhiều tiền tố và hậu tố hướng dẫn khi cần.

Những cái đó được bắt đầu bằng một hướng dẫn thực tế để thay đổi những gì nó làm - một chút hoặc hoàn toàn.

Nó phụ thuộc vào định nghĩa của bạn về "opcode duy nhất". Nếu một người giả định bất kỳ phần nào của một lệnh không phải là dữ liệu là một phần của opcode, thì tổng số của họ sẽ bao gồm tất cả các biến thể có thể có. Tuy nhiên, một số người tin rằng những phụ kiện đó là những phần riêng biệt của hướng dẫn.

Ví dụ: CPU Intel x86 không thực sự có opc 4M. Tuy nhiên, nếu bạn tính tất cả các tiền tố là một phần của opcode, CPU hiện đại cho phép hướng dẫn miễn là 15 bYte - đó là RẤT NHIỀU opcode có thể. Mặc dù nhiều người sẽ chỉ làm điều tương tự - vì vậy điều này phụ thuộc vào định nghĩa của họ là "duy nhất".

Chế độ

Một bộ xử lý có thể có nhiều chế độ hoạt động trong đó nó có thể có một bộ opcodes hoàn toàn khác nhau.

Ví dụ: intel x86_64 có các chế độ 32 bit (thực / v86 / được bảo vệ) và 64 bit có các opcodes khác nhau. CPU ARM có thể có chế độ ARM 32 bit và ngón tay cái 16 bit.

Ghép kênh bit

Các câu hỏi nêu "đường dữ liệu" và "đường địa chỉ", tuy nhiên cả bus dữ liệu nội bộ và bus địa chỉ nội bộ có thể rộng hơn lượng đường bus thực tế.

Dữ liệu bus đa kênh được gửi tuần tự, tức là nửa đầu, rồi nửa sau. CPU lưu trữ nó vào các thanh ghi bên trong có kích thước đầy đủ và hoạt động trên các thanh ghi đó.

Điều này thường được thực hiện để giảm chi phí và / hoặc kích thước dấu chân vật lý của chip.

Ví dụ bao gồm intel 4004, bất cứ thứ gì trên bus dữ liệu LPC và NEC VR4300, CPU của Nintendo64 chỉ có bus dữ liệu 32 dòng.

Không có xe buýt song song

Như một sự tiếp nối của điểm trước đó, CPU thậm chí không cần phải phơi bày một bus song song nào cả.

Một CPU có thể dễ dàng chỉ lộ ra một bus tuần tự như I2C, SPI, v.v.

Có thể không hiệu quả về mặt chi phí khi sản xuất một CPU chuyên dụng như vậy, nhưng rất nhiều bộ vi điều khiển có số lượng pin thấp (bao gồm cả CPU và bộ nhớ) được tạo ra theo cách đó để tiết kiệm các chân quý giá đó cho những thứ hữu ích hơn. Ví dụ, chip atmel ATTINY4 / 5/6/10 chỉ có tổng cộng 6 chân, hai cho nguồn, một để đặt lại, ba mục đích chung. Các hướng dẫn được gửi qua giao diện 3 dòng độc quyền tuần tự.

Tùy thuộc vào định nghĩa của bạn về vi điều khiển, nó có thể được coi là bộ vi xử lý hoặc có thể được lập trình để hoạt động (ví dụ mô phỏng CPU chuyên dụng với bus hoặc bus tuần tự).

Câu hỏi này nêu rõ rằng một số loại bus dữ liệu IS bị lộ, nhưng không phải là bus song song. Về lý thuyết 12 dòng dữ liệu xe buýt có thể bao gồm một dữ liệu nối tiếp đơn dòng và 11 auxilary / đất / tình trạng dòng , mặc dù điều đó có lẽ sẽ không phải là một ý tưởng rất lành mạnh.

Xe buýt chuyên dụng

Trên thực tế, một bộ xử lý thậm chí không cần chấp nhận các hướng dẫn trên cùng các tuyến xe buýt giống như dữ liệu.

Điều này có thể dễ dàng xảy ra khi ALU là các chip rời rạc hơn là một phần của bộ vi xử lý nhưng hiện tại hầu như không có hiệu quả kinh tế.

Nhưng không có gì ngăn cản bạn thực hiện CPU với các dòng chuyên dụng chỉ để được hướng dẫn. Một CPU như vậy có thể hữu ích khi một hoạt động đơn lẻ phải được thực hiện trên một mảng dữ liệu (SIMD).

Vì chiều rộng bus lệnh hoàn toàn tùy ý, nên số opcode tối đa có thể có.


4
Là một điểm đáng quan tâm, x86-64 có từ 1000 đến 6000 opcodes, tùy thuộc vào người bạn hỏi ( 1 , 2 , 3 ).
LMS

Không bao giờ cố gắng thậm chí đếm chúng, nhưng với tất cả các biến thể, nó có ý nghĩa.
Jack White

13

Số lượng opcodes tối đa thực sự có thể được nghĩ theo một vài cách:

  • Số lượng tối đa có thể của opcodes duy nhất.

Điều này có thể được thu thập từ chiều rộng hướng dẫn và không phải chiều rộng bus dữ liệu. Thông thường một opcode sẽ phù hợp với một truy cập bộ nhớ duy nhất, và sau đó câu trả lời là 2 ^ 12. Nhưng một bộ xử lý có thể thực hiện quy trình giải mã opcode nhiều chu kỳ để mở rộng số lượng opcode có thể vượt quá 2 ^ 12.

  • Số lượng hướng dẫn tối đa (chứa opcodes) mà bộ xử lý có thể trực tiếp giải quyết.

Số lượng hướng dẫn tối đa (chứa opcodes) mà bộ xử lý có thể xử lý trực tiếp bị giới hạn bởi độ rộng bus địa chỉ (2 ^ 16). Tuy nhiên, bộ xử lý gián tiếp có thể xử lý nhiều bộ nhớ hơn, ví dụ như một opcode có thể tạo điều kiện cho việc hoán đổi trang hoặc một hoạt động tương tự để tìm nạp các hướng dẫn từ một nguồn khác.


2
Câu hỏi không phải là mơ hồ. Nếu nó được coi là điểm thứ hai của bạn, thì nó sẽ được coi là "số lượng hướng dẫn tối đa có thể được lưu trữ / địa chỉ / ...". Từ "opcode" làm cho nó khá rõ ràng là về tập lệnh, không phải về phạm vi địa chỉ.
mờ mất niềm tin vào SE

11
+1 để đề cập rằng mã op nhiều từ là hoàn toàn có thể, vì vậy câu hỏi không phải là một câu hỏi hay.
Spehro Pefhany

2
Những người nói tiếng Anh bản địa thường có thành kiến ​​khiến họ khó có thể hiểu được ý nghĩa trần trụi của những từ họ sử dụng. Khi người nói tiếng Anh quốc tế đọc hoặc nghe nó, họ có thể không có nghĩa thứ hai (dự định). Điều tương tự cũng áp dụng khi học sinh học một biểu thức mới - nếu các công thức không rõ ràng thì rất dễ hiểu sai. Vì vậy, tôi đoán rằng sinh viên đã học được rằng mỗi hướng dẫn có chứa một phần opcode bên trong nó. Vâng, tôi sẽ nói đó là sự thật. Thực sự, từ ngữ của câu hỏi 01. là mơ hồ.
HKOB

4
@SpehroPefhany Yep, câu hỏi chắc chắn là mơ hồ mà không có thêm bối cảnh. Nếu OP được dạy rằng, bất kể độ dài lệnh, opcode sẽ được tìm nạp trong lần truy cập bộ nhớ đầu tiên, thì câu trả lời là (c), nếu không, nó không thể trả lời được. Vấn đề là, OP đã đưa ra đủ bối cảnh trong câu hỏi EE.SE của anh ta hay giáo viên của anh ta đã đưa ra một cái gì đó cho phép và đặt ra một câu hỏi mơ hồ?
Lorenzo Donati hỗ trợ Monica

1
@SpehroPefhany Đúng :) Nhưng tiếng Anh - có lẽ gây khó chịu nhẹ - cũng là một phần của thế giới tiếng Anh quốc tế ( bbc.com/capital/story/, )
HKOB

4

Bạn có quyền bị nhầm lẫn bởi câu hỏi này - nó được viết rất tệ.

Tuy nhiên, tôi nghi ngờ rằng mục đích của câu hỏi này là xác định kích thước từ chỉ dẫn cho máy. Với dữ liệu rất không đầy đủ được cung cấp, điều này phải tương ứng với chiều rộng của bus dữ liệu ; chiều rộng của bus địa chỉ xác định kích thước tối đa của bộ nhớ chính.

Trong thực tế, trường "opcode" của các lệnh của một máy cụ thể thường nhỏ hơn đáng kể so với chính lệnh, tuy nhiên lệnh có thể rộng hơn bus dữ liệu.

Motorola 68008 cũ là một trường hợp điển hình - đó là phiên bản 68000 giảm chi phí với bus dữ liệu 8 bit, nhưng nó sử dụng cùng một từ hướng dẫn 16 bit, trong đó thông thường là 7 bit xác định opcode (phần còn lại xác định các thanh ghi nguồn và đích và chế độ địa chỉ, tất cả đều được coi là toán hạng , không phải opcode ). Nếu bạn bao gồm các bit chế độ địa chỉ trong opcode, như một số người làm, điều đó tạo ra tổng số trường opcode 10 bit. Các hướng dẫn thực tế có thể dài hơn đáng kể trong một số chế độ địa chỉ.


"Phần còn lại xác định các thanh ghi nguồn và đích và chế độ địa chỉ, tất cả đều được coi là toán hạng, không phải mã opcode" ... tốt, đó là một vấn đề quan điểm. Đối với kiến ​​trúc RISC, điều đó rõ ràng đúng, nhưng trong nhiều trường hợp, kiến ​​trúc CISC được định nghĩa theo cách đặc biệt đến mức có thể coi mỗi kết hợp là một opcode riêng biệt. Z80 là một trường hợp điển hình - trong khi nhiều hướng dẫn của nó có một hoặc hai lựa chọn đăng ký được mã hóa trong các bit của opcode, các chế độ địa chỉ hoàn toàn đặc biệt và tiền tố thay đổi cách hiểu của ...
Jules

... cả hai chế độ địa chỉ và đăng ký trong nhiều trường hợp, điều này làm cho việc giải thích các thanh ghi từ các bitfield ít hơn một chút so với đơn giản. Do đó, hầu hết các tài liệu và trình biên dịch dường như hoạt động dựa trên sự hiểu biết, do đó, mỗi sự kết hợp của các lệnh và thanh ghi là một mã riêng biệt và chỉ các giá trị ngay lập tức và giá trị bù địa chỉ gián tiếp mới thực sự là toán hạng. Chế độ xem thế giới này được chia sẻ bởi người tiền nhiệm của nó, intel 8080, trong đó định dạng ngôn ngữ lắp ráp tiêu chuẩn có các thanh ghi được vận hành bởi một lệnh được mã hóa như một phần của ghi nhớ, không được đưa ra làm đối số.
Jules

Đúng - Z80 là điển hình của CPU được mã hóa 8 bit theo cách đó. 6502 có ánh xạ opcode logic hơn cho phép mạch giải mã được tối ưu hóa. Nhưng tôi đã nói cụ thể về 68K, trong đó có các trường chế độ địa chỉ và thanh ghi đích rất khác biệt trong hướng dẫn của nó. Sau khi trừ đi, trường opcode vẫn có thể rộng hơn bus dữ liệu của 68008.
Chromatix

1

Edson DeCastro đã thiết kế một máy tính gần như chính xác như vậy, PDP-8, với 15 địa chỉ và 12 dòng dữ liệu.

Vì vậy, câu trả lời cho câu hỏi được đăng là 574 mã op, bởi vì PDP-8 có 284 mã op và Ed chỉ là một nửa điên rồ.


2
Không chắc chắn tại sao downvote - đây là một câu trả lời tốt như bất kỳ, cho rằng câu hỏi về cơ bản là vô nghĩa. :)
Jules

Tôi nghi ngờ downvote là vì 284 * 2 = 568 chứ không phải 574.
Đánh dấu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.