有关的中断资料:
1.DOS 中断 21H 的 58H
入口参数: AH = 58H, AL = 子功能
| 功能号 | 入口参数 | 出口参数 |
| AL=00H 取分配策略 |
AX = 当前策略 | |
| AX=00H 低内存最先符合 | ||
| AX=01H 低内存最佳符合 | ||
| AX=02H 低内存最后符合 | ||
| AX=40H 高内存最先符合 | ||
| AX=41H 高内存最佳符合 | ||
| AX=42H 高内存最后符合 | ||
| AL = 01H 设置分配策略 |
BL = 新策略 (见上AX) | |
| AL = 02H 取UMB链状态 |
AL=00H UMB不是DOS内存链的一部分 | |
| AL=01H UMB是DOS 内存链的一部分 | ||
| AL = 03H设置UMB链的状态 | BX=00H 从DOS内存链中移出UMB | |
| BX=01H 将UMB加入DOS内存链 |
汇编编程示例:
;=========== Check if has free umb =======
; input: BP = memory block needed
; output: CY = no free umb
; NC = has free umb
; AX = umb segment
ALLOC_UMB PROC
MOV AX,5800H ;取内存分配策略
INT 21H
PUSH AX
MOV AX,5802H ;取UMB状态
INT 21H
XOR AH,AH
PUSH AX
MOV AX,5801H ;设置内存分配策略
MOV BX,41H ;UMB best fit
INT 21H
MOV AX,5803H ;设置UMB状态
MOV BX,1
INT 21H
MOV AH,48H ;分配内存
MOV BX,BP
INT 21H
MOV SI,AX
MOV AX,5803H ;恢复UMB状态
POP BX
INT 21H
MOV AX,5801H ;恢复内存分配策略
POP BX
INT 21H
MOV AX,SI ;如果分配到的内存段地址
CMP AX,0A000H ;小于A000,说明无UMB
JB AU_ERR ;分配到的是常规内存
CLC
RET
AU_ERR:
STC
RET
ALLOC_UMB ENDP