จำนวนสูงสุดของ opcode สำหรับไมโครโปรเซสเซอร์


13

ป้อนคำอธิบายรูปภาพที่นี่

จำนวนสูงสุดของ opcode สำหรับคำถามคืออะไรคำตอบคือตัวเลือก c แต่ฉันคิดว่ามันเป็นตัวเลือก d เนื่องจากแต่ละที่อยู่ระบุตำแหน่งหน่วยความจำแต่ละแห่งมี 16 บรรทัดที่อยู่ซึ่งหมายถึงที่อยู่ 2 ^ 16 นั่นคือ 2 ^ ตำแหน่งหน่วยความจำ 16 แห่ง

ดังนั้นหากแต่ละสถานที่มีหนึ่ง opcode ทั้งหมด 2 ^ 16 สถานที่มี 2 ^ 16 opcodes และมันเป็นจำนวนสูงสุดของ opcodes แต่คำตอบที่ได้รับเป็น c ซึ่งก็คือ 2 ^ 12 เป็นไปได้อย่างไร?


7
คำถามคือถามว่ามีกี่ opcode ที่แตกต่างกันใน ISA ไม่ใช่จำนวนคำสั่งที่สามารถสร้างโปรแกรมที่ใหญ่ที่สุดที่เป็นไปได้
Brian Drummond

5
@BrianDrummond - ด้วยการตีความนั้นมีคำถามที่มีความหมายเฉพาะถ้าคุณทำสมมติฐานเกี่ยวกับวิธีการทำงานของ ISA ที่ไม่เป็นสากล เช่น Z80 มีบัสข้อมูล 8 บิต แต่อยู่ที่ไหนสักแห่งในภูมิภาคที่มี opcodes ที่ถูกต้องแตกต่างกัน 800 อัน - เพราะมันใช้คำนำหน้าไบต์เพื่อขยายและเปลี่ยนแปลงการดำเนินการที่มีอยู่
จูลส์

15
คำถามที่ใช้เป็นวลีในหนังสือไม่สมเหตุสมผล ไม่มีการโต้ตอบโดยตรงโดยธรรมชาติระหว่างขนาดบัสและขนาด opcode JVM ขึ้นอยู่กับรุ่นของข้อมูล 32 บิต แต่มี opcodes 8 บิต
chrylis -on strike-

10
คำถามนี้ไม่ต่อเนื่องเว้นแต่เราจะมีข้อมูลจำนวนมากนอกเหนือจากที่ระบุไว้ในคำถาม เราต้องทำข้อสันนิษฐานมากมายเกี่ยวกับลักษณะของกระบวนการเพื่อให้ได้คำตอบ - ข้อสันนิษฐานที่ไม่เป็นจริงสำหรับผู้ประมวลผลส่วนใหญ่ในโลกแห่งความเป็นจริง!
David Schwartz

14
คำถามคือพล่าม หากจำเป็น opcode คำสั่งสามารถขยายคำหน่วยความจำหลายคำ ไม่มีขีด จำกัด โดยธรรมชาติ
Hot Licks

คำตอบ:


31

ตัวเลือกทั้งหมดที่ไม่ถูกต้อง จำนวนสูงสุด (ไม่ซ้ำกัน) opcodes ที่โปรเซสเซอร์สามารถเรียกใช้งานได้ไม่ จำกัด ด้วยความกว้างของบัส


โดยปกติแล้วซีพียู 12+ บิตจะได้รับการออกแบบให้มีหนึ่งคำสั่งต่อข้อมูลคำหนึ่งเพื่อให้สามารถอ่านคำแนะนำได้ในครั้งเดียว ดังนั้นซีพียูปกติจะถูกออกแบบให้มีขีด จำกัด ของ 2 ^ 12 opcodes

สถาปัตยกรรมซีพียูที่มีอยู่ที่มีมากกว่า 2 ^ 12 = 4096 opcode นั้นหายากมากเพราะคนเราแทบไม่ต้องการที่จะเรียนรู้มากมายเกินกว่าที่จะเรียนรู้และมีจำนวนมากเกินกว่าที่จะมีประโยชน์จริง ๆ

อัปเดต : ตามที่ได้กล่าวไว้ในความคิดเห็นชุดคำสั่ง x86 ที่เป็นไปได้ทั้งหมดอาจเพิ่มขึ้นจริงมากกว่า 6,000 ขึ้นอยู่กับวิธีการนับของคุณ! นี่เป็นข้อยกเว้นที่มากกว่า

