หากคุณดูชุดคำสั่งของโปรเซสเซอร์มีหลายวิธีในการจัดกลุ่ม ตัวอย่างเช่นADD
คำแนะนำทั้งหมดอาจถูกจัดกลุ่มเข้าด้วยกันและXOR
คำแนะนำทั้งหมด
ภายในแต่ละกลุ่มของคำแนะนำเดียวกันอาจมีรุ่นที่ทำงานในหน่วยความจำหรือลงทะเบียน นี่คือการจัดกลุ่มย่อยที่กำหนดจำนวนการลงทะเบียนที่โปรเซสเซอร์มีประสิทธิภาพ
เป็นตัวอย่างสมมุติ 8 บิตสมมติว่า$Ax
คำแนะนำอาจเป็นADD
คำแนะนำและ$Cx
อาจเป็นXOR
คำแนะนำ ด้วยการออกแบบนี้มีเพียงสี่บิตที่เหลือเพื่อกำหนดตัวถูกดำเนินการ!
- หนึ่งอาจมีเพียงสี่ลงทะเบียนวัตถุประสงค์ทั่วไปและใช้สองบิตเพื่อกำหนดหนึ่งและสองบิตเพื่อกำหนดอื่น ๆ
- หรืออาจใช้บิตแรกเพื่อแยกแยะความแตกต่างของ "พิเศษ" และอีก 3 บิตเพื่อกำหนดว่าการลงทะเบียนใดแปดตัวที่จะทำงานกับตัวสะสม (
$x0
อาจเป็นตัวสะสมเอง)
- หรือหนึ่งอาจมีจำนวนการลงทะเบียนมากกว่านี้ - แต่จากนั้น จำกัด การลงทะเบียนที่สามารถเข้าถึงคำแนะนำได้
แน่นอนเรามีชุดคำสั่ง 8 บิตที่ผ่านมา แต่ถึงกระนั้นตรรกะนี้ช่วยกำหนดชุดลงทะเบียนในอดีต - มันจะทำต่อไปในอนาคต
แก้ไข (ตามที่ร้องขอ)
กล่าวว่าด้านบนสี่บิตมีการเรียนการสอน: ADD
, SUB
, XOR
, MOV
, CMP
ฯลฯ มีความเป็นไปได้ 16 ที่นี่มี แล้วสำหรับคำแนะนำเหล่านั้นที่ลงทะเบียนเพื่อลงทะเบียนทำให้รู้สึก (เช่นADD Rx,Ry
) คุณจะต้องระบุและRx
Ry
พูดสองบิตต่อไปมีการและสองคนสุดท้ายมีการx
y
ดังนั้น:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
ด้วยสองบิตเท่านั้นในการกำหนดรีจิสเตอร์เช่นนี้คุณมีที่ว่างสำหรับการลงทะเบียนทั้งหมดสี่รายการ!
นอกจากนี้คุณจะทราบว่าชุดค่าผสมของการลงทะเบียนบางรายการไม่สมเหตุสมผล ตัวอย่างเช่นMOV Rx, Rx
(ไม่ทำอะไรเลย) และSUB Rx, Rx
(สร้างเสมอ0
) สิ่งเหล่านี้อาจกลายเป็นคำแนะนำกรณีพิเศษ:
SUB Rx, Rx
อาจกลายเป็นNOT Rx
- คำสั่งตัวถูกดำเนินการเดียว
MOV Rx, Rx
อาจจะกลายเป็นคำสั่งที่ใช้ไบต์ที่สองเป็นค่าทันทีตีความว่าเป็นMOV
MOV Rx, #$yy
ด้วยวิธีนี้คุณสามารถ "เล่น" ด้วยแผนที่คำแนะนำเติมลงในรูสำหรับคำแนะนำที่ไร้ประโยชน์หรือ - ไร้ความหมายเพื่อจัดเตรียมชุดคำสั่งที่ใหญ่กว่าสำหรับโปรแกรมเมอร์ แต่ท้ายที่สุดชุดคำสั่งจะกำหนดชุดรีจิสเตอร์