In today's world, Memory map is a topic of great relevance and continues to generate constant debate among experts and people interested in the topic. For many years now, Memory map has captured the attention of society in general, whether due to its impact on daily life, its importance in history, or its relevance in the current environment. Over the years, Memory map has been the subject of numerous studies and analyzes that have yielded surprising results and unexpected conclusions. In this article, we will thoroughly explore the topic of Memory map and examine its influence on different aspects of today's society.
In computer science, a memory map is a structure of data (which usually resides in memory itself) that indicates how memory is laid out. The term "memory map" has different meanings in different contexts.
BIOS for the IBM Personal Computer and compatibles provides a set of routines that can be used by operating system or applications to get the memory layout. Some of the available routines are:
BIOS Function: INT 0x15, AX=0xE801:
This BIOS interrupt call is used to get the memory size for 64MB+ configurations. It is supported by AMI BIOSses dated August 23, 1994 or later. The caller sets AX to 0xE801 then executes int 0x15. If some error has happened, the routine returns with CF (Carry Flag) set to 1. If no error, the routine returns with CF clear and the state of registers is described as following:
Register | Value description |
---|---|
EAX | Extended memory between 1M and 16M, in KB. (Maximum value: 0x3C00 = 15360KB). |
EBX | Count of 64K blocks above 16M. |
ECX | Configured memory 1M to 16M, in KB. |
EDX | Count of configured 64K blocks above 16M. |
BIOS Function: INT 0x15, AX=0xE820 - GET SYSTEM MEMORY MAP:
Input:
Register | Value description |
---|---|
EAX | 0x0000E820 |
EBX | Continuation value or 0x0 to start at beginning of map. |
ECX | Size of buffer for result (20 bytes). |
EDX | 0x534D4150 (ASCII for 'SMAP') |
ES:DI | segment:offset location of the buffer for result. |
SMAP buffer structure:
Offset | Size | Value description |
---|---|---|
0 | QWORD (8 bytes) | Base address of memory map region referred to by EBX. |
8 | QWORD (8 bytes) | Length in bytes. |
16 | DWORD (4 bytes) | Type of address range. |
How used: The operating system shall allocate an SMAP buffer in memory (20 bytes buffer). Then set registers as specified in "Input" table. On first call, EBX should be set to 0. Next step is to call INT 0x15. If no error, the interrupt call returns with CF clear and the buffer filled with data representing first region of the memory map. EBX is updated by BIOS so that when the OS calls the routine again, The next region is returned in the buffer. BIOS sets EBX to zero if all done.