我刚刚读到汇编代码可以直接包含在C / C ++程序中,例如,
__asm statement
__asm {
statement-1
statement-2
...
statement-n
}
我只是想知道在什么情况下将汇编代码包含在C / C ++中会很有用。
在嵌入式系统开发中,使用C / C ++进行汇编的最重要的地方(也许只有这样才有意义)是在嵌入式系统开发中,这是访问某些外围设备的唯一途径,或者是需要这样做的地方,因为我们需要无论编译标志是什么,指令的确切顺序都是如此。最后一种情况最常见于引导加载程序或关键操作系统部分(如上下文切换)中。
我想到的示例是访问MicroBlaze处理器中的特殊寄存器:甚至Xilinx也建议使用汇编来访问那些寄存器(我也没有其他方法知道),因为没有其他方法。
通过将其嵌入到C中,可以像这样使用它:
unsigned long get_msr(void) {
unsigned long msr;
asm ("mfs %0, rmsr" : "=d" (msr)); // note: this is a gnu extention
return msr;
}
那就是GNU C内联汇编,您可以在其中编写输入/输出约束,以告诉编译器哪些寄存器是输入和输出。OP正在询问有关MSVC内联汇编的信息,这太糟糕了,以至于MSVC在x64上将其删除(MSVC中的易用实现以及低效的语法)。之所以可以这样做,是因为它们对于您将使用GNU C内联汇编的大多数事物具有内在函数,甚至x86
cli
/之类的东西也sti
可以禁用/启用内核代码中的中断。