在dos.h文件中,我遇到了下面的宏:
#define disable() __emit__((unsigned char)(0xfa))
在一些研究中我理解 emit 函数是"一个伪函数,它将文字值直接注入到目标代码中#34;。但无法理解的含义 的 EMIT 0xFA回应
答案 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和其他变体也是不可能的。