LOADALL
表示
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 |
脚注
[編集]- ^ The LOADALL Instruction by Robert Collins
- ^ 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