-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 |