'R' ในชื่อลงทะเบียน x64 มีไว้เพื่ออะไร?


27

ฉันรู้ว่าการลงทะเบียน 32 บิตถูกตั้งชื่อเหมือนการลงทะเบียน 16 บิตที่มีส่วนนำหน้า 'E' เพื่อเพิ่มความหมาย ฉันคิดเสมอว่าหมายถึงขยายจาก 16 เป็น 32 บิตแม้ว่าฉันไม่เคยเห็นที่ระบุไว้อย่างชัดเจน

ฉันพยายามค้นหาว่า 'R' หมายถึงอะไร แต่ทักษะ google ของฉันทำให้ฉันล้มเหลว ใครรู้บ้าง


คำตอบ:


32

มันหมายถึงการลงทะเบียนและมันไม่ได้มีไว้สำหรับเหตุผลทางประวัติศาสตร์

ส่วนที่ผ่านมาคือ Intel มีนิสัยในการแจกแจงทะเบียนด้วยตัวอักษรด้วย 8008 (A ถึง E บวก H และ L) โครงการนั้นเพียงพอในเวลานั้นเพราะไมโครโปรเซสเซอร์มีการลงทะเบียนน้อยมากและไม่น่าจะได้รับมากขึ้นและการออกแบบส่วนใหญ่ก็ทำ ความเชื่อมั่นที่เกิดขึ้นในตอนนั้นคือซอฟต์แวร์จะถูกเขียนใหม่สำหรับซีพียูใหม่ตามที่ปรากฏดังนั้นการเปลี่ยนรูปแบบการตั้งชื่อรีจิสเตอร์ระหว่างโมเดลจะไม่เป็นเรื่องใหญ่ ไม่มีใครมองเห็น 8088 ที่พัฒนาเป็น "ตระกูล" หลังจากรวมเข้ากับ IBM PC และแอกของความเข้ากันได้แบบย้อนหลังค่อนข้างบังคับให้ Intel ต้องปรับแผนการเช่น "E" ลงทะเบียน 32 บิตเพื่อรักษาไว้

ส่วนที่ไม่ใช่ประวัติศาสตร์นั้นมีประโยชน์ทั้งหมด การใช้ตัวอักษรสำหรับการลงทะเบียนที่ใช้งานทั่วไป จำกัด คุณไว้ที่ 26 น้อยลงหากคุณคัดออกที่อาจทำให้เกิดความสับสนกับชื่อของการลงทะเบียนพิเศษเช่นตัวนับโปรแกรมแฟล็กหรือตัวชี้สแต็ก

ฉันไม่มีแหล่งที่จะยืนยัน แต่ฉันสงสัยว่าตัวเลือกRเป็นคำนำหน้าและการแนะนำ R8 ถึง R15 บน CPU 64 บิตส่งสัญญาณการเปลี่ยนไปใช้รีจิสเตอร์ที่มีหมายเลขซึ่งเป็นบรรทัดฐานระหว่าง 32- บิตและ สถาปัตยกรรมขนาดใหญ่ที่ไม่ได้มาจาก 8008 เป็นเวลาเกือบครึ่งศตวรรษ ไอบีเอ็มทำมันในปี 1960 ด้วย 360 และตามมาด้วย PowerPC, DEC Alpha, MIPS, SPARC, ARM, i860 และ i960 ของ Intel และกลุ่มอื่น ๆ ที่ถูกลืมมานาน

คุณจะทราบว่ารีจิสเตอร์ที่มีอยู่นั้นจะพอดีกับ R0 ถึง R7 ถ้ามีอยู่และมันจะไม่ทำให้ฉันแปลกใจสักนิดหากพวกเขาปฏิบัติเช่นนั้นภายใน รีจิสเตอร์แบบยาวที่มีอยู่ (RAX / EAX / AX / AL, RBX / EBX / BX / BL ฯลฯ ) อาจอยู่รอบ ๆ จนกว่าดวงอาทิตย์จะไหม้


1
การต้านมะเร็งเล็กน้อย แต่ฉันคิดว่าฉันไม่ควรแปลกใจเกินไป ขอบคุณ
Matt

