经典汇编语言教程:8.3.7 内存管理的中断功能

8.3.7 内存管理的中断功能

在C/C++语言环境中,若事先不知道数据的容量,那么,可通过动态申请空间的方法来解决数据的存储问题,这种动态数据结构可用中断21H所提供的存储管理功能来实现。

中断21H在内存管理方面所提供的主要功能如下:

48H——分配内存块
49H——释放内存块
4AH——重定义内存块的大小
58H——读取/设置内存分配策略,其最基本的分配策略有三种:第一满足、最好满足和最后满足

有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅附录3之内存分配功能

有关存储分配策略的含义可参阅《操作系统》课程中“内存管理”部分的介绍。

8.3.8 读取和设置中断向量

中断向量是系统用来存放中断服务程序或系统参数的入口地址。在通常情况下,程序员不需要对中断向量表作任何操作,但在开发程序时,若要为某种特殊需要而提供新的中断处理程序时,则其就必须要操作中断向量表。

1、读取中断向量

(1)、DOS功能调用的方法

DOS提供了用系统调用的方法来读取中断向量,其中断21H之功能35H就能读取指定中断号的入口地址。其使用参数如下:

入口参数:AH=35H,AL=中断号
出口参数:ES:BX=中断处理程序的入口地址

例8.15 用功能调用的方法把中断n的入口地址保存到双字变量OldAddr中。

解:
……
OldAddr DD ?
……
MOVAL,n;这里的n要用具体的中断号来定
MOVAH, 35H
INT21H
MOVword ptr OldAddr, BX
MOVword ptr OldAddr+2,ES;把其入口地址保存在存储单元中
……

(2)、直接访问存储单元的方法

由前面的图8.2不难看出:中断向量表是存储在内存的第0段。若中断号为n,那么,其入口地址在表内的偏移量为4n。

例8.16 用直接访问存储单元的方法把中断n的入口地址保存到双字变量OldAddr中。

解:
……
OldAddr DD ?
……
MOVAX, 0H
MOVES,AX;中断向量表存储在第0段内
MOVBX, 4*n
MOVAX, ES:[BX];读取中断入口地址的偏移量
MOVword ptr OldAddr, AX;保存中断入口地址的偏移量
MOVAX, ES:[BX+2];读取中断入口地址的段地址
MOVword ptr OldAddr+2, ES;保存中断入口地址的段地址
……

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号