温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - In what cases would I want to use inline assembly code in C/C++ code
assembly c c++ inline-assembly

其他 - 在什么情况下我想在C / C ++代码中使用内联汇编代码

发布于 2020-04-11 23:54:09

我刚刚读到汇编代码可以直接包含在C / C ++程序中,例如,

__asm statement
__asm {
statement-1
statement-2
...
statement-n
}

我只是想知道在什么情况下将汇编代码包含在C / C ++中会很有用。

查看更多

提问者
pasha
被浏览
57
Simon Doppler 2020-02-02 17:08

在嵌入式系统开发中,使用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;
}

另一个示例是ARM提供的上下文切换实现也使用汇编语言(尽管在这种情况下未嵌入C代码中)。