3
นั่นคือละครทั้งหมดที่ฉันสามารถรวบรวมได้ :-)
Blrfl

+1 สำหรับการอ่านที่น่าสนใจมาก แต่ถ้าหากจะสรุปในบรรทัดเดียวก็คงจะเป็นคำตอบที่ฉันให้ ข้อมูลที่สมบูรณ์และน่าสนใจทั้งหมดนี้ถูกย่อให้เป็น "เหตุผลทางประวัติศาสตร์" หากสรุปไว้
Mike Nakis

6
เอเอ็มดีไม่พิจารณาการเปลี่ยนชื่อหรือนามแฝงต่ำ 8 ลงทะเบียนไปr0- r7หรือใช้UAXแทนr8ฯลฯ "การหาวิธีการตั้งชื่อที่ดีที่สุดที่จริงแล้วการลงทะเบียนเป็นหนึ่งในส่วนที่ยากที่สุดในการทำส่วนขยายการลงทะเบียน" (ดูstackoverflow.com/a/35619528/224132สำหรับประวัติ x86-64 ที่เรียบร้อยอื่น ๆ ) นอกจากนี้คำสั่งซื้อไม่ใช่ RAX / RBX / ... ในการเข้ารหัสแบบไบนารีคือ AX, CX, DX, BX
Peter Cordes

9

ในโปรเซสเซอร์ก่อนหน้านี้รีจิสเตอร์ทั้งหมดไม่เท่ากัน:

  • ชิปมีพื้นที่ว่างไม่เพียงพอที่จะมีหน่วยแอดเดอร์สำหรับการลงทะเบียนแต่ละครั้ง
  • ด้วย 8 บิตมี opcodes ไม่เพียงพอสำหรับการรวมแหล่งที่มาและปลายทางที่เป็นไปได้ทั้งหมด

ดังนั้นสมมติว่าการลงทะเบียนหนึ่งครั้งนั้นมีความเกี่ยวข้องเสมอเมื่อ adder เกี่ยวข้องทำให้ชิปซับซ้อนน้อยลงและ opcodes สั้นลง

เช่น 6510 (ใช้ใน Commodore 64) สามารถเพิ่มได้โดยใช้ register A และการทำดัชนีใช้ X หรือ Y เท่านั้นมีคำสั่ง INC X และ INC Y แต่ไม่มี INC A.

เนื่องจากรีจิสเตอร์มีประเพณีที่แตกต่างกันจึงช่วยให้จำได้ถูกเลือกให้สะท้อนถึงการใช้งาน เช่น A, X และ Y ใน 6510 (แทน A, B และ C)

ชื่อใน 8086 ได้รับเลือกให้สะท้อนถึงการใช้งานของพวกเขาเช่นกัน ด้วยการลงทะเบียนวัตถุประสงค์ทั่วไป 4 รายการจึงมีเหตุผลที่จะตั้งชื่อพวกเขาว่า AX, BX, CX และ DX รีจิสเตอร์การจัดทำดัชนีเพิ่มเติมเรียกว่า BP และ SP (ตัวช่วยจำ: Base Pointer, Stack Pointer)

เนื่องจาก opcodes หลายตัวขยายไปถึง 16 บิตมีพื้นที่บางส่วนเพื่อระบุว่าใช้หนึ่งในสี่ของเรจิสเตอร์ใด อย่างไรก็ตามเหตุผลทางประวัติศาสตร์บางส่วนยังคงมีผลบังคับใช้เนื่องจาก CX เป็นบิตพิเศษ: REP และไลค์ซึ่งเป็น 8 บิต opcodes ให้ใช้ CX เป็นตัวนับเสมอ ตัวช่วยจำอย่างง่าย CX = ตัวนับช่วยให้จดจำว่าจะใช้อันไหน

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

ตัวประมวลผลที่ตามแนวความคิดนี้เรียกว่าโปรเซสเซอร์ RISC (ลดการเรียนการสอนซีพียู) เพื่อเปรียบเทียบกับ CISC (CPU ชุดคำสั่งที่ซับซ้อน)

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

