TL; DR;
ทะเบียน“ FS” /“ GS” มีไว้เพื่ออะไร?
เพียงเพื่อเข้าถึงข้อมูลนอกเหนือจากส่วนข้อมูลเริ่มต้น (DS) เหมือนกับ ES ทุกประการ
อ่านยาว:
ดังนั้นฉันจึงรู้ว่าการลงทะเบียนต่อไปนี้และการใช้งานควรจะเป็นอย่างไร:
[... ]
เกือบ แต่ DS ไม่ใช่กลุ่มข้อมูล 'บางส่วน' แต่เป็นกลุ่มข้อมูลเริ่มต้น การดำเนินการทั้งหมดเกิดขึ้นตามค่าเริ่มต้น (* 1) นี่คือตัวแปรเริ่มต้นทั้งหมดที่ตั้งอยู่ - โดยพื้นฐานdata
แล้วและbss
และเป็นส่วนหนึ่งของสาเหตุที่ทำให้รหัส x86 ค่อนข้างกะทัดรัด ข้อมูลที่จำเป็นทั้งหมดซึ่งเป็นสิ่งที่เข้าถึงบ่อยที่สุด (โค้ดบวกและสแต็ก) อยู่ในระยะทางสั้น 16 บิต
ES ใช้เพื่อเข้าถึงทุกสิ่งทุกอย่าง (* 2) ทุกอย่างที่อยู่นอกเหนือจาก 64 KiB ของ DS เช่นเดียวกับข้อความของโปรแกรมประมวลผลคำเซลล์ของสเปรดชีตหรือข้อมูลรูปภาพของโปรแกรมกราฟิกเป็นต้น ข้อมูลนี้ไม่ได้รับการเข้าถึงมากนักดังนั้นการใช้คำนำหน้าจึงเจ็บน้อยกว่าการใช้ฟิลด์ที่อยู่ที่ยาว
ในทำนองเดียวกันมันเป็นเพียงความน่ารำคาญเล็กน้อยที่อาจต้องโหลด DS และ ES (และโหลดซ้ำ) เมื่อดำเนินการกับสตริง - อย่างน้อยก็ชดเชยด้วยชุดคำสั่งการจัดการอักขระที่ดีที่สุดในเวลานั้น
สิ่งที่เจ็บปวดจริงๆคือเมื่อข้อมูลผู้ใช้เกิน 64 KiB และต้องเริ่มดำเนินการ แม้ว่าการดำเนินการบางอย่างจะทำเพียงครั้งละรายการข้อมูลเดียว (คิดว่าA=A*2
) ส่วนใหญ่ต้องการข้อมูลสอง ( A=A*B
) หรือสามรายการ ( A=B*C
) หากรายการเหล่านี้อยู่ในส่วนต่างๆ ES จะถูกโหลดซ้ำหลายครั้งต่อการดำเนินการโดยเพิ่มค่าใช้จ่ายที่ค่อนข้างมาก
ในตอนแรกด้วยโปรแกรมขนาดเล็กจากโลก 8 บิต (* 3) และชุดข้อมูลที่มีขนาดเล็กเท่า ๆ กันมันไม่ใช่เรื่องใหญ่ แต่ในไม่ช้ามันก็กลายเป็นคอขวดที่มีประสิทธิภาพหลัก - และอื่น ๆ ก็เป็นความเจ็บปวดอย่างแท้จริงสำหรับ โปรแกรมเมอร์ (และคอมไพเลอร์) ด้วย 386 Intel บรรเทาส่งมอบในที่สุดโดยการเพิ่มสองกลุ่มมากขึ้นเพื่อให้ชุดใดเอก , ไบนารีหรือternaryมีองค์ประกอบที่กระจายออกไปในหน่วยความจำสามารถเกิดขึ้นได้โดยไม่ต้องโหลด ES ซ้ำ
สำหรับการเขียนโปรแกรม (อย่างน้อยในแอสเซมบลี) และการออกแบบคอมไพเลอร์สิ่งนี้ค่อนข้างได้เปรียบ แน่นอนว่าอาจมีมากกว่านี้ แต่คอขวดสามขวดก็หายไปโดยทั่วไปดังนั้นไม่จำเป็นต้องหักโหมมากเกินไป
การตั้งชื่อตัวอักษร F / G อย่างชาญฉลาดเป็นเพียงการต่อเนื่องตามตัวอักษรหลังจาก E อย่างน้อยก็จากจุดของการออกแบบ CPU ไม่มีอะไรเกี่ยวข้อง
* 1 - การใช้ ES สำหรับปลายทางสตริงเป็นข้อยกเว้นเนื่องจากจำเป็นต้องมีการลงทะเบียนเพียงสองส่วน หากไม่มีก็จะไม่มีประโยชน์มากนักหรือจำเป็นต้องมีคำนำหน้ากลุ่มเสมอไป ซึ่งสามารถฆ่าหนึ่งในคุณสมบัติที่น่าแปลกใจการใช้คำสั่งสตริง (ไม่ซ้ำซาก) ส่งผลให้เกิดประสิทธิภาพสูงสุดเนื่องจากการเข้ารหัสไบต์เดียว
* 2 - ดังนั้นในการมองย้อนกลับไป 'ทุกอย่างที่เหลือ' น่าจะเป็นวิธีการตั้งชื่อที่ดีกว่า 'กลุ่มเสริม'
* 3 - สิ่งสำคัญเสมอที่ต้องจำไว้ว่า 8086 มีความหมายเพียงการวัดช่องว่างหยุดจนกว่า8800จะเสร็จสิ้นและส่วนใหญ่มีไว้สำหรับโลกฝังตัวเพื่อให้ลูกค้า 8080/85 อยู่บนเรือ