# LOADALL

LOADALL is een ongedocumenteerde instructie van sommige microprocessors van Intel.
LOADALL kan met één instructie alle registers van de processor laden. Interessant is dat ook de segmentdescriptors worden geladen, onafhankelijk van de segmentregisters, waardoor het onder andere mogelijk is in real mode het hele geheugen van de 80286 te benaderen.
De instructie komt voor op de 80286 en de 80386, maar de werking is op die twee processors geheel anders.

## 80286

De machinecode op de 80286 is 0F05. De instructie laadt gegevens van adres 00800-00866, ongeacht de inhoud van de segmentregisters. Nu worden die adressen meestal door het besturingssysteem voor andere doelen gebruikt. Men moet dus de inhoud van die adressen elders redden en de gewenste gegevens op die adressen zetten voordat men LOADALL uitvoert. Hierdoor is LOADALL een vrij trage bewerking.
Hoewel het MSW wordt geladen, is het met LOADALL niet mogelijk terug te keren van protected mode naar real mode.
| Adres | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers |
| 00800 | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | MSW, machine status word | MSW, machine status word |
| 00808 | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt |
| 00810 | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | niet gebruikt | | |
| 00816 | TR, task register | TR, task register | flags | flags | IP, instruction pointer | IP, instruction pointer | LDTR, local descriptor table register | LDTR, local descriptor table register |
| 0081E | DS data segment | DS data segment | SS stacksegment | SS stacksegment | CS codesegment | CS codesegment | ES extra segment | ES extra segment |
| 00826 | DI destination index | DI destination index | SI source index | SI source index | BP base pointer | BP base pointer | SP stack pointer | SP stack pointer |
| 0082E | BX | BX | DX | DX | CX | CX | AX | AX |
| 00836 | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | | |
| 0083C | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | | |
| 00842 | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | | |
| 00848 | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | | |
| 0084E | GDT, global descriptor table | GDT, global descriptor table | GDT, global descriptor table | GDT, global descriptor table | GDT, global descriptor table | GDT, global descriptor table | | |
| 00854 | LDT, local descriptor table | LDT, local descriptor table | LDT, local descriptor table | LDT, local descriptor table | LDT, local descriptor table | LDT, local descriptor table | | |
| 0085A | IDT, interrupt descriptor table | IDT, interrupt descriptor table | IDT, interrupt descriptor table | IDT, interrupt descriptor table | IDT, interrupt descriptor table | IDT, interrupt descriptor table | | |
| 00860 | TSS, task state segment | TSS, task state segment | TSS, task state segment | TSS, task state segment | TSS, task state segment | TSS, task state segment | | |

## 80386

De machinecode op de 80386 is 0F07. De instructie laadt gegevens van het adres dat wordt aangewezen door ES:EDI. Hierbij wordt inderdaad ES gebruikt en niet de descriptor van ES.
| Adres | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers | Registers |
| ES:EDI+00 | CR0, control register 0 | CR0, control register 0 | CR0, control register 0 | CR0, control register 0 | EFLAGS | EFLAGS | EFLAGS | EFLAGS | EIP, instruction pointer | EIP, instruction pointer | EIP, instruction pointer | EIP, instruction pointer | | | | |
| ES:EDI+0C | EDI, destination index | EDI, destination index | EDI, destination index | EDI, destination index | ESI, source index | ESI, source index | ESI, source index | ESI, source index | EBP, base pointer | EBP, base pointer | EBP, base pointer | EBP, base pointer | ESP, stack pointer | ESP, stack pointer | ESP, stack pointer | ESP, stack pointer |
| ES:EDI+1C | EBX | EBX | EBX | EBX | EDX | EDX | EDX | EDX | ECX | ECX | ECX | ECX | EAX | EAX | EAX | EAX |
| ES:EDI+2C | DR6 | DR6 | DR6 | DR6 | DR7 | DR7 | DR7 | DR7 | TR, task state selector | TR, task state selector | TR, task state selector | TR, task state selector | LDTR, local descriptor table | LDTR, local descriptor table | LDTR, local descriptor table | LDTR, local descriptor table |
| ES:EDI+3C | GS, extra segment | GS, extra segment | niet gebruikt | niet gebruikt | FS, extra segment | FS, extra segment | niet gebruikt | niet gebruikt | DS, datasegment | DS, datasegment | niet gebruikt | niet gebruikt | | | | |
| ES:EDI+48 | SS, stacksegment | SS, stacksegment | niet gebruikt | niet gebruikt | CS, codesegment | CS, codesegment | niet gebruikt | niet gebruikt | ES, extra segment | ES, extra segment | niet gebruikt | niet gebruikt | | | | |
| ES:EDI+54 | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | TSS descriptor, task state selector | | | | |
| ES:EDI+60 | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | IDT descriptor, interrupt descriptor table | | | | |
| ES:EDI+6C | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | GDT descriptor, global descriptor table | | | | |
| ES:EDI+78 | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | LDT descriptor, local descriptor table | | | | |
| ES:EDI+84 | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | GS segmentdescriptor | | | | |
| ES:EDI+90 | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | FS segmentdescriptor | | | | |
| ES:EDI+9C | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | DS segmentdescriptor | | | | |
| ES:EDI+A8 | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | SS segmentdescriptor | | | | |
| ES:EDI+B4 | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | CS segmentdescriptor | | | | |
| ES:EDI+C0 | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | ES segmentdescriptor | | | | |

## Andere processors

Voor zover bekend is de instructie LOADALL alleen beschikbaar op de 80286 en 80386. Het is echter mogelijk dat andere processors een soortgelijke instructie uitvoeren als men maar weet wat de opcode is en welke waarde de registers moeten hebben.
Het probleem is namelijk dat lang niet alle eigenschappen van de processors gedocumenteerd zijn. Ook domweg alle mogelijkheden proberen is niet haalbaar - daarvoor zijn het er te veel. Sommige opcodes gedragen zich als ongeldige instructie tenzij de registers een speciale - door de fabrikant geheimgehouden - waarde bevatten.