INT 15h,  87h (135)      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.
 
       On entry:      AH         87h
                      CX         Size in words of block to move (maximum:
                                 8000h = 32K)
                      ES:SI      Pointer to a Global Descriptor Table (GDT)
                                 (see below)
 
       Returns:       Carry      Set if error, else cleared
                      Zero       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
 
  --------------------------------------------------------------------------
 
       Notes:         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 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.

Seealso:



This page last updated on Fri Nov 30 10:49:50 MSK 2001
Copyright © 1992-2001, Vitaly Filatov, Moscow, Russia
Webmaster