อย่างไรก็ตามสำหรับซีพียู 4 บิต 2 ^ 4 = 16 คำแนะนำนั้นมักจะไม่เพียงพอดังนั้นโปรเซสเซอร์ดังกล่าวจำนวนมากจึงมีมากขึ้น

มีหลายวิธีและเหตุผลที่ CPU อาจรวม opcode มากกว่าที่เหมาะสมกับ data bus รวมถึง:

คำแนะนำการขยายคำ

หน่วยประมวลผลไม่จำเป็นต้องอ่านคำสั่งในรอบข้อมูลเดียว - มันสามารถใช้หลายรอบผลสืบเนื่อง ในความเป็นจริงซีพียูส่วนใหญ่ทำไม่ได้ - แม้ว่ามันจะใช้สำหรับการโต้เถียงคำสั่งมากกว่าปกติเพื่อขยายพื้นที่ opcode

ตัวอย่าง: intel 4004 มีเพียง 4 บรรทัดเท่านั้นซึ่งเป็นมัลติเพล็กซ์เป็นสายข้อมูล / ที่อยู่, data data แบบ 4 บิต แต่มากกว่า 40 opcode ในคำสั่ง 8-bit

คำนำหน้าและคำต่อท้าย

ตัวประมวลผล (CISC) อาจมีส่วนนำหน้าคำสั่งและคำต่อท้ายได้มากเท่าที่ต้องการ

สิ่งเหล่านั้นจะถูกนำหน้าไปยังคำสั่งจริงเพื่อเปลี่ยนสิ่งที่ทำ - ไม่ว่าจะน้อยหรือสมบูรณ์

ขึ้นอยู่กับคำจำกัดความของ "opcode ที่ไม่ซ้ำกัน" ของคุณ ถ้าสมมติว่าส่วนใดส่วนหนึ่งของคำสั่งที่ไม่ใช่ข้อมูลที่จะเป็นส่วนหนึ่งของ opcode จำนวนรวมของพวกเขาจะรวมถึงรูปแบบที่เป็นไปได้ทั้งหมด อย่างไรก็ตามบางคนเชื่อว่าสิ่งที่แนบมาเหล่านั้นเป็นส่วนที่แตกต่างกันของการเรียนการสอน

ตัวอย่าง: Intel x86 CPUs ไม่มี opcodes 4M อย่างไรก็ตามหากคุณนับว่าคำนำหน้าทั้งหมดเป็นส่วนหนึ่งของ opcode ซีพียูสมัยใหม่จะอนุญาตให้ใช้คำแนะนำได้นานถึง 15 bYtes นั่นเป็นจำนวนมากของรหัสที่เป็นไปได้ แม้ว่าหลายคนจะทำสิ่งเดียวกัน - ดังนั้นสิ่งนี้ขึ้นอยู่กับคำจำกัดความของพวกเขาว่า "ไม่เหมือนใคร"

โหมด

โปรเซสเซอร์อาจมีโหมดการทำงานหลายโหมดซึ่งอาจมีชุดรหัสที่แตกต่างกันโดยสิ้นเชิง

ตัวอย่าง: intel x86_64 มีโหมด 32 บิต (จริง / v86 / ได้รับการป้องกัน) และโหมด 64 บิตซึ่งมี opcodes ที่แตกต่างกัน ARM CPUs สามารถมีโหมด ARM 32 บิตและนิ้วหัวแม่มือ 16 บิต

มัลติบิตบัส

คำถามระบุว่า "สายข้อมูล" และ "ที่อยู่บรรทัด" อย่างไรก็ตามบัสข้อมูลภายในและบัสแอดเดรสภายในอาจกว้างกว่าจำนวนบรรทัดบัสจริง

ข้อมูลบัสมัลติเพล็กถูกส่งตามลำดับคือครึ่งแรกจากนั้นครึ่งหลัง CPU เก็บไว้ในรีจิสเตอร์ภายในขนาดเต็มและทำงานกับมัน

มักจะทำเพื่อลดต้นทุนและ / หรือขนาดรอยเท้าทางกายภาพของชิป

ตัวอย่างเช่น intel 4004 ทุกอย่างในบัสข้อมูล LPC และ NEC VR4300 CPU ของ Nintendo64 ที่มีบัสข้อมูล 32 บรรทัดเท่านั้น

