Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ vs 2015中c2400的内联汇编程序_C++ - Fatal编程技术网

C++ vs 2015中c2400的内联汇编程序

C++ vs 2015中c2400的内联汇编程序,c++,C++,试着实现一个基本的操作系统,但是这个asm的东西让我的头脑混乱了,我正在使用vs2015 给出错误的代码 inline cpu_flags DisableInterrupts() { cpu_flags fl; _asm volatile ("pushfl; popl %0; cli" : "=g" (fl)); return fl; } 它给出了这样的错误 错误C2400“操作码”中的内联汇编程序语法错误;找到“数据类型” 去除挥发性后也没有运气 inline cpu_flags

试着实现一个基本的操作系统,但是这个asm的东西让我的头脑混乱了,我正在使用vs2015

给出错误的代码

inline cpu_flags DisableInterrupts()

{
cpu_flags fl;


_asm volatile ("pushfl; popl %0; cli" : "=g" (fl));


return fl;
}
它给出了这样的错误

错误C2400“操作码”中的内联汇编程序语法错误;找到“数据类型”

去除挥发性后也没有运气

inline cpu_flags DisableInterrupts()
 {



 cpu_flags fl;


_asm ("pushfl; popl %0; cli" : "=g" (fl));


return fl;`
}
它给

错误C2400“操作码”中的内联汇编程序语法错误;找到“(”


谢谢

这是gcc使用的AT&T语法

VisualStudio的内联汇编程序使用英特尔语法。不过,它还有一个内置函数,不需要任何汇编代码

也不是关于此功能的有限使用的备注:

此函数仅在内核模式下可用。如果在用户模式下使用,将在运行时引发特权指令异常


世界上有许多不同的编译器,它们的工作方式都略有不同

您在问题中使用的语法来自gnu制造

但是,您说您正在尝试将它与Microsoft制造的Visual Studio一起使用。Visual Studio对内联asm使用的语法与gcc非常不同


我不打算教你有关Visual Studio的内联asm的所有知识。请看他们的。

好的,你说的语法怎么办?有没有办法将其更改为intel语法,以便我的Visual Studio能够理解,是的,它只是
\u asm cli
,但没有
\u disable()
的优势。好的。\u disable()工作很好,但它不需要任何参数,因此如何处理其他代码,如push和pop。谢谢,我正在编写visual studio版本的代码,该链接有助于。