DOS disable()函数式宏

时间:2016-11-27 06:45:44

标签: c dos

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

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

在一些研究中我理解 emit 函数是"一个伪函数,它将文字值直接注入到目标代码中#34;。但无法理解的含义         的 EMIT 0xFA回应

1 个答案:

答案 0 :(得分:1)

它为您的代码文字机器代码注入了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?