ไม่มีรถเมล์ขนาน

เนื่องจากความต่อเนื่องของจุดก่อนหน้าซีพียูไม่จำเป็นต้องเปิดเผยบัสขนานเลย

CPU อาจแสดงบัสลำดับเช่น I2C, SPI และอื่น ๆ ได้ง่าย

มันอาจจะไม่คุ้มค่ามากนักสำหรับการผลิตซีพียูแบบเฉพาะเจาะจง แต่ไมโครคอนโทรลเลอร์จำนวนนับไม่ถ้วนจำนวนมาก (ซึ่งรวมถึงทั้งซีพียูและหน่วยความจำ) ทำให้วิธีนี้ช่วยประหยัดพินอันมีค่าเหล่านั้นสำหรับสิ่งที่มีประโยชน์มากกว่า ตัวอย่างเช่น atmel ATTINY4 / 5/6/10 ชิปมีเพียง 6 พินรวมสองสำหรับพลังงานหนึ่งสำหรับการรีเซ็ตสามวัตถุประสงค์ทั่วไป คำแนะนำจะถูกส่งผ่านอินเตอร์เฟส 3 บรรทัดที่เป็นกรรมสิทธิ์ตามลำดับ

ขึ้นอยู่กับคำจำกัดความของคุณของไมโครคอนโทรลเลอร์มันสามารถพิจารณาไมโครโปรเซสเซอร์หรือสามารถตั้งโปรแกรมให้ทำหน้าที่หนึ่ง (เช่นจำลอง CPU เฉพาะกับรถบัสหรือรถบัสตามลำดับ)

คำถามนี้ระบุอย่างชัดเจนว่าบัสข้อมูลบางประเภทถูกเปิดเผย แต่ไม่ใช่ว่าเป็นบัสขนาน ในทางทฤษฎีข้อมูลสาย 12 รถบัสจะประกอบด้วยข้อมูลเดียวอนุกรมเส้นและ 11 auxilary / พื้น / สถานะเส้นแต่ที่อาจจะไม่เป็นความคิดที่มีเหตุผลมาก

รถบัสคำสั่งเฉพาะ

ที่จริงแล้วตัวประมวลผลนั้นไม่จำเป็นต้องยอมรับคำแนะนำบนรถบัสสายเดียวกันกับที่ทำข้อมูล

นี่อาจเป็นกรณีที่ ALUs เป็นชิปที่แยกจากกันแทนที่จะเป็นส่วนหนึ่งของไมโครโปรเซสเซอร์ แต่ไม่สามารถใช้งานได้ในเชิงเศรษฐศาสตร์ในขณะนี้ส่วนใหญ่

แต่ไม่มีอะไรป้องกันคุณจากการใช้งาน CPU ที่มีบรรทัดเฉพาะสำหรับคำแนะนำ CPU ดังกล่าวอาจมีประโยชน์เมื่อต้องทำการดำเนินการครั้งเดียวบนอาเรย์ของข้อมูล (SIMD)

เนื่องจากความกว้างของบัสคำสั่งนั้นไม่มีข้อ จำกัด ดังนั้นการนับ opcode จึงเป็นไปได้สูงสุด


4
ในฐานะที่เป็นจุดสนใจ x86-64 มี 1,000 ถึง 6,000 opcodes ขึ้นอยู่กับผู้ที่คุณขอ ( 1 , 2 , 3 )
LMS

ไม่เคยแม้แต่จะลองนับมัน แต่ด้วยความหลากหลายที่เหมาะสม
แจ็คไวท์

13

จำนวนสูงสุดของ opcodes สามารถคิดได้สองวิธี:

  • จำนวน opcodes ที่เป็นไปได้สูงสุด

สามารถรวบรวมได้จากความกว้างของคำสั่งไม่ใช่ความกว้างของบัสข้อมูล โดยปกติ opcode จะพอดีกับการเข้าถึงหน่วยความจำเดียวและจากนั้นคำตอบคือ 2 ^ 12 แต่โปรเซสเซอร์สามารถใช้กระบวนการถอดรหัส opcode หลายรอบเพื่อขยายจำนวนของ opcode ที่เป็นไปได้เกิน 2 ^ 12

  • จำนวนสูงสุดของคำสั่ง (ที่มี opcodes) ที่โปรเซสเซอร์สามารถระบุได้โดยตรง

