INT 15H 87H: Move Memory Block
[AT]
Expects: AH 87H
CX amount of memory to move, in 2-byte words (max 8000H words)
ES:SI address of 30-byte structure describing the operation
──────────────────────────────────────────────────────────────────
Returns: AH 00H = successful move
01H = RAM parity error occurred
02H = other exception interrupt error occurred
CF NC (0) no error
CY (1) some sort of error
ZF NZ (0) error; unsuccessful move
ZR (1) successful move
──────────────────────────────────────────────────────────────────
Info: You can use this to move chunks of memory around, even when you
are running in real mode (access to RAM above 1MB is normally
accessible only when in 80286 protected mode).
Note: Only old programs use this BIOS interface. It is much better to
use XMS Functions or the DPMI API to access RAM above 1MB.
ES:BX The caller must supply a 30-byte data record which will be used
as a GDT (Global Descriptor Table). This is used to translate
between 32-bit addresses and 24-bit addresses. It is laid out as
follows:
MoveMemGdtRec
Offset Size Contents
▀▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
+0 8 res1 8 bytes of 0
+8 8 res2 this GDT (filled-in by BIOS)
+10H 2 wLimits source block limits (filled-in by BIOS)
+12H 3 p24Source 24-bit physical address of block to copy
+15H 5 res3 (filled-in by BIOS)
+1aH 3 p24Dest 24-bit physical address of destination
+1dH 19 res4 (filled-in by BIOS)
30 size of buffer
You need only fill-in the p24Source and p24Dest with 24-bit
physical memory addresses. Physical memory addresses are linear
and can range from 000000H to ffffffH (i.e., up to 16 MB).
Notes: Interrupts are disabled during block moves. Therefore, use of
this fn can interfere with serial I/O or other interrupt-driven
tasks.
See Also: INT 15H (extended AT services)
BIOS Data Area
ROM-BIOS Functions
-♦-