与 2015 相比,内联汇编器给出了 C2400

inline assembler in gives c2400 in vs 2015

本文关键字:C2400 汇编器 2015 相比      更新时间:2023-10-16

尝试实现一个基本的操作系统,但这个 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 语法。

Visual Studio 在其内联汇编器中使用 Intel 语法。但是,还有一个内置的 _disable(( 函数,不需要任何汇编程序代码。

也不是关于此功能有限使用的评论:

此功能仅在内核模式下可用。如果在用户模式下使用,则会在运行时引发特权指令异常。

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

您在问题中使用的语法来自 gnu 制作的 gcc。

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

我不会试图教你关于Visual Studio的内联asm的一切。 查看他们的文档。