荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (打倒台独分子!!!), 信区: Program
标  题: [转载] [转寄] Re: 有没高手对内存的管理擅长的?(EMS,XMS)来个连载如何?
发信站: BBS 荔园晨风站 (Tue Mar 21 15:13:35 2000), 转信

【 以下文字转载自 zzt 的信箱 】
【 原文由 zzt.bbs@bbs.netease.com 所发表 】
发信人: black (黑色), 信区: CLanguage
标  题: Re: 有没高手对内存的管理擅长的?(EMS,XMS)来个连载如何?
发信站: 网易 BBS (Mon Aug 23 16:34:07 1999), 转信

这东西不用连载,凡是分析DOS技术的书都有,


                     XMS     调 用 简 介

    使用 XMS 前必须测试系统有无加载 HIMEM.SYS,方法如下:

                    MOV AX,4300H
                    INT 2FH
                    CMP AL,80H
                    JNE NO_XMS          ; XMS 不存在

然后获得 XMS 驱动程序控制功能的地址,如下:

                    MOV AX,4310H
                    INT 2FH
                    MOV WORD PTR XMS_CONTROL,   BX
                    MOV WORD PTR XMS_CONTROL+2, ES

现在就可以给相应的寄存器赋值,用 CALL [XMS_CONTROL] 调用 XMS。
┌────┬────────┬───────────┬─────────────
─┐
│ 功能号 │    功能解释    │      调用寄存器      │         返回寄存器
  │
├────┼────────┼───────────┼─────────────
─┤
│ 08H    │最大可用 XMS尺  │ AH = 08H             │ AX=最大可用 XMS 内存
  │
│        │寸,以KB为单位  │                      │
  │
├────┼────────┼───────────┼─────────────
─┤
│ 09H    │分配 XMS 空间   │ AH = 09H             │ AH=0000H失败,AB=0001H成
功 │
│        │                │ DX = 以KB计的内存块  │ DX = 分配块的句柄(
HANDLE )│
│        │                │                      │ BL = 错误代码
  │
├────┼────────┼───────────┼─────────────
─┤
│ 0AH    │释放 XMS 空间   │ AH = 0AH             │ AH=0000H失败,AB=0001H成
功 │
│        │                │ DX = 释放块句柄      │ BL = 错误代码
  │
├────┼────────┼───────────┼─────────────
─┤
│ 0BH    │移动 XMS 块数据 │ AH = 0BH             │ AH=0000H失败,AB=0001H成
功 │
│        │                │ DS:SI=指向 XMS 移动  │ BL = 错误代码
  │
│        │                │ 结构的指针(附表)     │
  │
├────┼────────┼───────────┼─────────────
─┤
│        │                │                      │
  │
└────┴────────┴───────────┴─────────────
─┘

        XMS 移动结构
