Expanded Memory Specification (EMS)
This topic describes the Lotus/Intel/Microsoft formal specification
(LIM-EMS) used to access Expanded▲ Memory on a PC-compatible system.
See EMM Functions for a description INT 67H services.
The EMS standard provides access more memory without exceeding the 1MB
maximum for 8088-based computers and without switching to protected mode
on 286+ CPUs. Programs such as Lotus 1-2-3 use it to hold data for large
spreadsheets. It is also used for RAM disks and print spoolers. Some TSR
programs use EMS memory to hold data and code (thus minimizing use of
Note: The most common EMS memory is actually extended▲ memory, accessed
via an EMS-emulation device driver such as EMM386.EXE, or 386MAX.
On 286+ CPUs, the Extended Memory Specification (XMS) accesses
additional memory without the emulation layer, so you may prefer
to use its API rather than (or in addition to) the EMS services.
█▌Determining if EMS is Installed▐█
EMS memory is managed by an installable device driver with a device name
of "EMMXXXX0" and referred to as the EMM (Expanded Memory Manager). To
learn if the driver has been installed you can use DOS Fn 3dH to attempt
to open the device as a file. Once opened, you can use DOS IOCTL fn
4407H to get the status. If the returned status (in AL) is 0, then EMM
is NOT installed and a disk file by the name "EMMXXXX0" exists for some
When the EMM driver is installed, it sets the INT 67h vector to point to
its device header. Thus, another way to test for EMS is to fetch the
address in the vector for INT 67H (0:091c) and examine offset 0aH from
that address. It should contain the characters "EMMXXXX0". See
Device Header Layout.
Starting with version 5.0, DOS comes with an expanded memory emulation
driver (EMM386.EXE) for 386-based computers. A few DOS device drivers
and TSRs will take advantage of EMS if it is present:
■ DOS 4.x and 5.x disk buffers can be put in expanded memory
(BUFFERS=nn /X), but this option was removed from DOS 6.0.
■ DOS 4.0+ RAMDISK.SYS driver lets you put a RAM disk in expanded memory
(DEVICE=RAMDISK.SYS nnn /A).
■ DOS 4.0+ Fastopen /X command uses EMS memory for its pathname storage.
■ DOS 6.0 programs and TSRs: Defrag, Dosshell, Msbackup, Mscdex, and
Vsafe will use EMS memory when it is available.
To access the EMS memory manager, use INT 67h with a fn code in the AX
register, as described in EMM Functions.
See Also: EMM Functions
Extended Memory Specification (XMS)
Interrupts and BIOS Services