ความยาวคงที่ 32 บิต opcodes มีพื้นที่เพียงพอที่จะรวมแหล่งที่มาแหล่งที่สองการดำเนินการและปลายทาง SPARCจัดการเพื่อบีบ 5 บิตสำหรับแต่ละแหล่งที่มาที่สองและปลายทางและมี 32 เรจิสเตอร์ที่มองเห็นได้ในเวลาเดียวกัน

32 รีจิสเตอร์มีจำนวนมากเกินกว่าที่จะใช้ตัวอักษรและพวกเขาส่วนใหญ่เท่ากันอยู่แล้วดังนั้นการกำหนดหมายเลขเป็นตัวเลือกที่ชัดเจน 'R' ถูกใช้เพื่อแยกพวกมันออกจากค่าคงที่ 0..31 และ 'R' เป็นตัวช่วยจำที่ง่ายสำหรับการลงทะเบียน ดังนั้น: R0..R31

ในช่วงหลายปีที่ผ่านมา Pentium และผู้สืบทอดของ บริษัท ได้รักษาความเข้ากันได้แบบย้อนหลัง อย่างไรก็ตามแนวความคิด RISC ที่ประสบความสำเร็จก็มีอยู่มากมายเช่นกัน บ่อยครั้งคำแนะนำเหมือน RISC ใหม่เหล่านี้จะทำงานได้เร็วกว่ารุ่นที่ใช้งานร่วมกันได้

จำนวนการลงทะเบียนก็เพิ่มขึ้นโดย Intel เพื่อลดจำนวนการเข้าถึงหน่วยความจำ

และในที่สุด Intel ก็เริ่มใช้ R-สัญกรณ์ ความเข้ากันได้ย้อนหลังจะทำให้แน่ใจได้ว่า AX, BX, ... จะยังคงอยู่ แต่ฉันจะเดิมพันว่า AX เป็นเพียงคำพ้องความหมายเช่น R0


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


1
ตระกูล 6500 นั้นไม่จำเป็นต้องมีคำสั่งเฉพาะเพื่อเพิ่มจำนวนตัวสะสมเนื่องจากการเพิ่มโหมดทันทีของ 1 เอาสองรอบเดียวกันเป็นINXหรือINYแม้ว่ารหัสนั้นใช้ไบต์เพิ่มเติม ฉันเขียนชุดประกอบจำนวนมากสำหรับชิปนั้นและในทางปฏิบัติการเพิ่มขึ้นแบบนั้นหายากนอกการทำคณิตศาสตร์ที่ต้องการ
Blrfl

@Blrfl คุณพูดถูก: ADD 1ทำงานดังนั้นไม่จำเป็นต้องมี 'พิเศษเพิ่มขึ้น' และฉันจำไม่ได้ว่าต้องการมันเช่นกัน
Sjoerd

1
มันควรจะตั้งข้อสังเกตว่ามันก็ไม่ได้ว่าอินเทลเพิ่มจำนวนของการลงทะเบียนใน x64 และชื่อพวกเขา แต่เอเอ็มดีเป็นส่วนขยาย 64 บิตเพื่อ x86 ถูกสร้างขึ้นโดยเอเอ็มดี การออกแบบ 64 บิตของ Intel คือItaniumซึ่งยังทำได้ไม่ดีนักแม้ว่าพวกเขาจะใส่จำนวนมาก (จำนวนเต็ม 128 จุดประสงค์ทั่วไปรวมถึงการลงทะเบียนอื่น ๆ อีกมากมาย)
8bittree

5

มันหมายถึง 'ลงทะเบียน' ด้วยเหตุผลทางประวัติศาสตร์


มันไม่ได้เป็นประวัติศาสตร์ที่แท้จริงหากมันอ้างถึงการลงทะเบียนในปัจจุบัน ฉันจะบอกว่าชื่ออื่น ๆ สำหรับการลงทะเบียน (AX, EAX และอื่น ๆ ) นั้นมีเหตุผลมากกว่าในอดีต แต่ที่จริงแล้วคำว่า "R" ใน RAX นั้นสามารถนำไปใช้ได้จริงมาก
Carl G

1
(+1) meme: "หากคุณสามารถอธิบายได้นานคุณสามารถอธิบายสั้น ๆ ได้"
user7813604
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.