จำนวนสูงสุดของคำสั่ง (ประกอบด้วย opcodes) ที่โปรเซสเซอร์สามารถกำหนดแอดเดรสได้โดยตรงถูก จำกัด ด้วยความกว้างของบัสแอดเดรส (2 ^ 16) อย่างไรก็ตามตัวประมวลผลทางอ้อมสามารถระบุหน่วยความจำเพิ่มเติมเช่น opcode สามารถช่วยให้การสลับเพจหรือการดำเนินการที่คล้ายกันเพื่อดึงคำแนะนำจากแหล่งอื่น


2
คำถามนี้ไม่ได้คลุมเครือ ถ้ามันควรจะถูกตีความว่าเป็นจุดที่สองของคุณมันจะได้รับการกำหนดเป็น "จำนวนสูงสุดของคำสั่งที่สามารถจัดเก็บ / แก้ไข / ... " คำว่า "opcode" ทำให้ชัดเจนว่าเป็นเรื่องเกี่ยวกับชุดคำสั่งไม่ใช่ช่วง adressable
ความศรัทธาจางหายไปใน SE

11
+1 สำหรับการกล่าวถึงว่าการใช้รหัสหลายคำนั้นค่อนข้างเป็นไปได้ดังนั้นคำถามจึงไม่ดีนัก
Spehro Pefhany

2
เจ้าของภาษาอังกฤษมักมีอคติที่ทำให้พวกเขายากที่จะเข้าใจความหมายที่เปลือยเปล่าของคำที่ใช้ เมื่อผู้พูดภาษาอังกฤษระดับนานาชาติอ่านหรือฟังพวกเขาอาจไม่ได้ความหมายที่สอง (ตั้งใจ) เช่นเดียวกับเมื่อนักเรียนเรียนรู้การแสดงออกใหม่ - ถ้าสูตรไม่ชัดเจนมันง่ายต่อการเข้าใจผิด ดังนั้นฉันเดาว่านักเรียนได้เรียนรู้ว่าแต่ละคำสั่งมีส่วน opcode อยู่ภายใน ใช่ฉันจะบอกว่าเป็นเรื่องจริง จริงๆแล้วถ้อยคำของคำถามที่ 01. นั้นคลุมเครือ
HKOB

4
@SpehroPefhany Yep คำถามไม่ชัดเจนไม่ต้องสงสัยโดยไม่ต้องบริบทเพิ่มเติม หาก OP ได้รับการสอนว่าสิ่งใดที่ความยาวของคำสั่ง opcode จะถูกดึงมาใช้ในการเข้าถึงหน่วยความจำครั้งแรกคำตอบคือ (c) มิฉะนั้นจะไม่สามารถตอบได้ ประเด็นคือ OP ได้ให้บริบทเพียงพอในคำถาม EE.SE ของเขาหรือไม่หรือครูของเขาให้บางสิ่งเพื่อให้ได้รับและกำหนดคำถามที่คลุมเครือหรือไม่
Lorenzo Donati - Codidact.org

1
@SpehroPefhany True :) แต่ภาษาอังกฤษ - อาจเป็นเรื่องน่ารำคาญเล็กน้อย - เป็นส่วนหนึ่งของโลกภาษาอังกฤษนานาชาติ ( bbc.com/capital/story/ … )
HKOB

4

คุณถูกที่จะสับสนกับคำถามนี้ - มันเขียนไม่ดีมาก

อย่างไรก็ตามฉันสงสัยว่าความตั้งใจของคำถามนี้คือการกำหนดขนาดคำศัพท์สำหรับเครื่อง เมื่อได้รับข้อมูลที่ไม่สมบูรณ์ที่ระบุไว้นี้จะต้องสอดคล้องกับความกว้างของบัสข้อมูล ความกว้างของบัสแอดเดรสกำหนดขนาดสูงสุดของหน่วยความจำหลัก

ในทางปฏิบัติฟิลด์ "opcode" ของคำสั่งของเครื่องที่กำหนดมักจะมีขนาดเล็กกว่าคำสั่งของตัวเองอย่างมาก แต่คำสั่งอาจกว้างกว่าดาต้าบัส

