目录 上一页 下一页 附录A

-312- PC机汇编语言实战精解

参 数:AH=4AH
    BX=新申请内存的"节"数
    ES=被修改的内存块的段地址
调 用:INT 21H
返 回:如果成功,则进位标志CF清零
    如果失败,则进位标志CF置1,AX=错误代码
    AX=07H 内存控制块被破坏
    AX=08H 没有足够内存
    AX=09H ES内的段地址无效
  这个功能有两个用途,一是在申请内存之前重新划分内存,二是如果第一次申请的内存块大小需要调整也使用这个功能。将"GETMEM.ASM"的"第一个插入点"与"第三个插入点"分别改写成这两小段程序,然后编译生成的可执行文件就能正常运行了。
;***







;***
zseg
zseg
第一个插
mov
mov
sub
mov
int
jc

第三个插
segment
ends
入点:******
bx,zseg
ax,es
bx,ax
ah,4ah
21h
error

入点******



;BX寄存器指向程序结尾的段地址
;AX寄存器送入PSP的段地址
;计算程序占用的内存"节"数据
;重新划分内存

;若出现错误,转ERROR显示错误信息


;定义一个"空"段,以便于计算
;程序的长度(以"节"为单位)
  内存是很重要的一种系统资源,可以想象如果一个程序对于内存比较"贪心",只借不还,那将会有什么样的结果。所以当一个程序向DOS申请了内存之后,在结束之前还要把"借"来的内存"还"回去,所谓"好借好还,再借不难"。
  释放申请到的内存块可以使用DOS提供的49H功能:
功能号:49H
用 途:释放已经申请到的内存块
参 数:AH=49H
    ES=待释放的内存块段地址
调 用:INT 21H
返 回:如果成功,则CF标志清零
    如果失败,则CF标志置1,AX=错误代码
    AX=07H 内存控制块被破坏
    AX=09H ES内的段地址无效
  将GETMEM.ASM程序中的"第二个插入点"改写成下面这一段程序就可以得到一个完善的内存分配程序示例:
;***



第二个插
mov
int
jc
入点******
ah,49h
21h
error

;释放申请到的内存块

;如果出现错误,转ERROR显示错误信息

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 附录A