如何在x86实模式ISR中将数据存储到全局变量中?

时间:2017-12-28 15:54:48

标签: c assembly x86

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

  1. 是否可以将数据存储到例程中的全局变量中?
  2. 如何在例程中查找/找到2KB可用内存?
  3. 非常感谢。

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

1 个答案:

答案 0 :(得分:0)

  

选项rom(扩展ROM)的INT 13H磁盘服务程序   是否可以将数据存储到例程中的全局变量中?

数据无法存储到ROM中。如果在加载设备驱动程序之前需要内存,扩展卡将需要它自己的内存。

  

如何在例程中查找/找到2KB可用内存?

设备驱动程序及其ISR可以分配内存,但在使用任何特定于扩展的INT 13H调用之前,MSDOS或某些其他操作系统必须能够引导和加载设备驱动程序。