在dos.h文件中,我遇到了下面的宏:

    #define disable()       __emit__((unsigned char)(0xfa))


在一些研究中,我了解到发射函数是“将文字值直接注入目标代码中的伪函数”。但无法理解
        发射(0xfa)

最佳答案

它将int插入您的代码文字机器代码。根据注释int主要问题,这类似于:(我在这里使用TP7 pascal代码,因为我很酷):

BEGIN
   WriteLn('Hello world, now interrupts are disabled');
   ASM
      CLI ; // clear interrupts - to re-enable call STI
   END
END.


另请参见-https://stackoverflow.com/a/1581729/78712

另一个示例(这次是在C中,是从http://borlpasc.narod.ru/english/faqs/written.htm借来的),可能是

// jump FFFF:0000
#define reboot  __emit__ 0xEA __emit__ 0x00 __emit__ 0x00 __emit__ 0xFF __emit__ 0xFF


这似乎是特定于Mircrosoft编译器的,因为我不确定它在GCC上是否可用。请注意,这仅适用于16位DOS,在win32下,它将以一种有趣的方式失败。 Linux / ARM / AMD64和其他变体也不可能。

也可以看看
In C programming, what does "emit" do?

关于c - DOS disable()类似函数的宏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40826462/

10-12 13:32