与 2015 相比,内联汇编器给出了 C2400
inline assembler in gives c2400 in vs 2015
尝试实现一个基本的操作系统,但这个 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的一切。 查看他们的文档。
相关文章:
- 为什么我们不编写可以处理C++标识符的汇编器和链接器?
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用C 给出的地址覆盖汇编器堆栈的返回地址
- 与 2015 相比,内联汇编器给出了 C2400
- 在 c++ 中实现内联汇编器以对变量进行异或操作的正确方法
- 简单 g++ 内联汇编器中的错误
- C 汇编器转换问题
- 使用SSE将float值从汇编器DLL返回到C
- 内联汇编器直接双倍到长长转换
- “__cpp”和 gcc 内联 ARM 汇编器
- 需要用C或C++编写MIPS汇编器,寻找一些设计建议
- 将 GCC/ATT 风格的汇编器转换为可视化工作室汇编器
- 如何使用内联汇编器保存寄存器值
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 用汇编器消息编译错误
- 在Eclipse中,当使用汇编器时,汇编看起来是无限的
- 汇编器消息:错误:拇指条件指令应该在 IT 块中 - "strexeq r1,r2,[r4]"
- 使用内联汇编器时编译器的详细输出
- 普通c++代码比内联汇编器快10倍.为什么
- 观察c++中虚函数在汇编器中的后期绑定调用