┌───────┬──────────────┐
│  偏 移 量    │       含         义        │
├───────┼──────────────┤
│ 000H - 003H  │ 需传送的字节数             │
├───────┼──────────────┤
│ 004H - 005H  │ 源块句柄                   │
├───────┼──────────────┤
│ 006H - 009H  │ 32位源段址及偏移值         │
├───────┼──────────────┤
│ 00AH - 00BH  │ 目的句柄                   │
├───────┼──────────────┤
│ 00CH - 00FH  │ 32位目的段址及偏移值       │
└───────┴──────────────┘


    XMS (Int 2F/43; Multiplex)

 INT 2F - INSTALLATION CHECK
     AX = 4300h

 Return: AL = 80h XMS driver installed
     AL <> 80h no driver

 Notes:  XMS gives access to extended memory and noncontiguous/nonEMS
       memory above 640K
     this installation check DOES NOT follow the format used by other
       software

 SeeAlso: AX=4310h

 --------
 INT 2F - XMS - GET DRIVER ADDRESS
     AX = 4310h

 Return: ES:BX -> driver entry point

 SeeAlso: AX=4300h

 Perform a FAR call to the driver entry point with AH set to the function
        code
     AH  function
     00h  Get XMS version number
          Return: AX = XMS version (in BCD)
              BX = internal revision number
              DX = 0001h if HMA (1M to 1M + 64K) exists
               0000h if HMA does not exist
     01h  Request High Memory Area (1M to 1M + 64K)
          DX = memory in bytes (for TSR or device drivers)
           FFFFh if application program
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     02h  Release High Memory Area
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     03h  Global enable A20, for using the HMA
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     04h  Global disable A20
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     05h  Local enable A20, for direct access to extended memory
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     06h  Local disable A20
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     07h  Query A20 state
          Return: AX = 0001h enabled
             = 0000h disabled
              BL = error code (0 = successful)
     08h  Query free extended memory, not counting HMA
          Return: AX = size of largest extended memory block in K
              DX = total extended memory in K
              BL = error code (see below)
     09h  Allocate extended memory block
          DX = Kbytes needed
          Return: AX = 0001h success
                DX = handle for memory block
             = 0000h failure
                BL = error code (see below)
     0Ah  Free extended memory block
          DX = handle of block to free
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     0Bh  Move extended memory block
          DS:SI -> EMM structure (see below)
          Note: if either handle is 0000h, the corresponding offset is
            considered to be an absolute segment:offset address in
            directly addressable memory
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     0Ch  Lock extended memory block
          DX = handle of block to lock
          Return: AX = 0001h success
                DX:BX = 32-bit linear address of locked block
             = 0000h failure
                BL = error code (see below)
     0Dh  Unlock extended memory block
          DX = handle of block to unlock
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     0Eh  Get handle information
          DX = handle for which to get info
          Return: AX = 0001h success
                BH = block's lock count
                BL = number of free handles left
                DX = block size in K
             = 0000h failure
                BL = error code (see below)
     0Fh  Reallocate extended memory block
          DX = handle of block
          BX = new size of block in K
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)
     10h  Request upper memory block (nonEMS memory above 640K)
          DX = size of block in paragraphs
          Return: AX = 0001h success
                BX = segment address of UMB
                DX = actual size of block
             = 0000h failure
                BL = error code (see below)
                DX = largest available block
     11h  Release upper memory block
          DX = segment address of UMB to release
          Return: AX = 0001h success
             = 0000h failure
                BL = error code (see below)

 Note:   HIMEM.SYS requires at least 256 bytes free stack space

 Format of EMM structure:
 Offset  Size    Description
  00h    DWORD   number of bytes to move (must be even)
  04h    WORD    source handle
  06h    DWORD   offset into source block
  0Ah    WORD    destination handle
  0Ch    DWORD   offset into destination block

 Error codes returned in BL:
     80h Function not implemented
     81h Vdisk was detected
     82h An A20 error occurred
     8Eh a general driver error
     8Fh unrecoverable driver error
     90h HMA does not exist
     91h HMA is already in use
     92h DX is less than the /HMAMIN= parameter
     93h HMA is not allocated
     94h A20 line still enabled
     A0h all extended memory is allocated
     A1h all available extended memory handles are allocated
     A2h Invalid handle
     A3h Source handle is invalid
     A4h Source offset is invalid
     A5h Destination handle is invalid
     A6h Destination offset is invalid
     A7h Length is invalid
     A8h Move has an invalid overlap
     A9h Parity error occurred
     AAh Block is not locked
     ABh Block is locked
     ACh Block lock count overflowed
     ADh Lock failed
     B0h Only a smaller UMB is available
     B1h No UMB's are available
     B2h UMB segment number is invalid


【 在 gdxkz (Ice Bird) 的大作中提到: 】


--
-------------------------------------------------------------------------------
黑夜给了我黑色的眼睛,我用它寻找光明
Email : blackcolor@263.net

※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.103.173.119]
--
※ 转寄:.网易 BBS bbs.netease.com.[FROM: 202.96.151.222]
.
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.11]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店