0xFFFFFFF0
เป็นที่ที่ซีพียูที่ใช้งานร่วมกันได้กับ x86 เริ่มทำงานคำสั่งเมื่อเปิด นั่นคือการเดินสายที่ไม่สามารถเปลี่ยนได้ (โดยไม่ต้องมีฮาร์ดแวร์เพิ่มเติม) ของ CPU และ CPU ประเภทต่าง ๆ ทำงานแตกต่างกัน
เหตุใดคำสั่ง BIOS แรกจึงอยู่ที่ "ด้านบน" ของ RAM 4 GB
มันตั้งอยู่ที่ "ด้านบน" ของพื้นที่ที่อยู่ 4 GB - และในการเปิดเครื่อง BIOS หรือUEFI ROM ถูกตั้งค่าให้ตอบสนองต่อการอ่านที่อยู่เหล่านั้น
ทฤษฎีของฉันเกี่ยวกับสาเหตุที่เป็นเช่นนี้:
ทุกอย่างเกี่ยวกับการเขียนโปรแกรมทำงานได้ดีขึ้นด้วยที่อยู่ต่อเนื่อง ผู้ออกแบบ CPU ไม่ทราบว่าผู้สร้างระบบต้องการทำอะไรกับ CPU ดังนั้นจึงเป็นความคิดที่ดีที่ CPU จะต้องใช้ที่อยู่ตบกลางพื้นที่เพื่อวัตถุประสงค์ต่างๆ มันเป็นการดีกว่าที่จะ "ให้พ้นทาง" ที่ด้านบนหรือด้านล่างของพื้นที่ที่อยู่ แน่นอนเก็บไว้ในใจการตัดสินใจครั้งนี้ถูกสร้างขึ้นเมื่อ 8086 ใหม่ซึ่งไม่ได้มีMMU
ใน 8086 มีเวกเตอร์ขัดจังหวะอยู่ที่ตำแหน่งหน่วยความจำ 0 ขึ้นไป เวกเตอร์ที่ขัดจังหวะจะต้องอยู่ในที่อยู่ที่รู้จักและต้องการให้อยู่ใน RAM เพื่อความยืดหยุ่น ดังนั้นเริ่มต้นจาก 0 และทำงานได้เหมาะสมสำหรับสิ่งเหล่านั้น (เพราะไม่มีระบบในปี 1978 เมื่อมีการประดิษฐ์ 8086 จะมี RAM 4 Gbytes - ดังนั้นการคาดหวังว่า RAM จะอยู่ที่ 0xFFFFFFF0 นั้นไม่ใช่ความคิดที่ดี) จากนั้น ROM จะต้องเป็น ที่ขอบเขตบน
แน่นอนว่าเริ่มต้นด้วยอย่างน้อย 80286 เวกเตอร์ขัดจังหวะสามารถถูกย้ายไปยังตำแหน่งเริ่มต้นอื่นที่ไม่ใช่ 0 แต่ซีพียู 64- บิต x86 ที่ทันสมัยยังคงบูทในโหมด 8086 ดังนั้นทุกอย่างยังคงทำงานได้เหมือนกันเพื่อความเข้ากันได้ ตามที่ฟังในปี 2558 ยังคงต้องการซีพียู x86 ของคุณเพื่อให้สามารถเรียกใช้ DOS)
ดังนั้นตั้งแต่เวกเตอร์ขัดจังหวะเริ่มต้นจาก 0 และทำงานขึ้น ROM จะต้องเริ่มจากด้านบนและทำงานลง
จะเกิดอะไรขึ้นหากคอมพิวเตอร์ของฉันมี RAM เพียง 1 GB
CPU แบบ 32 บิตมีที่อยู่ 4,294,967,296 หมายเลข 0 (0x00000000) ถึง 4294967295 (0xFFFFFFFF) ROM สามารถใช้งานได้ในบางที่อยู่และ RAM สามารถใช้งานที่อื่นได้ ด้วย MMU ของ CPU สิ่งนี้สามารถเปิดใช้งานได้ทันที RAM ไม่จำเป็นต้องอยู่กับที่อยู่ทั้งหมด
ด้วย RAM ขนาด 1 GB เท่านั้นที่อยู่บางแห่งจะไม่ตอบสนองเมื่อมีการอ่านหรือเขียน ซึ่งอาจทำให้ข้อมูลที่ไม่ถูกต้องถูกอ่านเมื่อเข้าถึงที่อยู่ดังกล่าวหรือการล็อคระบบ
ระบบที่มี RAM มากกว่า 4 GB (เช่น: 8 GB, 16 GB เป็นต้น)
ทำให้มันค่อนข้างง่าย: ซีพียู 64- บิตมีที่อยู่เพิ่มเติม (ซึ่งเป็นหนึ่งในสิ่งที่ทำให้พวกเขา 64- บิต - เช่น 0x00000000000000000000 ผ่าน 0xFFFFFFFFFFFFFFFFFF) ตัวอย่างเช่น RAM พิเศษจึงเหมาะกับ สมมติว่าซีพียูที่อยู่ในโหมดยาว จนกว่าจะถึงตอนนั้น RAM ก็อยู่นั่นไม่สามารถจัดการได้
ทำไมสแต็กเริ่มต้นด้วยบางค่า (ในกรณีนี้ค่าอยู่ที่ 0xFFFFFFF0)
ฉันไม่พบสิ่งใดในทันทีที่สิ่งที่ x86 กำหนดตัวชี้สแต็คที่เปิดเครื่อง แต่ในที่สุดจะต้องมีการกำหนดค่าเริ่มต้นใหม่ตามขั้นตอนการเริ่มต้นอย่างไรก็ตามเมื่อรูทีนดังกล่าวพบว่า RAM มีจำนวนเท่าใดในระบบ (@Eric Towers ในความคิดเห็นด้านล่างรายงานว่ามีการตั้งค่าเป็นศูนย์เมื่อเปิดเครื่อง)