โมโตโรล่า 68008 รุ่นเก่าเป็นเคส - เป็นรุ่นลดราคาของ 68000 พร้อมบัสข้อมูล 8 บิต แต่ใช้คำศัพท์ 16 บิตเดียวกันซึ่งโดยทั่วไปแล้ว 7 บิตจะกำหนด opcode (ส่วนที่เหลือ ระบุการลงทะเบียนต้นทางและปลายทางและโหมดการกำหนดแอดเดรสซึ่งทั้งหมดนี้ควรพิจารณาเป็นตัวถูกดำเนินการไม่ใช่opcode ) หากคุณรวมบิตโหมดการกำหนดแอดเดรสใน opcode เช่นเดียวกับที่ทำให้ฟิลด์ opcode รวมเป็น 10 บิต คำแนะนำจริงอาจใช้เวลานานกว่าในบางโหมดการกำหนดแอดเดรส


"ส่วนที่เหลือระบุการลงทะเบียนต้นทางและปลายทางและโหมดการกำหนดแอดเดรสซึ่งทั้งหมดนี้ควรพิจารณาเป็นตัวถูกดำเนินการไม่ใช่ opcode" ... ดีนั่นเป็นเรื่องของความคิดเห็น สำหรับสถาปัตยกรรม RISC นั้นเป็นความจริงอย่างชัดเจน แต่ในหลาย ๆ กรณีสถาปัตยกรรม CISC นั้นถูกกำหนดในแบบเฉพาะกิจซึ่งอาจเหมาะสมที่จะนับแต่ละชุดเป็น opcode แยกกัน Z80 เป็นกรณี - ในขณะที่คำแนะนำจำนวนมากมีหนึ่งหรือสองตัวเลือกการลงทะเบียนที่เข้ารหัสในบิตของ opcode โหมดการกำหนดที่อยู่ทั้งหมดโฆษณาเฉพาะกิจและคำนำหน้าแก้ไขการตีความของ ...
Jules

... ทั้งที่อยู่โหมดและลงทะเบียนในหลายกรณีซึ่งทำให้การตีความของการลงทะเบียนจาก bitfields น้อยกว่าตรงไปตรงมา เอกสารและแอสเซมเบลอร์ส่วนใหญ่ดูเหมือนจะใช้ความเข้าใจดังนั้นการรวมกันของคำสั่งและการลงทะเบียนแต่ละครั้งนั้นเป็น opcode แยกต่างหากและมีเพียงค่าทันทีและค่าออฟเซ็ตที่อยู่ทางอ้อมเท่านั้นที่จะถูกดำเนินการจริง มุมมองโลกนี้ใช้ร่วมกันโดยบรรพบุรุษรุ่นก่อนคือ intel 8080 ซึ่งรูปแบบภาษาแอสเซมบลีมาตรฐานได้ลงทะเบียนดำเนินการโดยคำสั่งที่เข้ารหัสซึ่งเป็นส่วนหนึ่งของตัวช่วยจำไม่ได้รับเป็นอาร์กิวเมนต์
จูลส์

จริง - Z80 นั้นเป็นปกติของซีพียูขนาดเล็กแบบ 8 บิต 6502 นั้นมีการทำแผนที่ opcode ที่เป็นตรรกะมากกว่าซึ่งทำให้วงจรถอดรหัสได้รับการปรับให้เหมาะสม แต่ฉันกำลังพูดถึง 68K โดยเฉพาะซึ่งมีฟิลด์การระบุที่อยู่และโหมดการลงทะเบียนปลายทางที่แตกต่างกันมากตามคำแนะนำ หลังจากลบออกแล้วฟิลด์ opcode ยังสามารถกว้างกว่าบัสข้อมูลของ 68008 ได้
Chromatix

1

Edson DeCastro ออกแบบคอมพิวเตอร์เกือบจะเหมือนกับ PDP-8 ซึ่งมี 15 แอดเดรสและ 12 ดาต้าไลน์

ดังนั้นคำตอบสำหรับคำถามที่โพสต์คือ 574 op-codes เนื่องจาก PDP-8 มี 284 op-codes และ Ed นั้นบ้าเพียงครึ่งเดียว


2
ไม่แน่ใจว่าทำไม downvote - นี่เป็นคำตอบที่ดีเหมือนกันเพราะคำถามนั้นไม่มีความหมาย :)
จูลส์

ฉันสงสัยว่า downvote นั้นเป็นเพราะ 284 * 2 = 568 ไม่ใช่ 574
ทำเครื่องหมาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.