LOADALLは、インテル社CPU 80286, 80386にあった非公開命令のひとつである [1]

概要編集

LOADALL命令は、その名前が示すように1命令でCPUのすべての内部レジスタをロードする。セグメントレジスタの可視部(visible part)に加えて、ディスクリプターキャッシュ部(cached part)もロードするため、公開されたx86命令ではできないことが可能である。 LOADALL命令の有用な使用例は、リアルモードのままで1Mバイト以上のメモリ領域をアクセスすることである。OS/2 1.x [2]などがLOADALL命令を使用している。

80286版LOADALL編集

オペコードは、0Fh 05h。80286版LOADALLは、セグメントレジスタの値に関係なく、00800h–00866hのアドレスからデータを読み込む。

Address number of bytes register register register register
00800 6 not used
00806 2 MSW (machine status word)
00808 14 not used
00816 2 TR (task register)
00818 2 flags
0081A 2 IP (instruction pointer)
0081C 2 LDTR (local descriptor table register)
0081E 4x2 DS (data segment) SS (stack segment) CS (code segment) ES (extra segment)
00826 4x2 DI (destination index) SI (source index) BP (base pointer) SP (stack pointer)
0082E 4x2 BX DX CX AX
00836 4x6 ES descriptor cache CS descriptor cache SS descriptor cache DS descriptor cache
0084E 4x6 GDTR (global descriptor table register) LDT descriptor cache IDTR (interrupt descriptor table register) TSS descriptor cache

80286では、LOADALL命令を使用しても、プロテクトモードからリアルモードに戻ることはできない。すなわち、MSWのPEビットはクリアできない。しかし、LOADALL命令があれば、リアルモードのままで1MB以上のメモリにアクセスすることができ、プロテクトモードに移行する必要はなくなる。

80386版LOADALL編集

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

Address number of bytes register register register register
ES:EDI+00 4 CR0 (control register 0)
ES:EDI+04 4 EFLAGS
ES:EDI+08 4 EIP (instruction pointer)
ES:EDI+0C 4x4 EDI (destination index) ESI (source index) EBP (base pointer) ESP (stack pointer)
ES:EDI+1C 4x4 EBX EDX ECX EAX
ES:EDI+2C 2x4 DR6 DR7
ES:EDI+34 4 TR (task register)
ES:EDI+38 4 LDTR (local descriptor table register)
ES:EDI+3C 4x2 GS (extra segment) not used FS (extra segment) not used
ES:EDI+44 4x2 DS (data segment) not used SS (stack segment) not used
ES:EDI+4C 4x2 CS (code segment) not used ES (extra segment) not used
ES:EDI+54 4x12 TSS descriptor cache IDT descriptor cache GDT descriptor cache LDT descriptor cache
ES:EDI+84 4x12 GS descriptor cache FS descriptor cache DS descriptor cache SS descriptor cache
ES:EDI+B4 2x12 CS descriptor cache ES descriptor cache

脚注編集

  1. ^ The LOADALL Instruction by Robert Collins
  2. ^ Deitel, Harvey M.; Kogan, Michael S. (1992). The Design of OS/2. Addison-Wesley. ISBN 0-201-54889-5

参考文献編集

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