Moderne x86-processors beginnen na een reset in een toestand die Intel vergelijkt met die van de Intel 8086: real mode. Dat betekent niet dat de processor de 8086 volledig nabootst. Het is een geërfd startpunt dat firmware en sommige besturingssysteemonderdelen nog steeds moeten verlaten.
Dat onderscheid verklaart waarom UEFI de opstartprocedure kan veranderen zonder de resettoestand van de processor aan te passen. Ook het starten van extra processorkernen kan nog 16-bitcode vereisen.
Wat gebeurt er bij het starten?
In real mode berekent de processor een adres volgens het klassieke model: de segmentwaarde × 16 plus de offset. Met 16-bit segment- en offsetwaarden hoort daarbij een nominale adresruimte van 1 MiB. Dat model is niet hetzelfde als het startadres van moderne x86-processors: volgens XDA Developers halen Intel- en AMD-processors hun eerste instructie na een reset op adres FFFFFFF0h, 16 bytes onder 4 GiB. Daarbij gelden speciale segmentregisterwaarden en een verborgen basisadres. XDA Developers beschrijft de resettoestand en de klassieke adresberekening.
Intel zegt dat Intel 64-ontwerpen na een reset in dezelfde toestand verkeren als de oorspronkelijke 8086. XDA Developers haalt daarnaast AMD-documentatie aan, waarin staat dat AMD-processors aanvankelijk in real mode komen. Intel beschrijft deze geërfde starttoestand in zijn uitleg over X86S.
UEFI verandert de firmware- en opstartprocedure, niet op zichzelf de resetarchitectuur van de processor. De firmware schakelt na het starten door; op een systeem dat uitsluitend UEFI gebruikt, hoeft de bootloader van het besturingssysteem niet in real mode te draaien.
Real mode is geen volledige 8086-emulatie
De zichtbare waarden van segmentregisters vertellen niet het hele verhaal. Zoals OS/2 Museum uitlegt, hebben die registers ook verborgen attributen, waaronder een basisadres en segmentkenmerken. Het laden van een register kan die interne toestand veranderen. De bekende vergelijking met de 8086 is dus een bruikbare beschrijving van de compatibele starttoestand, maar geen volledige uitleg van het moderne processorgedrag. OS/2 Museum legt uit hoe verborgen segmenttoestand de werking van real mode nuanceert.
Dat merk je bijvoorbeeld bij een overgang terug van protected mode naar real mode: alleen een far jump uitvoeren wist de eerder geladen segmentattributen niet. In een antwoord op een specifieke QEMU-vraag adviseerde forumdeelnemer nullplan om eerst, terwijl de processor nog in protected mode staat, passende 16-bit code- en datadescriptors te laden. De bespreking op OSDev.org licht die overgang toe.
Waarom extra kernen nog 16-bitcode kunnen gebruiken
Bij de traditionele start van een extra processorkern stuurt het systeem eerst een INIT-signaal en daarna een SIPI. De vector van die SIPI verwijst naar startcode onder 1 MiB, waar de kern in real mode begint. Intel beschreef voor X86S daarom een vervangend 64-bitmechanisme voor het starten van andere kernen. Intels uitleg van X86S behandelt ook de bestaande SIPI-startprocedure.
Adam Conway van XDA Developers telde in een QEMU/OVMF-test 18 verschillende real-mode-instructieadressen op de gewone firmware-route, vóór de overgang naar protected mode. In een afzonderlijke test van de startcode voor een tweede kern telde hij 67 16-bitinstructies in Linux 6.18. Dat zijn uitkomsten van twee verschillende tests, geen algemene aantallen voor iedere processor of firmware. In de speciale TDX-route van de OVMF-test stond protected mode al aan.
Conway beschreef ook Windows 11-build 10.0.28000.3086: daarin vond hij de routines HalpRMStub, HalpPMStub en HalpLMStub voor de start van een kern. Die bevinding geldt voor de onderzochte build. XDA Developers beschrijft de QEMU/OVMF-test en de Linux- en Windows-codeanalyse.
Wat X86S had veranderd
Intel stelde X86S in 2023 voor als een vereenvoudigde x86-architectuur die rechtstreeks in 64-bit paged mode zou starten. Het voorstel zou ook het traditionele SIPI-mechanisme vervangen. Zo'n ontwerp vraagt niet alleen om een andere resettoestand, maar ook om nieuwe startcode voor extra kernen. Intel beschreef virtualisatie als een manier waarop oudere 64-bitbesturingssystemen ondersteund zouden kunnen worden.
| Ontwerp | Start na reset | Start van extra kernen |
| Gedocumenteerd x86 | De aan de 8086 gekoppelde resettoestand; firmware schakelt daarna door. | Traditioneel via INIT en SIPI, met startcode onder 1 MiB. |
| X86S-voorstel | Rechtstreeks starten in 64-bit paged mode. | Een nieuw 64-bitmechanisme als vervanging voor SIPI. |
Intel zegt dat het bedrijf na input uit het ecosysteem besloot X86S niet voort te zetten. Het bedrijf noemt daarnaast zijn langdurige inzet voor softwarecompatibiliteit. Dat standpunt maakt duidelijk waarom een architectuurwijziging ook rekening moet houden met bestaande software en opstartprocedures; het is geen door Intel genoemde, specifiekere verklaring voor het besluit. Intels officiële pagina beschrijft het voorstel, de compatibiliteitsinzet en het besluit om X86S niet voort te zetten.