LOADALL

LOADALLは、インテルのCPU 80286, 80386にあった非公開命令のひとつである
The LOADALL Instruction by Robert Collins。

 概要 
LOADALL命令は、その名前が示すように１命令でCPUのすべての内部レジスタをロードする。セグメントレジスタの可視部(visible part)に加えて、ディスクリプターキャッシュ部(cached part)もロードするため、公開されたx86命令ではできないことが可能である。
LOADALL命令の有用な使用例は、リアルモードのままで1Mバイト以上のメモリ領域をアクセスすることである（Unreal mode）。OS/2 1.x Deitel, Harvey M.; Kogan, Michael S. (1992). The Design of OS/2. Addison-Wesley. ISBN 0-201-54889-5などがLOADALL命令を使用している。

80286版LOADALL
オペコードは、0Fh 05h。80286版LOADALLは、セグメントレジスタの値に関係なく、00800h–00866hのアドレスからデータを読み込む。 
Addressnumber of bytesregisterregisterregisterregister008006not used008062MSW (machine status word)0080814not used008162TR (task register)008182flags0081A2IP (instruction pointer)0081C2LDTR (local descriptor table register)0081E4x2DS (data segment)SS (stack segment)CS (code segment)ES (extra segment)008264x2DI (destination index)SI (source index)BP (base pointer)SP (stack pointer)0082E4x2BXDXCXAX008364x6ES descriptor cacheCS descriptor cacheSS descriptor cacheDS descriptor cache0084E4x6GDTR (global descriptor table register)LDT descriptor cacheIDTR (interrupt descriptor table register)TSS descriptor cache
80286では、LOADALL命令を使用しても、プロテクトモードからリアルモードに戻ることはできない。すなわち、MSWのPEビットはクリアできない。しかし、LOADALL命令があれば、リアルモードのままで1MB以上のメモリにアクセスすることができ、プロテクトモードに移行する必要はなくなる。

80386版LOADALL
オペコードは、0Fh 07h。 80386版LOADALLは、アドレスES:EDIからデータを読み込む。ESは、ディスクリプターキャッシュ部ではなく、ESの可視部が使用される。

Addressnumber of bytesregisterregisterregisterregisterES:EDI+004CR0 (control register 0) ES:EDI+044EFLAGS ES:EDI+084EIP (instruction pointer) ES:EDI+0C4x4EDI (destination index)ESI (source index)EBP (base pointer)ESP (stack pointer) ES:EDI+1C4x4EBXEDXECXEAX ES:EDI+2C2x4DR6DR7 ES:EDI+344TR (task register)ES:EDI+384LDTR (local descriptor table register)ES:EDI+3C4x2GS (extra segment)not usedFS (extra segment)not usedES:EDI+444x2DS (data segment)not usedSS (stack segment)not usedES:EDI+4C4x2CS (code segment)not usedES (extra segment)not usedES:EDI+544x12TSS descriptor cacheIDT descriptor cache GDT descriptor cache LDT descriptor cache ES:EDI+844x12GS descriptor cacheFS descriptor cacheDS descriptor cacheSS descriptor cacheES:EDI+B42x12CS descriptor cacheES descriptor cache 

 脚注 

 参考文献 
 Robert L.Hummel著 槌田浩一訳 80x86/80x87ファミリー・テクニカルハンドブック　技術評論社　ISBN 4-87408-588-1

Category:x86アーキテクチャ