INT67H中断怎么用?关键是功能44H

来源:百度知道 编辑:UC知道 时间:2024/05/30 21:19:46
RT.
最好能解释一下EMS的64KB PAGE FRAME和扩充内存之间是以什么方式同步,是自动同步还是要调用中断?
问一楼.假如我现在有一些数据放在高端内存那四个页的页0中,而想要把它们存储到EMS的页9中,应该怎么做?
假如我做完这个以后,又想把EMS页7中的数据复制到物理页0中,又改怎么做?

扩充(expanded)内存(简称EMS内存)允许你通过使用一种称
为“块(bank)转换”的技术,以便访问多达8兆字节的RAM。
在使用这一技术时,可先把一小段额外内存区域(EMS内存)指定为能被切换到处理
机的物理地址区域中。这样的一个内存段即称为一个“块”。然后,通过EMS内存,我们就
能把16K的块(EMS文档中称之为页)转换成指定页框中的常规内存.
可装入一种特殊的驱动程序以允许程序访问EMS内存。这样,你就能像访问文件一
样来访问EMS内存,即它是通过句柄方式实现访问的。
通过Int 67h,功能43h打开了对EMS内存的访问之后,便可通知插
件板(通过Int 67h,功能44),哪些内存页是可访问的。由于内存页是可访问的,这样,便能
从中读出内存或把内存写给该页。完成这些之后,可使用Int 67h,功能45h来关闭句柄。
INT67用法想路是:
1.判断EMS驱动程序是否安装。
2.获取页面帧的段值。
3.申请分配EMS内存页。
4.建立物理页到EMS逻辑页的映射。
5.数据传输。
6.关闭EMS句柄。
如:44H功能(实现物理页到逻辑页的映射关系)的函数可以定义如下:

int MapPageFrameToEms(int handle,int physicPage,int logiPage)
{
union REGS regs;
regs.h.ah=0x44;
regs.h.al=physicPage;
regs.x.bx=logiPage;
regs.x.dx=handle;
int86(0x67,&regs,&regs);
return (regs.h.ah==0);
}

可见是通过调用实现,并非"自动同步"