C-如何将数据存储到X86真实模式ISR中的全局变量中



我正在开发以x86真实模式运行的选项ROM(扩展ROM)的INT 13H磁盘服务程序。在执行程序时,我需要访问位于DS(DS = CS)的全局变量,但是全局变量仅读取!只能正常访问位于SS(SS!= DS)的本地变量,但是堆栈的大小还不够。我需要的大小在例程中约为2kb。我的问题是:

  1. 是否可以将数据存储到例程中的全局变量?
  2. 如何在例程中查找/找到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调用之前启动和加载设备驱动程序。

最新更新