เพื่อให้เข้าใจรูปแบบการสอนของ MIPS I คุณต้องเข้าใจ MIPS ไปป์ไลน์และคิดย้อนกลับไปที่เทคโนโลยีการใช้งาน CPU ประมาณปี 1985 หากคุณดูที่แผนภาพ (คุณรู้จัก) คุณจะเห็นว่าการอ่านไฟล์ลงทะเบียนอยู่ใน ID stage หลังจาก IF
สำหรับวัตถุประสงค์ของการเรียนการสอนชนิด R ระยะ ID ต้องทำงานต่อไปนี้:
- ตรวจสอบว่าจริง ๆ แล้วมันคือคำสั่งประเภท R
- ถ้าเป็นเช่นนั้นให้บอกไฟล์ register เพื่อโหลดค่าจาก register
สำหรับวัตถุประสงค์ของการสนทนานี้เป็นงานแรกที่คุณต้องพิจารณา หากมีการถอดรหัสงานสอนจำนวนมากที่คุณต้องทำเพื่อทำงานให้สำเร็จหากคุณต้องการค่าใด ๆ จากการลงทะเบียนสิ่งนี้จะเพิ่มความล่าช้าก่อนที่คุณจะสามารถเริ่มอ่านการลงทะเบียน นอกจากนี้ยังเพิ่มความซับซ้อนของเวที ID ด้วยการจอง opcode เพียงครั้งเดียวสำหรับคำแนะนำประเภท R ทั้งหมดคุณจะต้องรักษาความซับซ้อนให้น้อยที่สุด
มันดูแปลก ๆ นิดหน่อยที่คุณอุทิศห้าบิตเพื่อเปลี่ยน ฉันนึกถึงคำอธิบายที่เป็นไปได้สองสามข้อ หนึ่งในนั้นคือทำให้การกำหนดเส้นทางง่ายขึ้น (ห้าบิตเหล่านั้นถูกป้อนเข้าสู่ไฟล์ลงทะเบียนโดยตรงเสมอห้าบิตเหล่านั้นถูกป้อนเข้าสู่กระบอกเปลี่ยนตลอดเวลาทั้งหกบิตจะถูกส่งไปยัง ALU เพื่อกำหนดฟังก์ชันที่จะทำงาน)
พวกเขาอาจกำลังคิดที่จะแนะนำคำแนะนำการเปลี่ยนจากซ้ายและเพิ่มแบบผสมในอนาคต นี่คงจะเป็นรูปแบบ:
$d = $s + ($t << shamt)
2s+ 1s
วันนี้เราอาจไม่คิดว่าการมีขั้นตอนการถอดรหัสที่ซับซ้อนมากขึ้นโดยเฉพาะอย่างยิ่งเนื่องจากการเข้าถึงการลงทะเบียนไฟล์มีแนวโน้มที่จะเกิดขึ้นในภายหลังในขั้นตอนการทำงานของซีพียูซูเปอร์คาร์ทั่วไป ซีพียูที่ทันสมัยมากแม้กระทั่งทำบางคำแนะนำหยาบถอดรหัสในเวลาที่การเรียนการสอนจะแทรกอยู่ในแคช L1 คุณทำให้ I-cache มีเส้นกว้างขึ้นสองสามบิตเพื่อเก็บข้อมูลเพิ่มเติม (จากกฎของ Moore คุณมีทรานซิสเตอร์จำนวนมากที่ต้องเสียไป) เพื่อให้การถอดรหัสคำสั่ง "เหมาะสม" ง่ายขึ้นและเร็วขึ้น
เหตุผลหนึ่งที่พวกเขาอาจต้องการให้ฟิลด์ opcode มีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้เพื่อที่จะไม่ลงโทษคำแนะนำประเภท J อย่างไม่เหมาะสม อย่างที่คุณอาจทราบแล้วคำแนะนำประเภท J ใช้การกำหนดแอดเดรสแบบหลอกโดยตรง เพื่อประโยชน์ของทุกคนที่เล่นที่บ้านฉันจะอธิบายสั้น ๆ
ฟิลด์แอดเดรสของคำสั่ง J-type คือ 26 บิต เนื่องจากคำแนะนำอยู่ในแนวตั้ง 4 ไบต์เสมอคุณไม่จำเป็นต้องเก็บบิตสองบิตที่สำคัญน้อยที่สุดซึ่งหมายความว่าคุณมีที่อยู่ 28 บิตอย่างมีประสิทธิภาพ อย่างไรก็ตามพื้นที่ที่อยู่ใน MIPS I คือ 32 บิต ดังนั้นตำแหน่งกระโดดสี่บิตแรกสุดจะถูกนำมาจากตัวนับโปรแกรม
ซึ่งหมายความว่าคุณไม่สามารถข้ามไปยังตำแหน่งที่ตำแหน่งสี่บิตที่สำคัญที่สุดของพีซีนั้นแตกต่างกันได้โดยตรง คุณจะต้องทำการกระโดดข้ามคำสั่งสามครั้งที่มีราคาแพงกว่าแทนการลงทะเบียน:
lui $r,target >> 16
ori $r,$r,target & 0xFFFF
jr $r
นั่นไม่ได้เลวร้ายเกินไปในวันนี้ แต่ในปี 1985 มันมีวงจรนาฬิกามาก
การขโมยสักเล็กน้อยจากเขตข้อมูลที่อยู่จะช่วยลดช่วงของการกระโดดโดยตรงได้มากยิ่งขึ้น คุณสามารถดูว่านี่อาจเป็นราคาที่จ่ายสูงเกินไป