深入解析EMS功能调用
立即解锁
发布时间: 2025-08-24 00:02:25 阅读量: 1 订阅数: 4 

### 深入解析EMS功能调用
在计算机系统中,扩展内存管理(EMS)起着至关重要的作用,它允许程序更有效地利用系统资源。本文将详细介绍一系列EMS功能调用,包括其功能、调用方式、返回值以及相关注意事项。
#### 1. 功能概述
以下是对各个EMS功能调用的简要概括:
| 功能编号 | 子功能编号 | 功能名称 | 描述 |
| ---- | ---- | ---- | ---- |
| Int 67H Function 4EH | Subfunction 03H | Get size of page map information | 返回接收页面映射信息所需缓冲区的大小 |
| Int 67H Function 4FH | Subfunction 00H | Save partial page map | 将扩展内存页面映射寄存器的子集状态保存到指定缓冲区 |
| Int 67H Function 4FH | Subfunction 01H | Restore partial page map | 恢复扩展内存页面映射寄存器的子集状态 |
| Int 67H Function 4FH | Subfunction 02H | Get size of partial page map information | 返回接收部分页面映射信息所需缓冲区的大小 |
| Int 67H Function 50H | Subfunction 00H | Map multiple pages by number | 根据物理页面编号将逻辑扩展内存页面映射到CPU可访问的物理内存页面 |
| Int 67H Function 50H | Subfunction 01H | Map multiple pages by address | 根据物理页面段地址将逻辑扩展内存页面映射到CPU可访问的物理内存页面 |
| Int 67H Function 51H | - | Reallocate pages for handle | 修改分配给EMM句柄的扩展内存页面数量 |
| Int 67H Function 52H | Subfunction 00H | Get handle attribute | 返回指定句柄的属性(易失性或非易失性) |
| Int 67H Function 52H | Subfunction 01H | Set handle attribute | 设置指定句柄的属性(易失性或非易失性) |
| Int 67H Function 52H | Subfunction 02H | Get attribute capability | 返回扩展内存管理器和硬件是否支持非易失性属性的代码 |
| Int 67H Function 53H | Subfunction 00H | Get handle name | 返回分配给句柄的8字符名称 |
| Int 67H Function 53H | Subfunction 01H | Set handle name | 为EMM句柄分配名称 |
| Int 67H Function 54H | Subfunction 00H | Get all handle names | 返回所有活动句柄的名称 |
| Int 67H Function 54H | Subfunction 01H | Search for handle name | 返回与指定名称关联的EMM句柄 |
| Int 67H Function 54H | Subfunction 02H | Get total handles | 返回扩展内存管理器支持的句柄总数 |
| Int 67H Function 55H | Subfunctions 00H and 01H | Map pages and jump | 更改扩展内存映射上下文并转移控制到指定地址 |
| Int 67H Function 56H | Subfunctions 00H and 01H | Map pages and call | 更改扩展内存映射上下文并执行对指定地址的远调用 |
| Int 67H Function 56H | Subfunction 02H | Get stack space for map page and call | 返回Int 67H Function 56H Subfunction 00H或01H所需的堆栈空间字节数 |
| Int 67H Function 57H | Subfunction 00H | Move memory region | 在不干扰当前扩展内存映射上下文的情况下,将内存区域从常规或扩展内存的任何位置复制到其他位置 |
| Int 67H Function 57H | Subfunction 01H | Exchange memory regions | 在不干扰当前扩展内存映射上下文的情况下,交换常规或扩展内存中的任何两个内存区域 |
| Int 67H Function 58H | Subfunction 00H | Get addresses of mappable pages | 返回系统中每个可映射页面的段基地址和物理页面编号 |
| Int 67H Function 58H | Subfunction 01H | Get number of mappable pages | 返回可映射物理页面的数量 |
| Int 67H Function 59H | Subfunction 00H | Get hardware configuration | 返回扩展内存硬件的配置信息 |
| Int 67H Function 59H | Subfunction 01H | Get number of raw pages | 获取系统中存在的原始扩展内存页面总数和未分配的原始页面数量 |
| Int 67H Function 5AH | Subfunction 00H | Allocate handle and standard pages | 分配一个EMM句柄并将标准(16 KB)扩展内存页面与该句柄关联 |
| Int 67H Function 5AH | Subfunction 01H | Allocate handle and raw pages | 分配一个原始EMM句柄并将原始扩展内存页面与该句柄关联 |
| Int 67H Function 5BH | Subfunction 00H | Get alternate map registers | 返回活动备用寄存器集的编号,或者如果没有活动备用集,则将映射寄存器的状态保存到缓冲区并返回其地址 |
#### 2. 具体功能详解
##### 2.1 Get size of page map information (Int 67H Function 4EH Subfunction 03H)
- **调用方式**:
- `AH = 4EH`
- `AL = 03H`
- **返回值**:
- 如果函数成功:
- `AH = 00H`
- `AL = 缓冲区大小(字节)`
- 如果函数失败:
- `AH = 错误代码`
##### 2.2 Save partial page map (Int 67H Function 4FH Subfunction 00H)
- **调用方式**:
- `AH = 4FH`
- `AL = 00H`
- `DS:SI = 映射列表的段:偏移量`
- `ES:DI = 接收映射状态的缓冲区的段:偏移量`
- **返回值**:
- 如果函数成功:
- `AH = 00H`
- 缓冲区填充有映射信息
- 如果函数失败:
- `AH = 错误代码`
- **注意事项**:
- 映射列表的第一个字包含可映射段的数量,后面跟着可映射内存区域的段地址(每个段一个字)。
- 要确定映射状态所需缓冲区的大小,使用Int 67H Function 4FH Subfunction 02H。
##### 2.3 Restore partial page map (Int 67H Function 4FH Subfunction 01H)
- **调用方式**:
- `AH = 4FH`
- `AL = 01H`
- `DS:SI = 缓冲区的段:偏移量`
- **返回值**:
- 如果函数成功:
- `AH = 00H`
- 如果函数失败:
- `AH = 错误代码`
- **注意事项**:
- 缓冲区包含映射信息,必须由之前调用Int 67H Function 4FH Subfunction 00H准备。
##### 2.4 Get size of partial page map information (Int 67H Function 4FH Subfunction 02H)
- **调用方式**:
- `AH = 4FH`
- `AL = 02H`
- `BX = 页面数量`
- **返回值**:
- 如果函数成功:
- `AH = 00H`
- `AL = 数组大小(字节)`
- 如果函数失败:
- `AH = 错误代码`
0
0
复制全文
相关推荐










