ฉันมีประเด็นเพิ่มเติมบางประการที่นี่:
พิจารณาการดำเนินการ "a = b / c" x86 จะใช้สิ่งนี้เป็น
mov eax,b
xor edx,edx
div dword ptr c
mov a,eax
เนื่องจากโบนัสเพิ่มเติมของคำสั่ง div edx จะมีส่วนที่เหลืออยู่
ตัวประมวลผล RISC จะต้องโหลดที่อยู่ของ b และ c ก่อนโดยโหลด b และ c จากหน่วยความจำไปยังรีจิสเตอร์ทำการแบ่งและโหลดที่อยู่ของ a แล้วจึงจัดเก็บผลลัพธ์ ไวยากรณ์ Dst, src:
mov r5,addr b
mov r5,[r5]
mov r6,addr c
mov r6,[r6]
div r7,r5,r6
mov r5,addr a
mov [r5],r7
ที่นี่มักจะไม่มีเศษเหลือ
หากต้องโหลดตัวแปรใด ๆ ผ่านพอยน์เตอร์ทั้งสองลำดับอาจยาวขึ้นแม้ว่าจะมีความเป็นไปได้น้อยกว่าสำหรับ RISC เนื่องจากอาจมีพอยน์เตอร์ตั้งแต่หนึ่งตัวขึ้นไปแล้วในรีจิสเตอร์อื่น x86 มีการลงทะเบียนน้อยกว่าดังนั้นความเป็นไปได้ที่ตัวชี้จะอยู่ในหนึ่งในนั้นจึงน้อยลง
ข้อดีและข้อเสีย:
คำสั่ง RISC อาจผสมกับโค้ดโดยรอบเพื่อปรับปรุงการตั้งเวลาคำสั่งซึ่งมีความเป็นไปได้น้อยกว่ากับ x86 ซึ่งจะใช้งานได้ดี (มากหรือน้อยขึ้นอยู่กับลำดับ) ภายใน CPU เอง โดยทั่วไปลำดับ RISC ด้านบนจะมีความยาว 28 ไบต์ (7 คำสั่งของความกว้าง 32 บิต / 4 ไบต์แต่ละคำสั่ง) บนสถาปัตยกรรม 32 บิต สิ่งนี้จะทำให้หน่วยความจำนอกชิปทำงานมากขึ้นเมื่อดึงคำแนะนำ (การดึงข้อมูลเจ็ดครั้ง) ลำดับ x86 ที่หนาแน่นขึ้นมีคำแนะนำน้อยลงและแม้ว่าความกว้างจะแตกต่างกันไปคุณอาจกำลังดูค่าเฉลี่ย 4 ไบต์ / คำสั่งที่นั่นด้วย แม้ว่าคุณจะมีแคชคำสั่งเพื่อเร่งความเร็วในการดึงข้อมูลเจ็ดครั้งหมายความว่าคุณจะมีการขาดดุลสามส่วนที่เหลือเพื่อชดเชยเมื่อเทียบกับ x86
สถาปัตยกรรม x86 ที่มีรีจิสเตอร์น้อยกว่าในการบันทึก / กู้คืนหมายความว่ามันอาจจะทำเธรดสวิตช์และจัดการการขัดจังหวะได้เร็วกว่า RISC การลงทะเบียนเพิ่มเติมเพื่อบันทึกและกู้คืนต้องใช้พื้นที่สแต็ก RAM ชั่วคราวมากขึ้นเพื่อทำการขัดจังหวะและพื้นที่สแต็กถาวรมากขึ้นเพื่อจัดเก็บสถานะเธรด แง่มุมเหล่านี้ควรทำให้ x86 เป็นตัวเลือกที่ดีกว่าสำหรับการรัน RTOS ที่แท้จริง
ในบันทึกส่วนตัวฉันพบว่ายากที่จะเขียน RISC assembly มากกว่า x86 ฉันแก้ปัญหานี้โดยการเขียนรูทีน RISC ใน C รวบรวมและแก้ไขโค้ดที่สร้างขึ้น สิ่งนี้มีประสิทธิภาพมากกว่าจากมุมมองการผลิตโค้ดและอาจมีประสิทธิภาพน้อยกว่าจากมุมมองการดำเนินการ การลงทะเบียนทั้งหมด 32 รายการเพื่อติดตาม ด้วย x86 เป็นวิธีอื่น ๆ : การลงทะเบียน 6-8 รายการที่มีชื่อ "จริง" ทำให้ปัญหาสามารถจัดการได้มากขึ้นและสร้างความมั่นใจมากขึ้นว่าโค้ดที่สร้างจะทำงานได้ตามที่คาดไว้
น่าเกลียด? นั่นอยู่ในสายตาของคนดู ฉันชอบ "แตกต่าง"