在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/