Int 15h, 87h Move Block XT-286, AT
Provides the ability for a Real Mode program to move a block of
data to or from the area above 1 Megabyte in the Protected Mode.
Entry AH = 87h
CX = Size in words of block to move
(maximum: 8000h = 32K)
ES:SI = Pointer to a Global Descriptor Table (GDT)
Return CF Set if error, else cleared
ZF Cleared if error, else set
AH = Status of Operation
| 00h - Successful
| 01h - Memory Parity error
| 02h - Exception interrupt error occurred
| 03h - Gate address line 20h failed
──────────────────────────────────────────────────────────────────
This service is available only for the AT and XT-286.
ES:SI points to a list of 6 descriptors. Each descriptor is 8
bytes long. A descriptor is formatted as follows:
Offset Bytes Description
00h 2 Word containing segment limit
02h 2 Low word of 24-bit address
04h 1 High byte of 24-bit address
05h 1 Access rights byte
06h 2 Reserved (must be 0)
The Global Descriptor Table (GDT) pointed to by ES:SI consists of
a list of 6 descriptors. The descriptors are defined below,
appearing in the same order as they appear in memory.
Offset Bytes Description
00h 8 Dummy Descriptor. Initialized by user to 0.
08h 8 Descriptor of this GDT. Initialized by user
to 0. Modified by BIOS.
10h 8 Descriptor of Source block. Initialized by user.
18h 8 Descriptor of Destination block.
Initialized by user.
20h 8 Descriptor for Protected Mode Code Segment.
Initialized by user to 0. Modified by BIOS.
28h 8 Descriptor for Protected Mode Stack Segment.
Initialized by user to 0. Modified by BIOS.
Therefore, for a block move to be performed, only the third and
fourth descriptors need to contain values other than 0s. The
source and target descriptor fields should be initialized as
follows:
* The segment limit field (offset 00h) must contain a value
of 2 * (CX - 1) or greater.
* The 24-bit address field (offset 02h) must contain the
source or destination address.
* The Access Rights byte (offset 05h) must contain 93h
(CPL0-R/W).
Transfers of large blocks of data may result in lost interrupts,
since no interrupts are allowed during the move.