我正在开发以x86真实模式运行的选项ROM(扩展ROM)的INT 13H磁盘服务程序。在执行程序时,我需要访问位于DS(DS = CS)的全局变量,但是全局变量仅读取!只能正常访问位于SS(SS!= DS)的本地变量,但是堆栈的大小还不够。我需要的大小在例程中约为2kb。我的问题是:
- 是否可以将数据存储到例程中的全局变量?
- 如何在例程中查找/找到2KB可用内存?
非常感谢。
int global_var;
void __far int13h_isr(void)
{
int local_var;
__asm
{
push ds
push es
mov bx, cs
mov ds, bx
mov es, bx
};
global_var = 0x22; // global variable can NOT store 0x22 in the routine.
local_var = 0x22; // local variable can store 0x22 correctly.
__asm
{
pop es
pop ds
};
}
int 13H磁盘服务套件的常规ROM(扩展ROM) 是否可以将数据存储到例程中的全局变量中?
数据不能存储到ROM中。如果需要在加载设备驱动程序之前需要内存,则扩展卡将需要自己的内存。
如何在例程中找到/找到2KB可用内存?
设备驱动程序以及ISR可以分配内存,但是MSDOS或其他操作系统必须能够在使用任何扩展特定的INT 13H调用之前启动和加载设备驱动程序。